31
Loop Statemen ts Chapter 4

Loop Statements

  • Upload
    crevan

  • View
    38

  • Download
    1

Embed Size (px)

DESCRIPTION

Loop Statements. Chapter 4. Repeated Tasks are for Computers. Think back to any very difficult quantitative problem that you had to solve in some science class How long did it take? How many times did you solve it? - PowerPoint PPT Presentation

Citation preview

Page 1: Loop Statements

Loop Statements Chapter 4

Page 2: Loop Statements

Repeated Tasks are for Computers• Think back to any very difficult quantitative problem that

you had to solve in some science class• How long did it take?• How many times did you solve it?

• What if you had millions of data points that had to be processed using the same solution?

• Only need to solve it once• Tell the computer to repeat n-times

• This is the basis for the programming concept called a loop statement

Page 3: Loop Statements

Looping Statements in MATLABMATLAB 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

Page 4: Loop Statements

The For Loop• Used with a pre-defined number of iterations of the loop variable

for loopVar = rangeaction(s)

end

The “for” keyword (“for” is a reserved word in MATLAB)

The loop variable, which can be any valid variable nameTraditionally, we use i, j, k, or other single letters

The range or list of values the loopVar will take onCan 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

Page 5: Loop Statements

First For Loop• 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

Page 6: Loop Statements

For Loop Examples• The loop variable

can change by any increment

• Most commonly the increment is 1

Page 7: Loop Statements

For Loop Examples• 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

Page 8: Loop Statements

For Loop Examples• The loop iterations can be

defined by any vector• This is not typical• Whenever possible, use the

colon operator

Page 9: Loop Statements

For Loop Examples

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

Page 10: Loop Statements

For Loop Examples• Lets mimic the

behavior of the MATLAB function “sum”

• Use a for loop

Page 11: Loop Statements

Drawbacks of Loops in MATLABBecause 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

• Chapter 5 will cover ways to avoid using loops (vectorization)• For most operations, loops are still fast enough

• Each time an entry is added to a matrix, the whole matrix must be recreated

Page 12: Loop Statements

Timing CPU Time in Scripts/Functions• 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

Page 13: Loop Statements

An Inefficient For LoopEach time the loop iterates...• velKmHr is

completely re-allocated and remade each iteration

• This is why the editor gives a warning

• orange wiggly line

Page 14: Loop Statements

An Efficient For LoopEach time the loop iterates...• One entry in

velKmHr is overwritten

• The whole matrix doesn’t need to be remade

Page 15: Loop Statements

The Race is On…Which is Faster?• Numerical results are

identical• Second script pre-

allocates the velKmHr variable

• Runs > 5x faster!!!

The Take-Home Message: While most operations are very fast, pre-allocating a matrix is easy, so you should always do it (if possible)

Page 16: Loop Statements

Combining Loops With If Statements• A loop to find the maximum of a vector

• Can also be accomplished with the command “max”

• Which do you think is faster?

Page 17: Loop Statements

Combining Loops With If Statements• We can combine loops with Boolean logic to test if each

entry meets some criterion

• Make sure that all of your indenting is consistent.

• MATLAB’s editor should do this automatically

Page 18: Loop Statements

Combining Loops With If Statements• We can combine loops with Boolean logic tests

• Can we pre-allocate “newData”?

Page 19: Loop Statements

Nested For Loops• We can nest “for” loops into inner and outer

loops• Can also be done with “while” loops

• Often useful for dealing with 2D data

for loopVar1 = range1for loopVar2 = range2

action(s)end

end

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

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

Page 20: Loop Statements

Nested For Loops• Lets try a simple nested for loop.

Page 21: Loop Statements

Nested For Loops• Lets try another simple nested for loop.

• This can be very handy for making a grid of data points

• A common task in any quantitative science

Page 22: Loop Statements

Grid of XY Points?• This is NOT the way to do it!

• Lets try a nested for loop

Page 23: Loop Statements

Grid of XY Points• 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, θ, ϕ)

Page 24: Loop Statements

The While Loop• 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

Page 25: Loop Statements

The While Loop• Used with a conditional test of the loop variable

while conditionaction(s)

end

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).

Page 26: Loop Statements

While Loop ExampleTests if x < 8• If true:

• Prints out x to command window

• If false:• Loop terminates

Page 27: Loop Statements

While Loop Example• Can test more than

one condition in a while loop• Tests if x < 8 or y < 33

Page 28: Loop Statements

A Caution About While Loops• 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?

Page 29: Loop Statements

Another Caution About While Loops• 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?

Page 30: Loop Statements

While Loop For Error Checking

If we require input from the user• The user may input

incorrect/invalid data• A while loop can

check this

Page 31: Loop Statements

Final Thoughts• 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!!

Anyone up for a game?