Like most computer languages, MATLAB offers a variety of flow control
statements like for,
if. The statements that we use to control the
flow are called relations.
x = ; for i =1:n, x=[x,i^2], endor
x = ; for i = 1:n x = [x,i^2] endwill produced a certain n-vector and the statement
x = ; for i = n:-1:1, x=[x,i^2], endwill 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 Hwill 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.
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 relationend The statements will be executed only if the relation is true. Multiple branching is also possible, as illustrated bystatements
if n < 0 parity = 0; elseif rem(n,2) == 0 parity = 2; else parity = 1 endIn two-way branching the elseif portion would be omitted.
< 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 ~ notWhen 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 == Bbut if you wish to execute statement when A and B are not equal, you would typestatementend
if any(any(A ~= B))or more simply,statementend
if A == B elseNote that the seemingly obviousstatementend
if A ~= B, statement, endwill 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.