User Tools

Site Tools


gibson:teaching:spring-2016:math445:lecture:forloop

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

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.

mysum.m
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

mysum.m
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*}

myfactorial.m
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
gibson/teaching/spring-2016/math445/lecture/forloop.txt · Last modified: 2016/02/17 07:38 by gibson