0% found this document useful (0 votes)
45 views

Section 5 Structured Programming in MATLAB

This document discusses structured programming in MATLAB, including conditional statements and loops. It covers if, if-else, and if-elseif conditional structures. It also covers while and for loops. The while loop repeats statements as long as a condition is true. A break statement can be used to exit the loop early. Infinite loops occur when the condition is always true. The for loop repeats a set number of times. Logical and relational operators are used to evaluate conditions.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
45 views

Section 5 Structured Programming in MATLAB

This document discusses structured programming in MATLAB, including conditional statements and loops. It covers if, if-else, and if-elseif conditional structures. It also covers while and for loops. The while loop repeats statements as long as a condition is true. A break statement can be used to exit the loop early. Infinite loops occur when the condition is always true. The for loop repeats a set number of times. Logical and relational operators are used to evaluate conditions.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 51

SECTION 5:

STRUCTURED
PROGRAMMING IN MATLAB
ENGR 112 – Introduction to Engineering Computing
2 Conditional Statements
• if statements
• if…else statements
• Logical and relational operators
• switch…case statements

K. Webb ENGR 112


The if Statement
3

 We’ve already seen the if structure


 If X is true, do Y, if not, don’t do Y
 In either case, then proceed to do Z
 In MATLAB:
if condition
statements
end
 Statements are executed if condition is true
 Condition is a logical expression
 Either true (evaluates to 1) or false (evaluates to 0)
 Makes use of logical and relational operators
 May use a single line for a single statement:
if condition, statement, end
K. Webb ENGR 112
Logical and Relational Operators
4

Operator Relationship or Logical Operation Example


== Equal to x == b
~= Not equal to k ~= 0
< Less than t < 12
> Greater than a > -5
<= Less than or equal to 7 <= f
>= Greater than or equal to (4+r/6) >= 2
NOT– negates the logical value of an
~ expression
~(b < 4*g)
AND – both expressions must
& or && evaluate to true for result to be true
(t > 0)&&(c == 5)
OR – either expression must
| or || evaluate to true for result to be true
(p > 1)||(m > 3)
K. Webb ENGR 112
Short-Circuit Logical Operators
5

 Note that there are two AND and two OR operators


available in MATLAB
 AND: & or &&
 OR: | or ||

 Can always use the single operators: & and |


 The double operators are short-circuit operators
 Only evaluate the second expression if necessary –
faster
 Can only be used with scalar expressions

K. Webb ENGR 112


The if…else Structure
6

 The if … else structure


 Perform one process if a condition
is true
 Perform another if it is false

 In MATLAB:
if condition
statements1
else
statements2
end

K. Webb ENGR 112


The if…elseif…else Structure
7

 The if … elseif … else structure


 If a condition evaluates as false, check another condition
 May have an arbitrary number of elseif statements

 In MATLAB:
if condition1
statements1
elseif condition2
statements2
else
statements3
end
K. Webb ENGR 112
The if…else, if…elseif…else Structures
8

 Some examples:

 Note that && and || are used here, because


expressions involve scalars
 The single logical operators, & and |, would work just
as well
K. Webb ENGR 112
The if…elseif Structure
9

 We can have an if statement


without an else
 Similarly, an if…elseif
structure need not have an
else
 In MATLAB:
if condition1
statements1
elseif condition2
statements2
end
K. Webb ENGR 112
The switch Structure
10

 The switch structure evaluates a single test expression


 Branching determined by the value of the test expression

switch testexpression
case value1
statements1
case value2
statements2
otherwise
statements3
end

 An alternative to an if…elseif…else structure

K. Webb ENGR 112


The switch Structure
11

 An example – set the value of variable B to different


values depending on the value of variable A:

 otherwise serves the same purpose as else


 If the test expression does not equal any of the specified
cases, execute the commands in the otherwise block
K. Webb ENGR 112
The switch Structure
12

 In flowchart form, there is no direct translation for the switch


structure
 We’d represent it using an if…elseif…else structure
 But, if there were, it might look something like this:

switch A
case 1
B = 2;
case 2
B = 8;
case 3
B = -5;
otherwise
B = 84;
end

K. Webb ENGR 112


The switch Structure
13

 An alternative to an if…elseif…else structure


 Result is the same
 Code may be more readable

K. Webb ENGR 112


14 while Loops

K. Webb ENGR 112


The while loop
15

 The while loop


 While X is true, do A
 Once X becomes false, proceed to B

 In MATLAB:
while condition
statements
end
 Statements are executed as long
as condition remains true
 Condition is a logical expression
