Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 5. Loops are common in most programming languages Plus side: Are very fast (in other languages) & easy to understand Negative side: Require a.

Similar presentations


Presentation on theme: "Chapter 5. Loops are common in most programming languages Plus side: Are very fast (in other languages) & easy to understand Negative side: Require a."— Presentation transcript:

1 Chapter 5

2 Loops are common in most programming languages Plus side: Are very fast (in other languages) & easy to understand Negative side: Require a lot of code Loops in MATLAB are not so fast MATLAB provides a ton of ways to avoid using loops For most problems (< 1e6 data, or so), loops are fast enough Vectorizing: The process of converting what would normally be done in a loop to use array operations, and/or built-in MATLAB functions The plus side: Code runs faster. Often easier to write The negative side: All of this ONLY works in MATLAB

3 Lets mimic the behavior of the MATLAB function “sum” Use a for loop Which is faster? The loop The built-in sum function Why is the sum function provided?

4 Use tic toc to time each method for summing numbers Both give the same answer

5 Use tic toc to time each method for summing numbers Both give the same answer

6 Matrix Addition/Subtraction Both must have same dimensions Add each pair of corresponding elements Result has same dimensions Can add a scalar to a matrix Would require a loop in most programming languages Is automatic in MATLAB Called a “scalar operation” Adds scalar to each element

7 Matrix Multiplication/Division If A is 3x2 and B is 2x3 [ 3 x 2 ] * [ 2 x 3 ] Red box: must be equal Blue box: Result is 3x3 Can multiply a matrix by a scalar Would require a loop in most programming languages Is automatic in MATLAB Called a “scalar operation” Multiplies each element by the scalar

8 Say you wanted to multiply each entry in one matrix by a corresponding value in another matrix In most programming languages, this would require a loop In MATLAB, you can use an array operation * = matrix multiplication.* = array multiplication

9 100 million temp measurements in °F Convert to °F Plots results to see if results are the same

10 100 million temp measurements in °F Convert to °F Plots results to see if results are the same

11 100 million temp measurements in °F Convert to °F Plots results to see if results are the same

12 Add 4 to all entries in a vector How could we re-write this without using the loop? Scalar operation!

13 Multiply entries of two matrices together How could we re-write this without using the loop? Use an array operation!

14 Grab and store a column from a matrix How could we re-write this without using the loop?

15 What about function arguments? Functions should be written to handle either scalars or matrices/vectors

16 What about function arguments? Functions should be written to handle either scalars or matrices/vectors How can we get rid of the for loop?

17 What about function arguments? Functions should be written to handle either scalars or matrices/vectors Now it is vectorized! Built-in MATLAB functions work just like this sin, cos, tan, sum, max, min, etc…

18 Can we vectorize conditional statements? Yes! Recall that MATLAB offers a variable type called “logical” Can only have two values 0 = False 1 = True

19 When converted to logical… Any non-zero number 1 (true) Any zero number 0 (false) You can perform mathematical operations on logical values, but they are automatically converted to doubles

20 We can convert vectors of any numeric type to logical vectors Any non-zero entry 1 (true) Any zero entry 0 (false) You can index a vector by using a logical vector Only entries with non-zero entries are kept

21 We can convert matrices of any numeric type to logical matrices Any non-zero entry 1 (true) Any zero entry 0 (false) You can index a matrix by using a logical vector Only entries with non-zero entries are kept Matrix is unwrapped and returned as a vector Why?

22 Why does C not do what you expect? The variable doing the indexing must of class=logical

23 Using logical vectors, we can vectorize conditional statements that would normally require a loop

24 How can I test only one column?

25 Loops through “dat” Stores all values > 3 in “newDat”

26 Loops through “dat” Stores all values > 3 in “newDat”

27 Finds: Vals > 5 in col 1 Vals < 5 in col 2 Prints times

28 Vectorized Code wins again

29 MATLAB provides several built-in functions that perform logical tests all, any, find, sign You can read the documentation for “all”, “any”, and “sign” Lets look at what find does Returns the linear index of all values that satisfy some condition

30 MATLAB provides a clever function that calculates differences in adjacent data entries. “diff” Is VERY useful for calculating approximate derivatives Input matrix length=n Output matrix length=n-1

31 Diff can also accept matrices as arguments Returns the differences of successive rows

32 Recall that a derivative is just a slope Exact analytical derivatives are only possible for algebraic equations For data, we cannot calculate exact analytical derivatives We can calculate slopes! Same is true for integrals. We calculate areas under datasets. Why do I not need to calculate diff(x) in this case? Why do I not need to calculate diff(x) in this case?

33

34 “diff” can also calculate 2 nd, 3 rd, or n th derivatives Lose one data point per derivative

35

36

37 “diff” can also calculate approximate second or n th derivatives “diff” can also calculate approximate second or n th derivatives Note that each time you use diff, you lose one data pointNote that each time you use diff, you lose one data point Where (at what x location) should second derivatives be plotted?Where (at what x location) should second derivatives be plotted?

38

39 A common task in quantitative science is to evaluate 2D or 3D spatial equations. To do this, you need a 2D or 3D grid of (x,y,z) data points In most programming languages: nested for loops In MATLAB: nested for loops, or the built-in function “meshgrid” Lets flashback to the Loops lecture notes… 3D image of a carbonate reef http://www.georgedreher.2e.com/3D_Seismic.html

40 This is NOT the way to do it! Lets try a nested for loop

41 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, θ, ϕ)

42 To make a 2D grid we can also use the efficient built-in function “meshgrid” meshgrid will return: 3 matrices for 3D 2 matrices for 2D You must specify where to store all matrices, or you only get one!

43 meshgrid returns rectangular matrices Often, we want data in columns Col 1: X-Values; Col 2: Y-Values Use “reshape” to get in cols

44 meshgrid can also make 3D grids! Returns 3D matrices (refer to CH1 in Attaway & lecture notes)

45 Meshgrid will also accept ranges using the “linspace” function

46 MATLAB is a bit of an unusual programming language Most languages rely heavily on loops So, anyone that knows how to code, knows loops well In MATLAB: You can use loops (a little on the slow side) You can avoid loops using vectorized code What is best? If data set is small (less than millions of points) Do whichever you prefer, or is easier to write/understand If data set is large or computation time is an issue Use vectorized code, and built-in functions (when possible)


Download ppt "Chapter 5. Loops are common in most programming languages Plus side: Are very fast (in other languages) & easy to understand Negative side: Require a."

Similar presentations


Ads by Google