Lesson 6: For, while, if, and relations


Like most computer languages, MATLAB offers a variety of flow control statements like for, while and if. The statements that we use to control the flow are called relations.



For statement

For example, for a given n, the statement
	x = []; for i =1:n, x=[x,i^2], end
or
	x = [];
	for i = 1:n
	   x = [x,i^2]
	end
will produced a certain n-vector and the statement
	x = []; for i = n:-1:1, x=[x,i^2], end
will produced the same vector in reverse order. Try them. Note that a matrix may be empty (such as x = []). The statements
	for i = 1:m
	   for j = 1:n
	      H(i,j) = 1/(i+j-1);
	   end
	end
	H
will produced and print to the screen the m × n hilbert matrix. The semicolon on the inner statement suppresses printing of unwanted intermediate results while the last H displays the final result.



While statement

The general form of a while loop is
while relation
statements
end

The statements will be repeatedly executed as long as the relation remains true. For example, for a given number a, the following will compute and display the smallest nonnegative integer n such that 2 to the power of n is > a:

	n = 0;
	while 2^n <= a
	   n = n + 1;
	end
	n



If statement

The general form of a simple if statement is
if relation
statements
end
The statements will be executed only if the relation is true. Multiple branching is also possible, as illustrated by
	if n < 0
	   parity = 0;
	elseif rem(n,2) == 0
	   parity = 2;
	else
	   parity = 1
	end
In two-way branching the elseif portion would be omitted.



Relations

The relational operators in MATLAB are
	<	less than
	>	greater than
	<=	less than or equal
	>=	greater than or equal
	==	equal
	~=	not equal

Note that "=" is used in an assigment statement while "==" is used in a relation. Relations may be connected or quantified by the logical operators:

	&	and
	|	or
	~	not
When applied to scalars, a relation is actually the scalar 1 or 0 depending on whether the relation is true or false. Try 3 < 5, 3 > 5, 3 == 5 and 3 == 3. When applied to matrices of the same size, a relation is a matrix of 0's and 1's giving the value of the relation between corresponding entries. Try a = rand(5), b = triu(a), a == b.

A relation between matrices is interpreted by while and if to be true if each entry of the relation matrix is nonzero. Hence, if you wish to execute statement when matrices A and B are equal, you could type

if A == B
statement
end
but if you wish to execute statement when A and B are not equal, you would type
if any(any(A ~= B))
statement
end
or more simply,
if A == B else
statement
end
Note that the seemingly obvious
if A ~= B, statement, end
will not give what is intended since statement would be executed only if each of the corresponding entries of A and B differ. The functions any and all can be creatively used to reduced matrix relations to vectors or scalars. Two any's are required above since any is a vector operator.

The for statement permits any matrix to be used instead of 1:n. See the User's Guide for details of how this feature expands the power of the for statement.