====== Math 445 lecture 7: fprintf, for loops, functions ======
===== fprintf: formatted printing =====
**fprintf** is Matlab's **formatted print function**. It's used for printing variables to the screen (or files) in a format that you specify. The basic syntax is
fprintf('format-string', variable, variable, variable, ...)
but it is really best illustrated by example.
>> w = 'perambulate';
>> n = length(w);
>> fprintf('The word %s has %d letters.\n', w, n)
The word perambulate has 11 letters.
The format string contains two //slots// ''%s'' and ''%w''. The percent sign is a special marker that signals a slot, and the character following it specifies the type of variable that goes in the slot, ''%s'' for string and ''%d'' for decimal. The values of the variables $w$ and $n$ are placed in those slots when the fprintf function is executed. The ''\n'' is a special //control character// for "new line."
The most important slot types are
* ''%d'' decimal (integer), e.g. 5
* ''%f'' floating-point, e.g. 2.75
* ''%e'' floating-point in scientific (exponential) notation, e.g. 2.75e+00 for 2.75
* ''%s'' string (a sequence of characters), e.g. '' 'banana'''.
* ''%c'' character, e.g. '' 'q' ''
The decimal and floating-point slots can be specialized to print numbers in particular ways, for example,
>> fprintf('The value of pi is %8.3f\n', pi)
The value of pi is 3.142
This prints $\pi$ with 3 digits after the decimal in a fixed-width field of 8 characters.
You can put as many slots in a format string as you like. Just provide as many variables as slots, and make sure the types of the slots match the variables.
===== for loops: repeating sequences of commands=====
**for** loops are used to repeat a sequence of commands a specified number of times. A **for** loop has an index variable (often $n$ or $i$) whose value changes over every iteration of the loop. For example, this Matlab **for** loop
for n=1:4
fprintf('The value of n is %d.\n',n);
end
produces the output
The value of n is 1.
The value of n is 2.
The value of n is 3.
The value of n is 4.
Note how the //body// of the loop (the fprintf) statement is executed four times, once for each value of $n$ from 1 to 4.
===== functions =====
The Matlab **function** command lets you define your own functions. For example, putting
the following code in a file named ''quadratic.m''
function y = quadratic(x)
y = x^2 + 3*x -7;
end
defines a function named ''quadratic'' that computes the polynomial $y(x) = x^2 +3x -7$. The filename must match the name of the function. If the ''quadratic.m'' function is in Matlab's current working directory, you'll be able to execute the function just like a regular Matlab built-in function, for example
>> quadratic(0)
ans =
-7
>> quadratic(1)
ans =
-3
>> quadratic(12.74)
ans =
193.5276
===== example functions =====
==== sum the components of a vector ====
This ''mysum'' function computes the sum of the components in the input vector $x$. There are a
number of extraneous print statements which show how the calculation works, step-by-step.
function s = mysum(x);
% compute the sum of the components of vector x
s = 0; % variable to hold partial sum
n = length(x); % get length of vector x
fprintf('Will need to do %d additions.\n\n', n);
for i=1:n
fprintf('The current partial sum is s = %f.\n\n', s);
pause
fprintf('Add %f.\n', x(i));
s = s + x(i);
end
fprintf('The total sum is s = %f.\n', s);
pause
end
You can execute this function with on the input vector ''[4 2 9 1]]'' like this
>> mysum([4 2 9 1])
Will need to do 4 additions.
The current partial sum is s = 0.000000.
Add 4.000000.
The current partial sum is s = 4.000000.
Add 2.000000.
The current partial sum is s = 6.000000.
Add 9.000000.
The current partial sum is s = 15.000000.
Add 1.000000.
The total sum is s = 16.000000.
ans =
16
>>
The function is a lot easier to read if you take out the print statements
function s = mysum(x);
% compute the sum of the components of vector x
s = 0; % variable to hold partial sum
n = length(x); % get length of vector x
for i=1:n % for each number i from 1 to n
s = s + x(i); % add x(i) to the partial sum
end
end
==== compute the factorial ====
This function computes $n!$, the factorial of $n$, according to the formula
\begin{eqnarray*}
n! = \prod_{i=1}^n i = 1\cdot 2 \cdot 3 \cdot \ldots \cdot (n-2) \cdot (n-1) \cdot n
\end{eqnarray*}
function p = myfactorial(n);
% compute factorial of n = 1 * 2 * ... (n-2)*(n-1)*n
p = 1; % variable to store partial products
% each step through the loop does one more multiplication
% in the sequence of products 1, 1*2, 1*2*3, etc.
for i=1:n
p = p * i;
end
end