K. Webb ENGR 112
while Loop – Example 1
16

 Consider the following while loop example


 Repeatedly increment x by 7 as long as x is less than or equal to 30
 Value of x is displayed on each iteration, due to lack of output-
suppressing semicolon

 x values displayed: 19, 26, 33


 x gets incremented beyond 30
 All loop code is executed as long as the condition was true at the
start of the loop

K. Webb ENGR 112


The break Statement
17

 Let’s say we don’t want x to increment beyond 30


 Add a conditional break statement to the loop

 break statement causes loop exit before executing all code


 Now, if (x+7)>30, the program will break out of the loop and
continue with the next line of code
 x values displayed: 19, 26
 For nested loops, a break statement breaks out of the current
loop level only
K. Webb ENGR 112
while Loop – Example 1
18

 The previous example could be simplified by modifying the


while condition, and not using a break at all

 Now the result is the same as with the break statement


 x values displayed: 19, 26
 This is not always the case
 The break statement can be very useful
 May want to break based on a condition other than the loop condition
 break works with both while and for loops

K. Webb ENGR 112


while Loop – Example 2
19

 Next, let’s revisit the while loop


examples from Section 4
 Use input.m to prompt for input
 Use display.m to return the result

K. Webb ENGR 112


while Loop – Example 3
20

 Here, we use a while loop to


calculate the factorial value of a
specified number

K. Webb ENGR 112


while Loop – Example 3
21

 Add error checking to ensure that x


is an integer
 One way to check if x is an integer:

K. Webb ENGR 112


while Loop – Example 3
22

 Another possible method for


checking if x is an integer:

K. Webb ENGR 112


Infinite Loops
23

 A loop that never terminates is an infinite loop


 Often, this unintentional
 Coding error
 Other times infinite loops are intentional
 E.g., microcontroller in a control system
 A while loop will never terminate if the while condition
is always true
 By definition, 1 is always true:

while (1)
statements repeat infinitely
end

K. Webb ENGR 112


while (1)
24

 The while (1) syntax can be used in conjunction with a


break statement, e.g.:

 Useful for
multiple break
conditions
 Control over
break point
 Could also
modify the
while condition

K. Webb ENGR 112


25 for Loops

K. Webb ENGR 112


The for Loop
26

 The for loop


 Loop instructions execute a specified
number of times
 In MATLAB:
for index = start:step:stop
statements
end

 Note the syntax – looks like a vector


definition
 Statements are executed once for each
element in the vector
 However, index is actually a scalar
 Increments through the vector of values

K. Webb ENGR 112


for Loop – Example 1
27

 Next, we’ll revisit the for loop


examples from Section 4
 Loop iterates 5 times
 Value of scalar variable, x, reassigned
on each iteration

K. Webb ENGR 112


for Loop – Example 2
28

 Here, x is defined as a vector


 Loop still iterates 5 times
 Successive values appended to the
end of x
 x grows with each iteration

K. Webb ENGR 112


for Loop – Example 3
29

 In this case the loop counter is not


used at all within the loop
 Random number generated on each
of 10 iterations

K. Webb ENGR 112


30 Nested Loops

K. Webb ENGR 112


Nested Loop – Example 1
31

 Recall the nested for loop example


from Section 4
 Generate a matrix 𝐶𝐶 whose entries
are the squares of the elements in 𝐵𝐵
 Nested for loop
 Outer loop steps through rows
 Counter is row index
 Inner loop steps through columns
 Counter is column index

K. Webb ENGR 112


Nested Loop – Example 1
32

K. Webb ENGR 112


Nested for Loop – Example 2
33

 Evaluate a function of two variables:


−𝑥𝑥 2 −𝑦𝑦 2
𝑧𝑧 = 𝑥𝑥 ⋅ 𝑒𝑒
over a range of −2 ≤ 𝑥𝑥 ≤ 2 and −2 ≤ 𝑦𝑦 ≤ 2

 A surface in three-
dimensional space
 In Section 7, we’ll learn how
to generate such a plot

K. Webb ENGR 112


Nested for Loop – Example 2
34

−𝑥𝑥 2 −𝑦𝑦 2
𝑧𝑧 = 𝑥𝑥 ⋅ 𝑒𝑒
 Evaluate the function over a range of 𝑥𝑥 and 𝑦𝑦

 First, define x and y


vectors
 Use a nested for
loop to step through
all points in this
range of the x-y
plane
K. Webb ENGR 112
35 The MATLAB Debugger

K. Webb ENGR 112


Debugging
36

 You’ve probably already realized that it’s not uncommon for your
code to have errors
 Computer code errors referred to as bugs
 Three main categories of errors
 Syntax errors prevent your code from running and generate a MATLAB
