Anda di halaman 1dari 30

Chapter 4

MATLAB provides two types of loops


• A counted loop
• “for”
• Used when you know ahead of time how many times some
action will be repeated
• Repeat n-times

• A conditional loop
• “while”
• Used when you do not know ahead of time how many times
some action will be repeated
• Repeat until some logical statement becomes false
• Used with a pre-defined number of iterations of the loop variable
The “for” keyword (“for” is a reserved word in MATLAB)
The loop variable, which can be any valid variable name
Traditionally, we use i, j, k, or other single letters
The range or list of values the loopVar will take on
Can be any vector, but typically the colon operator is used
The action(s) that will be performed during each iteration
The “end” keyword. Signifies that the code should go back to
beginning of the loop statement if more iterations remain

for loopVar = range


action(s)
end
• Lets make a simple
for loop to see how
everything works
• During each
iteration
• Loop variable i is
changed
• i is printed using
fprintf

• Note that the


actions must be
indented
• Makes code easier
to read
• MATLAB editor does
this automatically
• The loop variable
can change by any
increment
• Most commonly
the increment is 1
• The loop variable
can have positive or
negative values
• Most commonly
values are positive

• After loop is
complete
• Can still use the
loop variable
• Has the final value
of the loop
• The loop iterations can be
defined by any vector
• This is not typical
• Whenever possible, use the
colon operator
A common use
of a loop:
• perform an
operation on each
and every data
point, one by one.
• Doesn’t matter how
many data points
there are*
*Obviously, there is some limit based on your computer’s RAM, CPU speed, and operating system
• Lets mimic the
behavior of the
MATLAB function
“sum”
• Use a for loop
Because MATLAB code is interpreted on the fly
(i.e. not compiled into binary exe files)
• Each time the loop restarts, the whole loop must be
compiled again
• To avoid using loops (vectorization)
• For most operations, loops are still fast enough
• To calculate execution times of scripts, MATLAB provides
a timer function
• “tic” starts the timer
• “toc” stops the timer and prints the total execution time to the
command window
• Makes most sense to use in scripts/functions
• Using tic toc, we can determine if code is efficient
Each time the
loop iterates...
• velKmHr is
completely re-
allocated and
remade each
iteration
• This is why the
editor gives a
warning
• orange wiggly
line
Each time the
loop iterates...
• One entry in
velKmHr is
overwritten
• The whole
matrix doesn’t
need to be
remade
• Numerical results are
identical
• Second script pre-
allocates the velKmHr
variable
• Runs > 5x faster!!!
• A loop to find the maximum of a vector
• We can combine loops with Boolean logic to test if each
entry meets some criterion
• We can combine loops with Boolean logic tests
• We can nest “for” loops into inner and outer
loops
• Can also be done with “while” loops
• Often useful for dealing with 2D data

The outer loop. “loopVar1” is iterated over “range1”


The inner loop. “loopVar2” is iterated over “range2”

for loopVar1 = range1


for loopVar2 = range2
action(s)
end
end
• Lets try a simple nested for loop.
• Lets try another simple nested for loop.
• This is NOT the way to do it!

• Lets try a nested for loop


• To make a 2D grid we need a nested for loop
• Outer loop: x-range; Inner loop: y-range

• Could even make


spherical grids
• (r, θ, ϕ)
• The “for” loop is a counted loop
• You must know the number of iterations beforehand

• What if you don’t know how many iterations there will


be?
• Use a conditional loop: the “while” loop
• Loop continues until some condition is no longer met
• Often paired with counter variables (to keep track of iterations)
• Can be used to error check, or only read part of a dataset.

• Most for loops can also be written as while loops


• Do whichever one is easiest to understand
• Typically for loops require less code
• Used with a conditional test of the loop variable
The “while” keyword (“while” is a reserved word in MATLAB)

A conditional statement to be tested at the beginning of each


loop iteration. If true, loop continues, if false, loop ends

The action(s) performed only if the condition(s) is “true”

The “end” keyword. At this point, the computer goes back to


the beginning of the while loop and re-tests the condition(s).

while condition
action(s)
end
Tests if x < 8
• If true:
• Prints out x to command
window
• If false:
• Loop terminates
• Can test more than
one condition in a
while loop
• Tests if x < 8 or y < 33
• Make sure the
condition tested will
become false
eventually
• If condition tested is
never false:
• An infinite loop
• Kill by typing ctrl+c
• May take several
tries

• What should be
added?
• If you use a while
loop to read though
a matrix/vector
• The whole
matrix/vector may
not be read
• Sometimes this is
desired

• To test which data meets some


condition for all data
• Use a for loop + if statement(s)

• Why does a while loop work here?


If we require input
from the user
• The user may input
incorrect/invalid
data
• A while loop can
check this
• Loops allow us to solve a problem once
• Tell the computer to repeat n-times
• While modern computers are VERY fast…
• MATLAB is not efficient with loops* *(not true for most other languages)
• The whole loop is recompiled with each iteration
• Adding entries to end of a matrix is inefficient* *(overwriting is fast)
• You should pre-allocate matrices/vectors whenever possible
• Multiple loops can be nested
• Can nest a for and while loop
• Can nest if-elseif-else statements in a loop(s)
• When nesting anything, always consistently indent

• If loops are not fast in MATLAB, what can I do?


• Vectorize your code!!