This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
gibson:teaching:spring-2016:math445:lecture:forloop [2016/02/16 10:58] gibson [Formatted printing with fprintf] |
gibson:teaching:spring-2016:math445:lecture:forloop [2016/02/17 07:38] (current) gibson |
||
---|---|---|---|
Line 24: | Line 24: | ||
* ''%d'' decimal (integer), e.g. 5 | * ''%d'' decimal (integer), e.g. 5 | ||
* ''%f'' floating-point, e.g. 2.75 | * ''%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'''. | * ''%s'' string (a sequence of characters), e.g. '' 'banana'''. | ||
* ''%c'' character, e.g. '' 'q' '' | * ''%c'' character, e.g. '' 'q' '' | ||
+ | |||
+ | The decimal and floating-point slots can be specialized to print numbers in particular ways, for example, | ||
+ | |||
+ | <code matlab> | ||
+ | >> fprintf('The value of pi is %8.3f\n', pi) | ||
+ | The value of pi is 3.142 | ||
+ | </code> | ||
+ | |||
+ | 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: repeating sequences of commands===== | ||
Line 73: | Line 86: | ||
193.5276 | 193.5276 | ||
</code> | </code> | ||
+ | |||
+ | ===== 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. | ||
+ | <file matlab 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 | ||
+ | </file> | ||
+ | |||
+ | You can execute this function with on the input vector ''[4 2 9 1]]'' like this | ||
+ | <code> | ||
+ | >> 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 | ||
+ | >> | ||
+ | </code> | ||
+ | |||
+ | The function is a lot easier to read if you take out the print statements | ||
+ | |||
+ | <file matlab 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 | ||
+ | </file> | ||
+ | ==== 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*} | ||
+ | |||
+ | <file matlab 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 | ||
+ | </file> |