Essential MATLAB® for Engineers and Scientists
Third edition
Brian D. Hahn and daniel T. Valentine
PART I ESSENTIALS 1
1 Introduction 3
1.1 Using MATLAB 4
1.2 The MATLAB desktop 15
1.3 Sample program 16
1.3.1 Cut and paste 16
1.3.2 Saving a program: script files 19
1.3.3 How a program works 21
2 MATLAB fundamentals 24
2.1 Variables and the workspace 24
2.1.1 Variables 24
2.1.2 Case sensitivity 25
2.1.3 The workspace 25
2.1.4 Adding commonly used constants to the workspace 27
2.2 Arrays: vectors and matrices 27
2.2.1 Initializing vectors: explicit lists 28
2.2.2 Initializing vectors: the colon operator 29
2.2.3 linspace 30
2.2.4 Transposing vectors 30
2.2.5 Subscripts 31
2.2.6 Matrices 31
2.2.7 Capturing output 32
2.3 Vertical motion under gravity 33
2.4 Operators, expressions and statements 35
2.4.1 Numbers 35
2.4.2 Data types 36
2.4.3 Arithmetic operators 37
2.4.4 Precedence of operators 37
2.4.5 The colon operator 38
2.4.6 The transpose operator 39
1 Introduction 3
1.1 Using MATLAB 4
1.2 The MATLAB desktop 15
1.3 Sample program 16
1.3.1 Cut and paste 16
1.3.2 Saving a program: script files 19
1.3.3 How a program works 21
2 MATLAB fundamentals 24
2.1 Variables and the workspace 24
2.1.1 Variables 24
2.1.2 Case sensitivity 25
2.1.3 The workspace 25
2.1.4 Adding commonly used constants to the workspace 27
2.2 Arrays: vectors and matrices 27
2.2.1 Initializing vectors: explicit lists 28
2.2.2 Initializing vectors: the colon operator 29
2.2.3 linspace 30
2.2.4 Transposing vectors 30
2.2.5 Subscripts 31
2.2.6 Matrices 31
2.2.7 Capturing output 32
2.3 Vertical motion under gravity 33
2.4 Operators, expressions and statements 35
2.4.1 Numbers 35
2.4.2 Data types 36
2.4.3 Arithmetic operators 37
2.4.4 Precedence of operators 37
2.4.5 The colon operator 38
2.4.6 The transpose operator 39
2.4.7 Arithmetic operations on arrays 39
2.4.8 Expressions 41
2.4.9 Statements 41
2.4.10 Statements, commands and functions 43
2.4.11 Vectorization of formulae 43
2.5 Output 47
2.5.1 disp 47
2.5.2 format 49
2.5.3 Scale factors 50
2.6 Repeating with for 51
2.6.1 Square roots with Newton’s method 51
2.6.2 Factorials! 53
2.6.3 Limit of a sequence 53
2.6.4 The basic for construct 54
2.6.5 for in a single line 56
2.6.6 More general for 56
2.6.7 Avoid for loops by vectorizing! 56
2.6.8 A common mistake: for less loops! 59
2.7 Decisions 60
2.7.1 The one-line if statement 60
2.7.2 The if-else construct 62
2.7.3 The one-line if-else statement 63
2.7.4 elseif 64
2.7.5 Logical operators 65
2.7.6 Multiple ifs versus elseif 65
2.7.7 Nested ifs 67
2.7.8 Vectorizing ifs? 68
2.7.9 switch 68
2.8 Complex numbers 69
2.9 More on input and output 71
2.9.1 fprintf 71
2.9.2 Output to a disk file with fprintf 73
2.9.3 General file I/O 73
2.9.4 Saving and loading data 73
2.10 Odds ’n ends 73
2.10.1 Variables, functions and scripts with the same name 73
2.10.2 The input statement 74
2.10.3 Shelling out to the operating system 75
2.10.4 More Help functions 76
2.11 Programming style 76
3 Program design and algorithm development 86
3.1 Computer program design process 87
3.1.1 Projectile problem example 89
2.4.8 Expressions 41
2.4.9 Statements 41
2.4.10 Statements, commands and functions 43
2.4.11 Vectorization of formulae 43
2.5 Output 47
2.5.1 disp 47
2.5.2 format 49
2.5.3 Scale factors 50
2.6 Repeating with for 51
2.6.1 Square roots with Newton’s method 51
2.6.2 Factorials! 53
2.6.3 Limit of a sequence 53
2.6.4 The basic for construct 54
2.6.5 for in a single line 56
2.6.6 More general for 56
2.6.7 Avoid for loops by vectorizing! 56
2.6.8 A common mistake: for less loops! 59
2.7 Decisions 60
2.7.1 The one-line if statement 60
2.7.2 The if-else construct 62
2.7.3 The one-line if-else statement 63
2.7.4 elseif 64
2.7.5 Logical operators 65
2.7.6 Multiple ifs versus elseif 65
2.7.7 Nested ifs 67
2.7.8 Vectorizing ifs? 68
2.7.9 switch 68
2.8 Complex numbers 69
2.9 More on input and output 71
2.9.1 fprintf 71
2.9.2 Output to a disk file with fprintf 73
2.9.3 General file I/O 73
2.9.4 Saving and loading data 73
2.10 Odds ’n ends 73
2.10.1 Variables, functions and scripts with the same name 73
2.10.2 The input statement 74
2.10.3 Shelling out to the operating system 75
2.10.4 More Help functions 76
2.11 Programming style 76
3 Program design and algorithm development 86
3.1 Computer program design process 87
3.1.1 Projectile problem example 89
3.2 Other examples of structure plans 98
3.2.1 Quadratic equation 99
3.3 Structured programming with functions 100
4 MATLAB functions & *data import-export utilities 104
4.1 Some common functions 105
4.2 *Importing and exporting data 110
4.2.1 The load and save commands 110
4.2.2 Exporting text (ASCII) data 110
4.2.3 Importing text (ASCII) data 111
4.2.4 Exporting binary data 111
4.2.5 The Import Wizard 112
4.2.6 Low-level file I/O functions 113
4.2.7 Other import/export functions 118
5 Logical vectors 121
5.1 Examples 122
5.1.1 Discontinuous graphs 122
5.1.2 Avoiding division by zero 123
5.1.3 Avoiding infinity 125
5.1.4 Counting random numbers 126
5.1.5 Rolling dice 127
5.2 Logical operators 127
5.2.1 Operator precedence 129
5.2.2 Danger 130
5.2.3 Logical operators and vectors 130
5.3 Subscripting with logical vectors 131
5.4 Logical functions 133
5.4.1 Using any and all 134
5.5 Logical vectors instead of elseif ladders 135
6 Matrices of numbers & arrays of strings 141
6.1 Matrices 142
6.1.1 A concrete example 142
6.1.2 Creating matrices 143
6.1.3 Subscripts 144
6.1.4 Transpose 144
6.1.5 The colon operator 144
6.1.6 Duplicating rows and columns: tiling 148
6.1.7 Deleting rows and columns 148
6.1.8 Elementary matrices 149
6.1.9 *Specialized matrices 150
6.1.10 Using MATLAB functions with matrices 151
6.1.11 Manipulating matrices 152
3.2.1 Quadratic equation 99
3.3 Structured programming with functions 100
4 MATLAB functions & *data import-export utilities 104
4.1 Some common functions 105
4.2 *Importing and exporting data 110
4.2.1 The load and save commands 110
4.2.2 Exporting text (ASCII) data 110
4.2.3 Importing text (ASCII) data 111
4.2.4 Exporting binary data 111
4.2.5 The Import Wizard 112
4.2.6 Low-level file I/O functions 113
4.2.7 Other import/export functions 118
5 Logical vectors 121
5.1 Examples 122
5.1.1 Discontinuous graphs 122
5.1.2 Avoiding division by zero 123
5.1.3 Avoiding infinity 125
5.1.4 Counting random numbers 126
5.1.5 Rolling dice 127
5.2 Logical operators 127
5.2.1 Operator precedence 129
5.2.2 Danger 130
5.2.3 Logical operators and vectors 130
5.3 Subscripting with logical vectors 131
5.4 Logical functions 133
5.4.1 Using any and all 134
5.5 Logical vectors instead of elseif ladders 135
6 Matrices of numbers & arrays of strings 141
6.1 Matrices 142
6.1.1 A concrete example 142
6.1.2 Creating matrices 143
6.1.3 Subscripts 144
6.1.4 Transpose 144
6.1.5 The colon operator 144
6.1.6 Duplicating rows and columns: tiling 148
6.1.7 Deleting rows and columns 148
6.1.8 Elementary matrices 149
6.1.9 *Specialized matrices 150
6.1.10 Using MATLAB functions with matrices 151
6.1.11 Manipulating matrices 152
6.1.12 Array (element-by-element) operations on matrices 153
6.1.13 Matrices and for 153
6.1.14 Visualization of matrices 154
6.1.15 Vectorizing nested fors: loan repayment tables 154
6.1.16 Multidimensional arrays 156
6.2 Matrix operations 157
6.2.1 Matrix multiplication 157
6.2.2 Matrix exponentiation 159
6.3 Other matrix functions 160
6.4 *Strings 160
6.4.1 Assignment 160
6.4.2 Input 160
6.4.3 Strings are arrays 161
6.4.4 Concatenation of strings 161
6.4.5 ASCII codes, double and char 162
6.4.6 fprintf of strings 163
6.4.7 Comparing strings 163
6.4.8 Other string functions 164
6.5 *Two-dimensional strings 164
6.6 *eval and text macros 165
6.6.1 Error trapping with eval and lasterr 166
6.6.2 eval with try...catch 167
7 Introduction to graphics 171
7.1 Basic 2-D graphs 171
7.1.1 Labels 173
7.1.2 Multiple plots on the same axes 173
7.1.3 Line styles, markers and color 174
7.1.4 Axis limits 175
7.1.5 Multiple plots in a figure: subplot 176
7.1.6 figure, clf and cla 178
7.1.7 Graphical input 178
7.1.8 Logarithmic plots 178
7.1.9 Polar plots 179
7.1.10 Plotting rapidly changing mathematical functions: fplot 180
7.1.11 The property editor 181
7.2 3-D plots 181
7.2.1 plot3 182
7.2.2 Animated 3-D plots with comet3 183
7.2.3 Mesh surfaces 183
7.2.4 Contour plots 186
7.2.5 Cropping a surface with NaNs 187
7.2.6 Visualizing vector fields 188
7.2.7 Visualization of matrices 189
6.1.13 Matrices and for 153
6.1.14 Visualization of matrices 154
6.1.15 Vectorizing nested fors: loan repayment tables 154
6.1.16 Multidimensional arrays 156
6.2 Matrix operations 157
6.2.1 Matrix multiplication 157
6.2.2 Matrix exponentiation 159
6.3 Other matrix functions 160
6.4 *Strings 160
6.4.1 Assignment 160
6.4.2 Input 160
6.4.3 Strings are arrays 161
6.4.4 Concatenation of strings 161
6.4.5 ASCII codes, double and char 162
6.4.6 fprintf of strings 163
6.4.7 Comparing strings 163
6.4.8 Other string functions 164
6.5 *Two-dimensional strings 164
6.6 *eval and text macros 165
6.6.1 Error trapping with eval and lasterr 166
6.6.2 eval with try...catch 167
7 Introduction to graphics 171
7.1 Basic 2-D graphs 171
7.1.1 Labels 173
7.1.2 Multiple plots on the same axes 173
7.1.3 Line styles, markers and color 174
7.1.4 Axis limits 175
7.1.5 Multiple plots in a figure: subplot 176
7.1.6 figure, clf and cla 178
7.1.7 Graphical input 178
7.1.8 Logarithmic plots 178
7.1.9 Polar plots 179
7.1.10 Plotting rapidly changing mathematical functions: fplot 180
7.1.11 The property editor 181
7.2 3-D plots 181
7.2.1 plot3 182
7.2.2 Animated 3-D plots with comet3 183
7.2.3 Mesh surfaces 183
7.2.4 Contour plots 186
7.2.5 Cropping a surface with NaNs 187
7.2.6 Visualizing vector fields 188
7.2.7 Visualization of matrices 189
7.2.8 Rotation of 3-D graphs 190
7.2.9 Other cool graphics functions 192
8 Loops 205
8.1 Determinate repetition with for 205
8.1.1 Binomial coefficient 205
8.1.2 Update processes 206
8.1.3 Nested fors 208
8.2 Indeterminate repetition with while 208
8.2.1 A guessing game 208
8.2.2 The while statement 209
8.2.3 Doubling time of an investment 210
8.2.4 Prime numbers 211
8.2.5 Projectile trajectory 212
8.2.6 break and continue 215
8.2.7 Menus 215
9 Errors and pitfalls 222
9.1 Syntax errors 222
9.1.1 lasterr 225
9.2 Pitfalls and surprises 225
9.2.1 Incompatible vector sizes 225
9.2.2 Name hiding 225
9.2.3 Other pitfalls for the unwary 226
9.3 Errors in logic 226
9.4 Rounding error 226
9.5 Trapping and generating errors 228
10 Function M-files 230
10.1 Some examples 230
10.1.1 Inline objects: harmonic oscillators 230
10.1.2 Function M-files: Newton’s method again 232
10.2 Basic rules 233
10.2.1 Subfunctions 239
10.2.2 Private functions 239
10.2.3 P-code files 239
10.2.4 Improving M-file performance with the profiler 240
10.3 Function handles 240
10.4 Command/function duality 242
10.5 Function name resolution 243
10.6 Debugging M-files 243
10.6.1 Debugging a script 244
10.6.2 Debugging a function 246
10.7 Recursion 246
7.2.9 Other cool graphics functions 192
8 Loops 205
8.1 Determinate repetition with for 205
8.1.1 Binomial coefficient 205
8.1.2 Update processes 206
8.1.3 Nested fors 208
8.2 Indeterminate repetition with while 208
8.2.1 A guessing game 208
8.2.2 The while statement 209
8.2.3 Doubling time of an investment 210
8.2.4 Prime numbers 211
8.2.5 Projectile trajectory 212
8.2.6 break and continue 215
8.2.7 Menus 215
9 Errors and pitfalls 222
9.1 Syntax errors 222
9.1.1 lasterr 225
9.2 Pitfalls and surprises 225
9.2.1 Incompatible vector sizes 225
9.2.2 Name hiding 225
9.2.3 Other pitfalls for the unwary 226
9.3 Errors in logic 226
9.4 Rounding error 226
9.5 Trapping and generating errors 228
10 Function M-files 230
10.1 Some examples 230
10.1.1 Inline objects: harmonic oscillators 230
10.1.2 Function M-files: Newton’s method again 232
10.2 Basic rules 233
10.2.1 Subfunctions 239
10.2.2 Private functions 239
10.2.3 P-code files 239
10.2.4 Improving M-file performance with the profiler 240
10.3 Function handles 240
10.4 Command/function duality 242
10.5 Function name resolution 243
10.6 Debugging M-files 243
10.6.1 Debugging a script 244
10.6.2 Debugging a function 246
10.7 Recursion 246
7.2.8 Rotation of 3-D graphs 190
7.2.9 Other cool graphics functions 192
8 Loops 205
8.1 Determinate repetition with for 205
8.1.1 Binomial coefficient 205
8.1.2 Update processes 206
8.1.3 Nested fors 208
8.2 Indeterminate repetition with while 208
8.2.1 A guessing game 208
8.2.2 The while statement 209
8.2.3 Doubling time of an investment 210
8.2.4 Prime numbers 211
8.2.5 Projectile trajectory 212
8.2.6 break and continue 215
8.2.7 Menus 215
9 Errors and pitfalls 222
9.1 Syntax errors 222
9.1.1 lasterr 225
9.2 Pitfalls and surprises 225
9.2.1 Incompatible vector sizes 225
9.2.2 Name hiding 225
9.2.3 Other pitfalls for the unwary 226
9.3 Errors in logic 226
9.4 Rounding error 226
9.5 Trapping and generating errors 228
10 Function M-files 230
10.1 Some examples 230
10.1.1 Inline objects: harmonic oscillators 230
10.1.2 Function M-files: Newton’s method again 232
10.2 Basic rules 233
10.2.1 Subfunctions 239
10.2.2 Private functions 239
10.2.3 P-code files 239
10.2.4 Improving M-file performance with the profiler 240
10.3 Function handles 240
10.4 Command/function duality 242
10.5 Function name resolution 243
10.6 Debugging M-files 243
10.6.1 Debugging a script 244
10.6.2 Debugging a function 246
10.7 Recursion 246
7.2.9 Other cool graphics functions 192
8 Loops 205
8.1 Determinate repetition with for 205
8.1.1 Binomial coefficient 205
8.1.2 Update processes 206
8.1.3 Nested fors 208
8.2 Indeterminate repetition with while 208
8.2.1 A guessing game 208
8.2.2 The while statement 209
8.2.3 Doubling time of an investment 210
8.2.4 Prime numbers 211
8.2.5 Projectile trajectory 212
8.2.6 break and continue 215
8.2.7 Menus 215
9 Errors and pitfalls 222
9.1 Syntax errors 222
9.1.1 lasterr 225
9.2 Pitfalls and surprises 225
9.2.1 Incompatible vector sizes 225
9.2.2 Name hiding 225
9.2.3 Other pitfalls for the unwary 226
9.3 Errors in logic 226
9.4 Rounding error 226
9.5 Trapping and generating errors 228
10 Function M-files 230
10.1 Some examples 230
10.1.1 Inline objects: harmonic oscillators 230
10.1.2 Function M-files: Newton’s method again 232
10.2 Basic rules 233
10.2.1 Subfunctions 239
10.2.2 Private functions 239
10.2.3 P-code files 239
10.2.4 Improving M-file performance with the profiler 240
10.3 Function handles 240
10.4 Command/function duality 242
10.5 Function name resolution 243
10.6 Debugging M-files 243
10.6.1 Debugging a script 244
10.6.2 Debugging a function 246
10.7 Recursion 246
13 *Graphical User Interfaces (GUIs) 292
13.1 Basic structure of a GUI 292
13.2 A first example: getting the time 293
13.2.1 Exercise 297
13.3 Newton again 297
13.4 Axes on a GUI 301
13.5 Adding color to a button 302
PART II APPLICATIONS 305
14 Dynamical systems 307
14.1 Cantilever beam 309
14.2 Electric current 311
14.3 Free fall 314
14.4 Projectile with friction 323
15 Simulation 328
15.1 Random number generation 328
15.1.1 Seeding rand 329
15.2 Spinning coins 329
15.3 Rolling dice 330
15.4 Bacteria division 331
15.5 A random walk 331
15.6 Traffic flow 333
15.7 Normal (Gaussian) random numbers 336
16 *More matrices 341
16.1 Leslie matrices: population growth 341
16.2 Markov processes 345
16.2.1 A random walk 345
16.3 Linear equations 348
16.3.1 MATLAB’s solution 349
16.3.2 The residual 350
16.3.3 Overdetermined systems 350
16.3.4 Underdetermined systems 351
16.3.5 Ill conditioning 351
16.3.6 Matrix division 352
16.4 Sparse matrices 354
17 *Introduction to numerical methods 359
17.1 Equations 359
17.1.1 Newton’s method 359
17.1.2 The Bisection method 362
13.1 Basic structure of a GUI 292
13.2 A first example: getting the time 293
13.2.1 Exercise 297
13.3 Newton again 297
13.4 Axes on a GUI 301
13.5 Adding color to a button 302
PART II APPLICATIONS 305
14 Dynamical systems 307
14.1 Cantilever beam 309
14.2 Electric current 311
14.3 Free fall 314
14.4 Projectile with friction 323
15 Simulation 328
15.1 Random number generation 328
15.1.1 Seeding rand 329
15.2 Spinning coins 329
15.3 Rolling dice 330
15.4 Bacteria division 331
15.5 A random walk 331
15.6 Traffic flow 333
15.7 Normal (Gaussian) random numbers 336
16 *More matrices 341
16.1 Leslie matrices: population growth 341
16.2 Markov processes 345
16.2.1 A random walk 345
16.3 Linear equations 348
16.3.1 MATLAB’s solution 349
16.3.2 The residual 350
16.3.3 Overdetermined systems 350
16.3.4 Underdetermined systems 351
16.3.5 Ill conditioning 351
16.3.6 Matrix division 352
16.4 Sparse matrices 354
17 *Introduction to numerical methods 359
17.1 Equations 359
17.1.1 Newton’s method 359
17.1.2 The Bisection method 362
17.1.3 fzero 364
17.1.4 roots 364
17.2 Integration 364
17.2.1 The Trapezoidal rule 365
17.2.2 Simpson’s rule 366
17.2.3 quad 367
17.3 Numerical differentiation 367
17.3.1 diff 368
17.4 First-order differential equations 369
17.4.1 Euler’s method 369
17.4.2 Example: bacteria growth 370
17.4.3 Alternative subscript notation 371
17.4.4 A predictor-corrector method 373
17.5 Linear ordinary differential equations (LODEs) 374
17.6 Runge-Kutta methods 375
17.6.1 A single differential equation 375
17.6.2 Systems of differential equations: chaos 376
17.6.3 Passing additional parameters to an ODE solver 379
17.7 A partial differential equation 381
17.7.1 Heat conduction 381
17.8 Other numerical methods 385
Appendix A: Syntax quick reference 390
A.1 Expressions 390
A.2 Function M-files 390
A.3 Graphics 390
A.4 if and switch 391
A.5 for and while 392
A.6 Input/output 393
A.7 load/save 393
A.8 Vectors and matrices 393
Appendix B: Operators 395
Appendix C: Command and functionquick reference 396
C.1 General purpose commands 397
C.1.1 Managing commands 397
C.1.2 Managing variables and the workspace 397
C.1.3 Files and the operating system 397
C.1.4 Controlling the Command Window 398
C.1.5 Starting and quitting MATLAB 398
C.2 Logical functions 398
17.1.4 roots 364
17.2 Integration 364
17.2.1 The Trapezoidal rule 365
17.2.2 Simpson’s rule 366
17.2.3 quad 367
17.3 Numerical differentiation 367
17.3.1 diff 368
17.4 First-order differential equations 369
17.4.1 Euler’s method 369
17.4.2 Example: bacteria growth 370
17.4.3 Alternative subscript notation 371
17.4.4 A predictor-corrector method 373
17.5 Linear ordinary differential equations (LODEs) 374
17.6 Runge-Kutta methods 375
17.6.1 A single differential equation 375
17.6.2 Systems of differential equations: chaos 376
17.6.3 Passing additional parameters to an ODE solver 379
17.7 A partial differential equation 381
17.7.1 Heat conduction 381
17.8 Other numerical methods 385
Appendix A: Syntax quick reference 390
A.1 Expressions 390
A.2 Function M-files 390
A.3 Graphics 390
A.4 if and switch 391
A.5 for and while 392
A.6 Input/output 393
A.7 load/save 393
A.8 Vectors and matrices 393
Appendix B: Operators 395
Appendix C: Command and functionquick reference 396
C.1 General purpose commands 397
C.1.1 Managing commands 397
C.1.2 Managing variables and the workspace 397
C.1.3 Files and the operating system 397
C.1.4 Controlling the Command Window 398
C.1.5 Starting and quitting MATLAB 398
C.2 Logical functions 398
C.3 Language constructs and debugging 398
C.3.1 MATLAB as a programming language 398
C.3.2 Interactive input 399
C.4 Matrices and matrix manipulation 399
C.4.1 Elementary matrices 399
C.4.2 Special variables and constants 399
C.4.3 Time and date 400
C.4.4 Matrix manipulation 400
C.4.5 Specialized matrices 400
C.5 Mathematical functions 400
C.6 Matrix functions 401
C.7 Data analysis 402
C.8 Polynomial functions 402
C.9 Function functions 402
C.10 Sparse matrix functions 402
C.11 Character string functions 403
C.12 File I/O functions 403
C.13 Graphics 403
C.13.1 2-D 403
C.13.2 3-D 404
C.13.3 General 404
Appendix D: ASCII character codes 405
Appendix E: Solutions to selected exercises 406
Index 421
C.3.1 MATLAB as a programming language 398
C.3.2 Interactive input 399
C.4 Matrices and matrix manipulation 399
C.4.1 Elementary matrices 399
C.4.2 Special variables and constants 399
C.4.3 Time and date 400
C.4.4 Matrix manipulation 400
C.4.5 Specialized matrices 400
C.5 Mathematical functions 400
C.6 Matrix functions 401
C.7 Data analysis 402
C.8 Polynomial functions 402
C.9 Function functions 402
C.10 Sparse matrix functions 402
C.11 Character string functions 403
C.12 File I/O functions 403
C.13 Graphics 403
C.13.1 2-D 403
C.13.2 3-D 404
C.13.3 General 404
Appendix D: ASCII character codes 405
Appendix E: Solutions to selected exercises 406
Index 421