Vous êtes sur la page 1sur 20

MATLAB

Examples of Iterative operations


Ch E 111 David A. Rockstraw, Ph.D., P.E. New Mexico State University Chemical Engineering Department

Nested Loop Statements


% Nested loops for i=1:4 for j=1:3 disp([i j i*j]) end end

Nested Loop Statements


clear A for i=1:n for j=1:n if i < j A(i,j)=-1; elseif i > j A(i,j)=0; else A(i,j)=1; end end end A

Nested Loop Statements


clear A for i=1:n for j=1:n if i < j A(i,j)=-1; elseif i > j A(i,j)=0; else A(i,j)=1; end end compare with the built-in function statement: end AA=eye(n)-triu(ones(n),1) A

Example 1
Write a for loop which calculates the sum the integers from 1 to 100 and the sum of the squares of the integers from 1 to 100. Print out only the results.

Example 1 Solution
sum1 = 0; sum2 = 0; for i = 1:100 sum1 = sum1 + i; sum2 = sum2 + i^2; end sum1 sum2

Example 2
Determine the largest value of n such that

i 1

i 10
2

Example 2 Solution
sum = 0; i = 0; while ( sum < 1000000 ) i = i + 1; sum = sum + i^2; end i

Example 3
Find the integer value of n between 0 and 100 such that

cosi minimum
i 0

Example 3 Solution
Solve assuming that minimum occurs when n = 0. Then, for each n = 1, 2, ..., 100, compare the absolute value of the running sum with that of the minimum absolute running sum currently found. If it is less, update the two variables.
minimum_n = 0; % the sum when n = 0 minimum_abs_sum = 1; % initially, the absolute value of |cos(0)| running_sum = 1; % cos(0) + ... + cos(n) for n = 1:100 running_sum = running_sum + cos(n); if ( abs( running_sum ) < minimum_abs_sum ) minimum_n = n; minimum_abs_sum = abs( running_sum ); end end minimum_n minimum_abs_sum

Example 4
Continue subtracting (to a max of 1000 times) e from until a value less than -10 is obtained.
x = pi for i=1:1000 x = x - exp(1) if x < -10 break; end end

Example 4
Calculate the sum of those entries of the matrix M = [1 2 3; 4 5 6; 7 8 9] which lie in the upper-triangular portion (i.e., on or above diagonal).

Example 4 Solution
M = [1 2 3; 4 5 6; 7 8 9]; sum = 0; for i = 1:3 for j = i:3

sum = sum + M(i, j);


end end

sum

average.m
clear % initialize - prepare to read 1st datum i = 1; % read and count data values data = input('Enter datum ("Enter" to stop): '); while ~isempty(data) %data? y(i) = data; % - yes: store i = i+1; % count data = input('Enter datum ("Enter" to stop): '); end % no more data - compute average sumY = sum(y); % compute sum [dummy, n] = size(y); % determine # values = # columns averageY = sumY/n; % print result disp(['the average of the 'num2str(n) ' values is ' num2str(averageY)])

Integrate the sine function


Write a program that approximates

as N is the number of points used in the integration. You may need to use a for loop from 1 to N-1. Calculate the approximation using N = 5, 10, 20, and 50.

function intsin(N)
function y = intsin(N) % INTSIN - integrate sin(x) from 0 to pi y = (sin(0) + sin(pi))* pi/(2*N); for n = 1 : N-1 y = y + sin(n*pi/N)*pi/N; end

Infinite sum
Use a while loop to calculate the summation until the deviation from the exact answer is less than 0.1. Determine up to what n-value is needed to carry out the summation so that this deviation is achieved? How about a deviation of 0.01 and 0.001?

function pi2over6
function [y,n] = pi2over6(tol) % PI2OVER6 - Approximates (pi)^2/6 y=0; aim=pi*pi/6; n=0; while (abs(aim-y)>tol) n=n+1; y=y+1/(n*n); disp(sprintf('%g%s%g%s%g',n,' ',y,' ',aim-y)) end

grcodi script
Write a program that, given two positive integers N1 and N2, calculates their greatest common divisor. The greatest common divisor can be calculated easily by iteratively replacing the largest of the two numbers by the difference of the two numbers until the smallest of the two numbers reaches zero. When the smallest number becomes zero, the other gives the greatest common divisor. You will need to use a while loop and an if-else statement. The largest of two numbers can be obtained using the built-in function MAX(A,B). The smallest of two numbers can be obtained using the built-in function MIN(A,B).

grcodi script
% GRCODI - determine greatest common divisor N1=input('first number = '); N2=input('second number = '); while (min(N1,N2)>0) if (N1 > N2) N1=N1-N2; else N2=N2-N1; end end disp(sprintf('%s%g','GCD is ',max(N1,N2)))

Vous aimerez peut-être aussi