CHAPTER 1: INTRODUCTION INTO MATLAB COMPUTING

 

Lecture Notes 1.2: Branch statements and loops

 

Comparison operators: (1 if true, 0 if not)

 

         equal: ==

a = 4; b = 3; c = 4;

e1 = (a == b) % it is false

e2 = (a == c) % it is true

 

e1 = 0

e2 = 1

 

         not equal: ~=

 

e3 = (a~=b) % it is true

e4 = (a~=c) % it is false

 

e3 = 1

e4 = 0

 

         less than: <

         equal or less than: <=

x = 0.1; y = x^1.1, z = x^0.9

e5 = (y <= x)

e6 = (z < x)

 

y = 0.0794

z = 0.1259

e5 = 1

e6 = 0

 

         greater than: >

         equal or greater than: >=

e7 = (y >= x)

e8 = (z > x)

 

e7 = 0

e8 = 1

 

         comparison operators can be applied to vectors, they return vectors of ones and zeros

 

x = [ 1 2 3 4 5 6 ]

y = [ 2 1 4 3 6 5 ]

e = ( x < y)

 

x =

1 2 3 4 5 6

y =

2 1 4 3 6 5

e =

1 0 1 0 1 0

 

Logical operators and composite comparisons:

 

a

b

&

|

~a

~b

1

1

1

1

0

0

1

0

0

1

0

1

0

1

0

1

1

0

0

0

0

0

1

1

 

         logical AND: &

n = 25; m = 5; l = 60;

e1 = ( (n >= 10) & (n <= 50) ) % it is equivalent to: 10 <= n <= 50

e2 = ( (m >= 10) & (m <= 50) )

e3 = ( (l >= 10) & (l <= 50) )

 

e1 = 1

e2 = 0

e3 = 0

 

         logical OR: |

e4 = ( (n < 10) | (n > 50) ) % it is equivalent to: n < 10 or n > 50

e5 = ( (m < 10) | (m > 50) )

e6 = ( (l < 10) | (l > 50) )

e4 = 0

e5 = 1

e6 = 1

 

         logical NOT: ~ (the use of this operator can be avoided)

e7 = ( ~(n <= 50) ) % it is equivalent to: n > 50

e8 = ( ~(m == 10) ) % it is equivalent to: m ~= 10

e9 = ( ~(l > 10) ) % it is equivalent to: l <= 10

 

e7 = 0

e8 = 1

e9 = 0

 

         Typical errors in using logical operators

( ( n > 10 ) | ( n < 15 ) ) % it is always true: n > 10 or n < 15

( ( m > 10 ) & ( m < 5 ) ) % it is always false: m < 5 and m > 10

 

ans = 1

ans = 0

 

         any: returns 1 if any of the elements of a vector are non-zero, returns 0 otherwise

         all: returns 1 if all of the elements of a vector are non-zero, returns 0 otherwise

         find: returns the indices of the elements of a vector that are non-zero.

 

x = round(sin(0:pi/5:2*pi)), r1 = any(x), r2 = all(x), r3 = find(x)

 

x = 0 1 1 1 1 0 -1 -1 -1 -1 0

r1 = 1

r2 = 0

r3 = 2 3 4 5 7 8 9 10

 

 

Branch statements:

         if, elseif, else, end: (the parts with elseif and else are optional)

 

if <comparison>

<statements>

elseif <comparison>

<statements>

elseif <comparison>

<statements>

else

<statements>

end

 

a = 10; b = 100;

if ( a == b ) % NB: useful identation of the MATLAB codes

c = a*b

elseif ( b ~= 0 )

c = a/b % this branch is executed for the example

else

c = 0

end % c is assigned dynamically depending on a and b

 

c = 0.1000

 

Loops:

 

         for, end

 

for <counts>

<statements>

end

 

for x = 1:0.5:3

y = x^2-5*x-3

end

 

y = -7

y = -8.2500

y = -9

y = -9.2500

y = -9

 

x = [ 1 1.5 2 2.5 3 ];

for k = 1 : length(x)

y(k) = x(k)^2-5*x(k)-3 % NB: dynamical creation of the vector y

end

 

y = -7

y = -7.0000 -8.2500

y = -7.0000 -8.2500 -9.0000

y = -7.0000 -8.2500 -9.0000 -9.2500

y = -7.0000 -8.2500 -9.0000 -9.2500 -9.0000

 

 

         while, end

 

while < condition >

<statements>

end

 

x = [ 1 1.5 2 2.5 3 ]; n = 1;

while (n <= length(x))

y(n) = x(n)^2-5*x(n)-3 % NB: MATLAB vectors are created as row-vectors

n = n + 1;

end

 

y = -7

y = -7.0000 -8.2500

y = -7.0000 -8.2500 -9.0000

y = -7.0000 -8.2500 -9.0000 -9.2500

y = -7.0000 -8.2500 -9.0000 -9.2500 -9.0000

 

         break: terminate execution of a (for/end or while/end) loop

 

r = 10;

while (1) % infinite loop

r = 2*r;

if ( r > 100 )

break; % termination of the infinite loop

end

V = 4*pi*r^3/3

end

 

V = 3.3510e+004

V = 2.6808e+005

V = 2.1447e+006

 

When break is used in nested loops, only the immediate loop, where break is located, is terminated.