Chapter 6
Programming in MATLAB
Slide deck by
Dr. Greg Reese
Miami University
1
6.
0
In this chapter will study how
to make MATLAB programs
run sections of code
If something is true
While something is true
For a certain number of
times
2
6.
0
Will also learn how to run
different sections of code
depending on
The value of a variable
Which particular condition is true
What combination of conditions is
true
If this and that are true
If this or that is true, etc.
What relationship two things have
For example, one is less than the
3
6.1 RELATIONAL AND LOGICAL
OPERATORS
Relational operator:
Can't put space between operators that
have two characters
"Not equal to" is "~=", not "!=" as in C
or C++
"Equal to" comparison is two equal
signs (==), not one.
Remember, "=" means "assign to" or "put
into"
6.1 RELATIONAL AND LOGICAL
OPERATORS
Result of comparing with a
relational operator is always "true"
or "false"
If "true", MATLAB gives the
comparison a value of one (1)
If "false", MATLAB gives the
comparison a value of zero (0)
This may be different than
convention in other programming
languages. For example, C gives an
expression that is false a value of
zero, but it can give a true
expression any value but zero,
6.1 RELATIONAL AND LOGICAL
OPERATORS
When comparing arrays
They must be the same
dimensions
MATLAB does an element-wise
comparison
Result is an array that has
same dimensions as other two
but only contains 1's and 0's
6
6.1 RELATIONAL AND LOGICAL
OPERATORS
When comparing array to
scalar
MATLAB compares scalar to
every member of array
Result is an array that has
same dimensions as original
but only contains 1's and 0's
7
6.1 RELATIONAL AND LOGICAL
OPERATORS
Example
>> x=8:12
x =
>> x>10
ans =
>> x==11
ans =
>> x>=7
ans =
10
11
12
1
8
6.1 RELATIONAL AND LOGICAL
OPERATORS
It helps to picture in your mind that
the result of a logical comparison
TIP
1. Is a vector
2. Has a 0 or 1 corresponding to each
original element
>> x=8:12
x =
8
9
>> x>10
ans =
0
0
10
11
12
6.1 RELATIONAL AND LOGICAL
OPERATORS
TIP
If results of relational
comparison stored in a vector,
can easily find the number of
elements that satisfy that
comparison, i.e., that are true,
by using sum command, which
returns sum of vector elements
Works because elements that are
true have value of one and false
elements have value zero
10
6.1 RELATIONAL AND LOGICAL
OPERATORS
TIP
EXAMPLE
How many of the numbers from
1-20 are prime?
Use MATLAB isprime command,
which returns true (1) is number
is prime and false (0) if it isn't
>> numbers = 1:20;
>> sum( isprime(numbers) )
ans =
8
11
6.1 RELATIONAL AND LOGICAL
OPERATORS
TIP
Can mix relational and
arithmetic operations in one
expression
Arithmetic operations follow usual
precedence and always have
higher precedence than relational
operations
Relational operations all have
equal precedence and evaluated
left to right
12
6.1 RELATIONAL AND LOGICAL
OPERATORS
A logical vector or logical array
is a vector/array that has only
logical
1's and 0's
1's and 0's from mathematical
operations don't count
1's and 0's from relational
comparisons do work
First time a logical vector/array
used in arithmetic, MATLAB
changes it to a numerical
13
6.1 RELATIONAL AND LOGICAL
OPERATORS
Can use logical vector to get
actual values that satisfy relation,
not just whether or not relation
satisfied. Doing this is called
logical indexing or logical
subscripting
Do this by using logical vector as
index in vector of values. Result is
values that satisfy relation, i.e.,
values for which relationship are 1
NOTE technique doesn't quite work with
arrays. Won't discuss that case further
14
6.1 RELATIONAL AND LOGICAL
OPERATORS
EXAMPLE
What are the numbers from 1-10
that are multiples of 3?
>> numbers = 1:10
numbers
= 1 2 3 4 5 6 7 8 9 10
>> multiples = rem( numbers, 3 ) == 0
multiples = 0 0 1 0 0 1 0 0 1 0
>> multiplesOf3 = numbers(multiples)
multiplesOf3 =
3 6 9
15
6.1 RELATIONAL AND LOGICAL
OPERATORS
Example
Think of numbers(multiples) as
pulling out of numbers all elements
that have a 1 in the corresponding
element of multiples
numbers
= 1
9 10
multiples = 0
numbers(multiples) =
9
16
6.1 RELATIONAL AND LOGICAL
OPERATORS
EXAMPLE
What are the prime numbers from
1-20?
>> numbers = 1:20;
>> numbers( isprime(numbers) )
ans =
2 3 5 7 11 13 17 19
Logical indexing is particularly
useful when used with logical
operators, discussed next
17
6.1 RELATIONAL AND LOGICAL
OPERATORS
Logical operators:
Boolean logic is a system for
combining expressions that are
either true of false.
MATLAB has operators and
commands to do many Boolean
operations
Boolean operations in
combination with relational
commands let you perform
certain types of computations
18
6.1 RELATIONAL AND LOGICAL
OPERATORS
A truth table defines the laws of
Boolean logic. It gives the output of
a logical operation for every
possible combination of inputs. The
truth table relevant to MATLAB is
19
6.1 RELATIONAL AND LOGICAL
OPERATORS
In words, the truth table says
AND is true if both inputs are
true, otherwise it is false
OR is true if at least one input is
true, otherwise it is false
XOR (exclusive OR) is true if
exactly one input is true,
otherwise it is false
NOT is true if the input is false,
otherwise it is false
20
6.1 RELATIONAL AND LOGICAL
OPERATORS
An arithmetic operator, e.g., + or
-, is a symbol that causes MATLAB
to perform an arithmetical
operation using the numbers or
expressions on either side of the
symbol.
Similarly, a logical operator is a
character that makes MATLAB
perform a logical operation on one
or two numbers or expressions.
21
6.1 RELATIONAL AND LOGICAL
OPERATORS
MATLAB has three logical operators:
&, |, ~
a&b does the logical AND operation on a
and b
a|b does the logical OR operation on a
or b
~a does the logical NOT operation on a
Arguments to all logical operators are
numbers
Zero is "false"
Any non-zero number is "true"
22
6.1 RELATIONAL AND LOGICAL
OPERATORS
When using logical operator on
arrays
They must be the same dimensions
MATLAB does an element-wise
evaluation of operator
Result is an array that has same
dimensions as other two but only
contains 1's and 0's
(not only operates on one array
so the first point is irrelevant)
23
6.1 RELATIONAL AND LOGICAL
OPERATORS
When operating with array and
scalar
MATLAB does element-wise
operation on each array element
with scalar
Result is an array that has same
dimensions as original but only
contains 1's and 0's
24
6.1 RELATIONAL AND LOGICAL
OPERATORS
Can combine arithmetic,
relational operators, and logical
operators. Order of precedence
is
25
6.1 RELATIONAL AND LOGICAL
OPERATORS
EXAMPLE
Child 12 or less years
Teenager more than 12 and less than
20 years
Adult 20 or more years
>> age=[45 47 15 13 11]
age = 45
47
15
13
11
26
6.1 RELATIONAL AND LOGICAL
OPERATORS
EXAMPLE
Who is a teenager?
>> age=[45 47 15 13 11];
>> age>=13
ans =
1
1
1
>> age<=19
ans =
0
0
1
>> age>=13 & age<=19
ans =
0
0
1
These mark the two
27
6.1 RELATIONAL AND LOGICAL
OPERATORS
EXAMPLE
>> age=[45 47 15 13 11]
age = 45
47
15
13
11
Who is not a teenager?
>> ~(age>=13 & age<=19)
ans =
1
1
0
Who is an adult or a child?
>> age>19 | age<13
ans =
1
1
28
6.1 RELATIONAL AND LOGICAL
OPERATORS
Built-in logical functions:
MATLAB has some built-in
functions or commands for doing
logical operations and related
calculations. Three are equivalent
to the logical operators
and(A,B) same as A&B
or(A,B) same as A|B
not(A) same as ~A
29
6.1 RELATIONAL AND LOGICAL
OPERATORS
MATLAB also
has other
Boolean
functions
30
6.2 CONDITIONAL
STATEMENTS
A conditional statement is a
command that allows MATLAB
to decide whether or not to
execute some code that follows
the statement
Conditional statements almost
always part of scripts or functions
They have three general forms
if-end
if-else-end
if-elseif-else-end
31
6.2.1 The if-end
Structure
An if-end statement has the form
if conditional-expression
code line 1
Can be any number of lines of
code line 2
code
end
remaining lines of code
If the conditional expression is true,
MATLAB runs the lines of code that are
between the line with if and the line
with end. Then it continues with the code
32
after the end-line
6.2.1 The if-end
Structure
if conditional-expression
code line 1
Can be any number of lines of
code
code line 2
end
remaining lines of code
If the conditional expression is false,
MATLAB skips the lines of code that are
between the line with if and the line
with end. Then it continues with the
code after the end-line
33
6.2.1 The if-end
Structure
if conditional-expression
code line 1
Can be any number of lines of
code
code line 2
end
remaining lines of code
The conditional expression is true if it
evaluates to a logical 1 or to a non-zero
number. The conditional expression is
false if it evaluates to a logical 0 or to a
numerical zero.
34
6.2.1 The if-end
Structure
preceding code
if conditional-expression
code line 1
code line 2
end
following code
The above shows the if-end
statement in a way that emphasizes
what the contents of the lines of
code. To emphasize the code flow,
i.e., the order in which the code is
executed, can use a flowchart
35
6.2.1 The if-end
Structure
A flowchart is a diagram
that shows the code flow.
Some common flowchart
symbols are
represents a sequence of
commands
represents an if-statement
shows the direction of
code execution
36
6.2.1 The if-end
Structure
Fig. 6-1 shows the if-end structure as
both lines of code and a flowchart.
Note how the diamond symbol
clearly shows that the code flow is
different if the conditional
expression is true than if it is false
37
6.2.2 The if-else-end
Structure
if-else-end structure lets you
execute one section of code if a
condition is true and a different
section of code if it is false.
EXAMPLE - answering your phone
if the caller is your best friend
talk for a long time
else
talk for a short time
end
38
6.2.2 The if-else-end
Structure
Fig. 6-2 shows the code and
the flowchart for the ifelse-end structure
39
6.2.3 The if-elseif-else-end
Structure
if-elseif-else-end structure lets
you choose one of three (or more)
sections of code to execute
EXAMPLE - answering your phone
if the caller is your best friend
talk for a long time
elseif the caller is your study-mate
talk until you get the answer to the hard
problem
else
say you'll call back later
end
40
6.2.3 The if-elseif-else-end
Structure
Can have as many elseif statements as
you want
EXAMPLE
if the caller is your best friend
talk for a long time
elseif the caller is a potential date
talk for a little bit and then set a time to meet
elseif the caller is your study-mate
talk until you get the answer to the hard
problem
elseif the caller is your mom
say you're busy and can't talk
else
have your room-mate say you'll call back later
41
6.2.3 The if-elseif-else-end
Structure
Fig. 6-3 shows the code and the
flowchart for the if-elseif-elseend structure
42
6.2.3 The if-elseif-else-end
Structure
Can omit else statement
In this case, if no match to
if- or elseif-statements,
no code in structure gets
executed
43
6.3 THE switch-case
STATEMENT
if-elseif-else-end structure
gets hard to read if more than a
few elseif statements. A
clearer alternative is the
switch-case structure
switch-case slightly different
because choose code to
execute based on value of
scalar or string, not just
true/false
44
6.3 THE switch-case
STATEMENT
Concept is
switch name
case 'Bobby'
talk for a long time
case 'Susan'
talk for a little bit and then set a time to
meet
case 'Hubert'
talk until you get the answer to the hard
problem
case 'Mom'
say you're busy and can't talk
otherwise
have your room-mate say you'll call back
later
45
6.3 THE switch-case
STATEMENT
46
6.3 THE switch-case
STATEMENT
switch evaluates
switch-expression
If value is equal to
value1, executes
all commands up to
next case,
otherwise,
or end statement, i.e., Group 1
commands, then executes code after
end statement
If value is equal to value2, same as
above but Group 2 commands only
Etc.
47
6.3 THE switch-case
STATEMENT
If switch-expression not
equal to any of values in
case statement,
commands after
otherwise executed. If
otherwise not present,
no commands executed
If switch expression matches more than
one case value, only first matching
case executed
48
6.3 THE switch-case
STATEMENT
TIP
Comparisons of text strings are casesensitive. If case values are text
strings, make all values either lower
case or upper case, then use upper or
lower command to convert switch
expression
caller = lower( name );
switch caller
case 'bobby'
some code
case 'susan'
some code
case 'mom'
some code
49
6.4
LOOPS
A loop is another method of
flow control. A loop executes
one set of commands
repeatedly. MATLAB has two
ways to control number of
times loop executes commands
Method 1 loop executes
commands a specified number of
times
Method 2 loop executes
commands as long as a specified
50
6.4.1 for-end
Loops
A for-end loop (often called a
for-loop) executes set of
commands a specified number
of times. The set of commands
is called the body of the loop
51
6.4.1 for-end
Loops
Body of
loop
The loop index variable can have any
variable name (usually i, j, k, m, and n
are used).
i and j should not be used when working
with complex numbers. (ii and jj are good
alternative names)
52
6.4.1 for-end
Loops
1. Loop sets k to f,
Body of
loop
and executes
commands between
for and the end commands,
i.e., executes body of loop
2. Loop sets k to f+s, executes body
3. Process repeats itself until k > t
4. Program then continues with commands
that follow end command
.f and t are usually integers
.s usually omitted. If so, loop uses
increment of 1
53
6.4.1 for-end
Loops
Body of
loop
Increment s can be negative
For example, k = 25:5:10 produces
four passes with k = 25, 20, 15, 10
If f = t, loop executes once
If f > t and s > 0, or if f < t and
s < 0, loop not executed
54
6.4.1 for-end
Loops
Body of
loop
If values of k, s, and t are such that k
cannot be equal to t, then
If s positive, last pass is one where k has
largest value smaller than t
For
example, k = 8:10:50 produces five
passes with k = 8, 18, 28, 38, 48
If s is negative, last pass is one where k
has smallest value larger than t
55
6.4.1 for-end
Loops
Body of
loop
In the for command k can also be
assigned specific value (typed in as a
vector)
For example: for k = [7 9 1 3 3 5]
In general, loop body should not
change value of k
Each for command in a program
must have an end command
56
6.4.1 for-end
Loops
Body of
loop
Value of loop index variable (k) not
displayed automatically
Can display value in each pass
(sometimes useful for debugging) by
typing k as one of commands in loop
When loop ends, loop index variable
(k) has value last assigned to it
57
6.4.1 for-end
Loops
EXAMPLE
Script
Output
k =
1
x =
1
k =
4
x = 16
k =
7
x = 49
k = 10
x = 100
After loop k = 10
for k=1:3:10
k
x = k^2
end
fprintf('After loop k = %d\n', k);
58
6.4.1 for-end
Loops
Can often calculate
something using either a forloop or elementwise
operations.
Elementwise operations are:
Often faster
Often easier to read
More MATLAB-like
TIP
GENERAL ADVICE use
elementwise operations when
you can, for-loops when you
59
6.4.2 while-end
Loops
while-end loop used when
You don't know number of loop
iterations
You do have a condition that you
can test and stop looping when it
is false. For example,
Keep reading data from a file until
you reach the end of the file
Keep adding terms to a sum until the
difference of the last two terms is
less than a certain amount
60
6.4.2 while-end
Loops
1. Loop
evaluates
conditional-expression
2. If conditional-expression is
true, executes code in body,
then goes back to Step 1
3. If conditional-expression is
false, skips code in body and
goes to code after endstatement
61
6.4.2 while-end
Loops
The conditional expression of a
while-end loop
Has a variable in it
Body of loop must change value of
variable
There must be some value of the
variable that makes the conditional
expression be false
62
6.4.2 while-end
Loops
EXAMPLE
This script
Makes this
output
x = 1
while x <= 15
x = 2*x
end
x =
1
x =
2
x =
4
x =
8
x =
16
63
6.4.2 while-end
Loops
If the conditional expression
never becomes false, the loop
will keep executing... forever!
The book calls this an indefinite
loop, but more commonly
referred to as an infinite loop.
Your program will just keep
running, and if there is no output
from the loop (as if often the
case), it will look like MATLAB
64
6.4.2 while-end
Loops
Common causes of indefinite loops:
No variable in conditional expression
distance1 = 1;
distance2 = 10;
distance3 = 0;
and
while distance1 < distance2 distance1
distance2 never
change
fprintf('Distance = %d\n',distance3);
end
65
6.4.2 while-end
Loops
Common causes of indefinite loops:
Variable in conditional expression
never changes
minDistance = 42;
distanceIncrement = 0;
Typo should be
10
distance = 0;
while distance < minDistance
distance=distance+distanceIncrement;
end
66
6.4.2 while-end
Loops
Common causes of indefinite
loops:
Wrong variable in conditional
expression changed
minDistance = 42;
delta = 10;
distance = 0;
while distance < minDistance
minDistance = minDistance + delta;
Typo should be
end
distance
67
6.4.2 while-end
Loops
Common causes of indefinite
loops:
Conditional expression never
becomes
false
Typo shouldn't be
any negative
sign
minDistance
= 42;
x = 0;
y = 0;
while -sqrt( x^2+y^2 ) < minDistance
x = x + 1;
y = y + x;
end
68
6.4.2 while-end
Loops
TIP
If your program gets caught
in an indefinite loop,
Put the cursor in the
Command Window
Press CTRL+C
69
6.5 NESTED LOOPS AND NESTED CONDITIONAL
STATEMENTS
If a loop or conditional
statement is placed inside
another loop or conditional
statement, the former are said
to be nested in the latter.
Most common to hear of a nested
loop, i.e., a loop within a loop
Often occur when working with two-
dimensional problems
Each loop and conditional
statement must have an end
70
6.5 NESTED LOOPS AND NESTED CONDITIONAL
STATEMENTS
EXAMPLE
71
6.6 THE break AND continue
COMMANDS
The break command:
When inside a loop (for and while),
break terminates execution of loop
MATLAB jumps from break to end
command of loop, then continues with
next command (does not go back to the
for or while command of that loop).
break ends whole loop, not just last
pass
If break inside nested loop, only
nested loop terminated (not any
outer loops)
72
6.6 THE break AND continue
COMMANDS
break command in script or function
file but not in a loop terminates
execution of file
break command usually used within
a conditional statement.
In loops provides way to end looping if
some condition is met
73
6.6 THE break AND continue
COMMANDS
EXAMPLE
Script
while( 1 )Trick "1" is always true so it makes loop iterate
forever!'Type name or q to quit: ', 's' );
name = input(
if length( name ) == 1 && name(1) == 'q' If user entered only
break; Only way to exit
one letter and it is a
"q", jump out of loop
loop!
else
fprintf( 'Your name is %s\n', name ); Otherwise print
end
name
end
Output for inputs of "Greg",
"quentin", "q"
Type
Your
Type
Your
Type
name
name
name
name
name
or
is
or
is
or
q to quit: Greg
Greg
q to quit: quentin
quentin
q to quit: q
74
6.6 THE break AND continue
COMMANDS
The continue command:
Use continue inside a loop (for- and
while-) to stop current iteration and
start next iteration
continue usually part of a conditional
statement. When MATLAB reaches
continue it does not execute remaining
commands in loop but skips to the end
command of loop and then starts a new
iteration
75
6.6 THE break AND continue
COMMANDS
EXAMPLE
for ii=1:100
if rem( ii, 8 ) == 0
count = 0;
fprintf('ii=%d\n',ii);
continue;
end
% code
% more code
end
Every eight iteration
reset count to zero,
print the iteration
number, and skip the
remaining
computations in the
loop
76