Transcript Slide 1
Lecture 7
Goals:
• Complete Chapter 4
• Chapters 5 and 6
Sept 17
Scripts
• Sequence of instructions that we may want
to run can be stored in a file (known as script).
• by typing the name of the file, Matlab
executes the sequence of operations.
• files can be created by any plain text editor
(such as notepad) or the editor that comes
with Matlab.
Example:
Files, path, working directory etc.
• We can save the values of the current
variables using the save command.
>> save(‘temp’, ‘a’, ‘b’, ‘c’);
Will save variables a, b, c in temp.
• default directory is named work. But this can
be changed by specifying other paths.
Example:
Files, path, working directory etc.
• We can load a file using the load command.
Example:
Importing and exporting data
We can read from an Excel spreadsheet using
the command:
>> tab = xlsread(‘my_file.xls’);
Now tab becomes a matrix.
Example:
Reading a plain text ASCII file
Functions
• functions encapsulate computations that are
repeatedly performed.
• input and output parameters.
Example 1: Write a function to compute the
hypotenuse of a right triangle given the two
smaller sides a a and b.
function c = hyp(a, b)
c = sqrt(a*a + b * b);
• This file should be stored in the current
directory that is visible to Matlab.
Then we can perform:
>> hyp(3, 4)
ans =
5
Example 2: Write a function swap that takes as
input an array of integers and returns an array
by swapping the max key and the key in index
1.
For example:
>> B = [1, 2, 8, 4, 7, 5, 6];
>> C = swap(B);
>> C
Ans =
[8, 2, 1, 4, 7, 5, 6];
Etc.
Function swap
function B = swap (A)
[temp, id] = max(A);
A(1) = A(1)+ A(id);
A(id)= A(1) - A(id);
A(1) = A(1) - A(id);
B = A;
Local vs. global variables
Example 3: Write a function GCD that outputs
the greatest common divisor of two positive
integers n and m.
Recall Euclid’s algorithm:
GCD of
52 ,
new pair: 9,
7,
2,
1,
9 compute mod(52, 9) = 7
7
mod(9, 7) = 2
2
mod(7, 2) = 1
1
mod(2, 1) = 0
0
When we reach pair (x, 0), x is the GCD.
GCD function
We need to know how to create a loop.
There are two ways to do this:
• for loop
• while loop
For this problem, we will use the while loop.
GCD function
function m = gcd(a, b)
while ~(b==0)
rem = mod(a, b);
a = b;
b = rem;
end;
m = a;
Exercise: Write a function that takes as input a
positive integer n and returns the first prime
number greater than n.
Recall the function isprime in Matlab that
returns true (false) if the input is a prime (is not
a prime).
Exercise: Write a function that takes as input a
positive integer n and returns the first prime
number greater than n.
Recall the function isprime in Matlab that
returns true (false) if the input is a prime (is not
a prime).
function n = nextPrime(m)
n = m + 1
while 1
if isprime(n) break;
else n = n + 1;
end;
end;
Exercise 6.1: Write a function, powersum, that
computes
for any specified values of
z and n.
Exercise 6.1: Write a function, powersum, that
computes
for any specified values of
z and n.
Solution:
Exercise 6.2 (d) Write a function eliminate
that takes as input a character string and
returns a string of the same length in which e
and E have been replaced by *.
Hint: Use find and the index operator.
Example:
>> eliminate(‘TherE’)
ans =
Th*r*
Exercise 6.2 (d) Write a function eliminate
that takes as input a character string and
returns a string of the same length in which e
and E have been replaced by *.
Hint: Use find and the index operator.
Solution:
Exercise 6.3:
function out = addToEnd(a, x)
out = [a, x];
Just calling the function with a as argument does not
change its value.
a = addToEnd(a, x) will change a as desired.
Exercise 6.6
>> BooleanToTF([1 0 0 1 1 0 1 0])
ans =
‘TFFTTFTF’
etc.
Exercise 6.6
>> BooleanToTF([1 0 0 1 1 0 1 0])
ans =
‘TFFTTFTF’
etc.
function res = BooleanToTF(bool)
res = char('F' + zeros(size(bool)));
res(bool) = 'T';
Exercise: write a function in Matlab to convert
from decimal to binary. The output should be a
string.
Exercise: write a function in Matlab to convert
from decimal to binary. The output should be a
string.
function bin = dec2bin(n)
if n == 0 bin = '0';
else
bin= '';
while ~(n==0)
if mod(n,2)==0 bit = '0'
else bit = '1';
end;
bin= strcat(bin, bit);
n = floor(n/2);
end;
end;