error message
 Runtime errors – not syntactically incorrect, but generate an error upon
execution – e.g., indexing beyond matrix dimensions
 Algorithmic errors don’t prevent your code from executing, but do
produce an unintended result
 Syntax and runtime errors are usually more easily fixed than
algorithmic errors
 Debugging – the process of identifying and fixing errors is an
important skill to develop
 MATLAB has a built-in debugger to facilitate this process

K. Webb ENGR 112


Debugging
37

 Identifying and fixing errors is difficult because:


 Programs run seemingly instantaneously
 Incorrect output results, but can’t see the intermediate
steps that produced that output

 Basic debugging principles:


 Slow code execution down – allow for stepping through
line-by-line
 Provide visibility into the code execution – allow for
monitoring of intermediate steps and variable values

K. Webb ENGR 112


MATLAB Debugger – Breakpoints
38

 Breakpoint – specification of a line of code at which


MATLAB should pause execution
 Set by clicking on the dash to the left of a line of code in
an m-file
 MATLAB will execute the m-file up to this line, then pause

 Clicking here sets a


breakpoint
 Indicated by red
circle

K. Webb ENGR 112


MATLAB Debugger – Breakpoints
39

 Click Run to begin execution


 Execution halts at the
breakpoint
 Before executing that line

 Command window prompt


changes to K>>
 Can now interactively enter
commands

 Toolbar buttons change


from RUN to DEBUG
K. Webb ENGR 112
MATLAB Debugger – Breakpoints
40

 Click Step to execute the


current line of code
 Green arrow indicator
advances to the next line
 Variable, m, defined on
previous line (line 16) is
now available in the
workspace
 Can be displayed in the
command window

K. Webb ENGR 112


Debugger – Example
41

 Recall a previous example of an algorithm to square every


element in a matrix
 Let’s say we run our m-file and get the following result:

 Resulting matrix is transposed


 Use the debugger to figure out why
K. Webb ENGR 112
Debugger – Example
42

 Set a breakpoint in the


innermost for loop
 Click Run, code executes
through the first iteration
of the inner for loop
 Workspace shows i=1
and j=1
 Display B(i,j) and
C(i,j) in the command
window
 Both are as expected
K. Webb ENGR 112
Debugger – Example
43

 Click Continue, code


executes until it hits the
breakpoint again
 One more iteration of
inner for loop
 Now, i=1 and j=2
 First row, second column
 B(i,j) = 2, as
expected
 But, C(i,j) = 81
 Should be 4
K. Webb ENGR 112
Debugger – Example
44

 We see that C(1,2) is being set to B(2,1)^2


 This leads us to an error on line 21 of the code

K. Webb ENGR 112


45 Miscellany

K. Webb ENGR 112


Sections
46

 Define sections within an m-file


 Execute isolated blocks of code
 Starts with a double comment
 Ends at the start of the next
section
 Useful for debugging, particularly
if running the entire m-file is
time-consuming
 To run a section:
 Place cursor in section and type
Ctrl+Enter
 Click the Run Section button

K. Webb ENGR 112


Preallocation
47

 Note the red line to the right of line 14 and the red squiggle
under x in the following for loop:

 Mouse over the line or the squiggle to see the following


warning:

 The size of x grows with each iteration of the loop


 Inefficient - slow
K. Webb ENGR 112
Preallocation
48

 When you assign a variable, MATLAB must store it


in memory
 Amount of memory allocated for storage depends on
the size of the array
 If the variable grows it must be copied to a new, larger
block of available memory – slow
 If the ultimate size of a variable is known ahead of
time, we can preallocate memory for it
 Assign a full-sized array of all zeros
 Overwrite elements on each iteration
 Array size remains constant

K. Webb ENGR 112


Preallocation – Example
49

 A nested for loop stepping


through an 𝑁𝑁 × 𝑁𝑁 matrix
 Here N = 100

 Time the loop with and


without preallocation
 Use tic … toc

 Preallocation speeds up
the loop up significantly
 But …

K. Webb ENGR 112


Preallocation – Example
50

 An accurate comparison
must account for the cost
of preallocation
 Start the timer before
preallocating
 Still significantly faster,
even accounting for
preallocation
 Note that times vary from
run to run
 But …

K. Webb ENGR 112


Preallocation – Example
51

 6 msec vs. 9 msec? So what?


 Difference is imperceptible

 Now, increase N to 5e3


 25e6 elements in A!
 A significant, and very
noticeable, difference
 Preallocation is always a
good practice

K. Webb ENGR 112

You might also like