Introduction to MATLAB

advertisement
Introdução ao MATLAB
MATLAB Basico
www.opencadd.com.br
Introduction to MATLAB
Online Help
•
•
•
»
CD
The help command
>> help
The help window
>> helpwin
The lookfor command
>> lookfor
help cd
Change current working directory.
CD directory-spec sets the current directory to the one specified.
CD .. moves to the directory above the current one.
CD, by itself, prints out the current directory.
WD = CD returns the current directory as a string.
Use the functional form of CD, such as CD('directory-spec'),
when the directory specification is stored in a string.
See also PWD.
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Calculations at the Command Line
MATLAB as a calculator
»
-5/(4.8+5.32)^2
ans =
-0.0488
»
(3+4i)*(3-4i)
Assigning Variables
» a = 2;
» b = 5;
» a^b
ans =
32
ans =
25
»
cos(pi/2)
ans =
» x = 5/2*pi;
» y = sin(x)
exp(acos(0.3))
ans =
3.5470
»cmd_line
Results
assigned to
“ans” if name
not specified
y =
1
6.1230e-017
»
Semicolon
suppresses
screen output
» z = asin(y)
z =
() parentheses for
function inputs
1.5708
Numbers stored in double-precision
floating point format
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Working with Files & Variables
•
•
CD / PWD, LS / DIR - navigating directories
•
•
! - invoke operating system
•
•
CLEAR - remove function / variable from memory
•
SIZE - returns the size of matrix
WHAT - displays the files within a directory
(grouped by type)
WHICH - identifies the object referenced by given
name (function / variable)
WHOS - lists workspace variables and details
(size, memory usage, data type)
Ref: Utility Commands
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Workspace Browser
Command line
variables saved in
MATLAB workspace
»workspace
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Array Editor
For editing 2-D
numeric arrays
double-click /
Open
»openvar ans
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Working with Matrices
MATLAB == MATrix LABoratory
»load durer
»image(X);
»colormap(map)
»load detail
»image(X);
»colormap(map)
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
The Matrix in MATLAB
Columns
(n)
2
3
4
1
A=
1
2
4
1
8
2
5
6
1
11
6
16
1.2 7
9
12
4
17
25 22
10
2
21
7.2 3
5
8
7
13
1
18
11 23
4
0
4
0.5 9
4
14
5
19
56 24
5
23
5
83 10 13 15
0
20
10 25
Rows (m) 3
Matrix elements can be EITHER
numbers OR characters
A (2,4)
A (17)
Rectangular Matrix:
Scalar: 1-by-1 array
Vector: m-by-1 array
1-by-n array
Matrix: m-by-n array
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Entering Numeric Arrays
Row separator:
semicolon (;)
Column separator:
space / comma (,)
» a=[1 2;3 4]
Use square
brackets [ ]
a =
1
2
3
4
» b=[-2.8, sqrt(-7), (3+5+6)*3/4]
b =
-2.8000
0 + 2.6458i
10.5000
» b(2,5) = 23
Matrices must
be rectangular.
(Set undefined
elements to zero)
b =
-2.8000
0 + 2.6458i
10.5000
0
0
0
0
0
0
23.0000
Any MATLAB expression can
be entered as a matrix element
»num_array1
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Entering Numeric Arrays - cont.
Scalar expansion
Creating sequences:
colon operator (:)
» w=[1 2;3 4] + 5
w =
6
7
8
9
» x = 1:5
x =
1
2
» y = 2:-0.5:0
Utility functions for
creating matrices.
(Ref: Utility Commands)
y =
2.0000
1.5000
» z = rand(2,4)
3
4
5
1.0000
0.5000
0.8913
0.7621
0.4565
0.0185
0
z =
0.9501
0.2311
0.6068
0.4860
»num_array2
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Numerical Array Concatenation - [ ]
Use [ ] to combine
existing arrays as
matrix “elements”
Row separator:
semicolon (;)
Column separator:
space / comma (,)
» a=[1 2;3 4]
Use square
brackets [ ]
a =
1
2
3
4
» cat_a=[a, 2*a; 3*a,
cat_a =
1
2
2
3
4
6
3
6
4
9
12
12
5
10
6
15
20
18
4*a; 5*a, 6*a]
4
8
8
16
12
24
4*a
The resulting
matrix must
be rectangular.
»num_cat
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Array Subscripting / Indexing
1
A=
A(3,1)
A(3)
•
•
•
•
4
1
2
2
8
3
7.2
3
4
0
4
5
23
5
1
2
3
4
6
1
11
6
16
1.2 7
9
12
4
17
10
5
2
21
25 22
8
7
13
1
18
11 23
0.5 9
4
14
5
19
56 24
83 10 13 15
0
20
10 25
5
A(1:5,5) A(1:end,end)
A(:,5)
A(:,end)
A(21:25) A(21:end)’
A(4:5,2:3)
A([9 14;10 15])
Use () parentheses to specify index
colon operator (:) specifies range / ALL
[ ] to create matrix of index subscripts
‘end’ specifies maximum index value
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Exercise: Creating Matrices
• Create a 5x5 Pascal matrix ("P_mat")
• Extract elements to create row vectors
for the first 5 rows of Pascal’s Triangle
1
1
(Look for patterns in the element locations in "P_mat")
•
Combine the vectors into a single
matrix with zeros above the diagonal
"P_mat"
1
1
1
1
1
1 1 1 1
2 3 4 5
3 6 10 15
4 10 20 35
5 15 35 70
row1
1
row2
1
row3
1
row4
1
row5
1
1
1
1
1
1
2
3
1
3
4 6 4
5 10 . . .
1
1
Pascal’s Triangle
=
=
1
1
1
1
1
1
=
2
=
3
=
4
1
3
1
6
4
0
1
2
3
4
0
0
1
3
6
0
0
0
1
4
0
0
0
0
1
1
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Solution: Creating Matrices (1)
» P_mat = pascal(5)
% Create Pascal's Matrix
» row1 = P_mat(1)
% Extract Rows
» row2 = P_mat(2:4:6) .....
» row5 = P_mat(5:4:21)
» new_mat = row1
% Create New Matrix
» new_mat(2,1:2) = row2 .....
» new_mat(5,1:5) = row5
% NOTE: GENERALIZED FORM:
% Nmax = length(P_mat);
% rowN = P_mat(N:Nmax-1:(N-1)*Nmax+1)
% new_mat(N,1:N) = rowN
»create_mat
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Solution: Creating Matrices (2)
» P_mat = pascal(5)
% Create Pascal's Matrix
% Rearrange Matrix - Pascal Triangle in upper triangle
% Flip Matrix Horizontally (LEFT-RIGHT):
% - Could also use FLIPLR():
» temp = P_mat(1:5, 5:-1:1)
% Extract diagonals (rows of Pascal’s Triangle)
» row1 = diag(temp,4)'
» row2 = diag(temp,3)'
» row3 = diag(temp,2)'
» row4 = diag(temp,1)'
» row5 = diag(temp)'
% Create New Matrix as before
»create_mat
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Solution: Creating Matrices (3)
» P_mat = pascal(5)
% Create Pascal's Matrix
% Rearrange Matrix - Pascal Triangle in lower triangle
% Flip Matrix Vertically (UP-DOWN):
% - Could also use FLIPUD():
» temp1 = P_mat(5:-1:1, 1:5)
% Extract lower triangular matrix:
» temp2 = tril(temp1)
% Create New Matrix by sorting columns of "temp2":
» new_mat = sort(temp2)
»create_mat
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Matrices & Linear Algebra
Matrix Operators
Array operators
() parentheses
Common Matrix Functions
inv()
matrix inverse
‘ comp. transpose
.’ array transpose
det()
determinant
^ power
.^ array power
rank()
matrix rank
* multiplication
.* array mult.
eig()
eigenvectors & values
/ division
./ array division
svd()
singular value dec.
\ left division
norm() matrix / vector norm
+ addition
- subtraction
(In order of precedence)
»help ops
»help matfun
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Matrix Multiplication
•
•
Inner dimensions must be equal
•
Resulting elements = dot product of the rows of
the 1st matrix with the columns of the 2nd matrix
Dimension of resulting matrix = outermost
dimensions of multiplied matrices
» a = [1 2 3 4; 5 6 7 8];
[2x4]
» b = ones(4,3);
[4x3]
» c = a*b
[2x4]*[4x3]
[2x3]
c =
10
26
10
26
10
26
a(2nd row).b(3rd column)
»mat_mult
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Solving Simultaneous Equations
using “Left Division”
[A]{x} = {b}
•
{x} = ?
If [A] is square matrix (m = n):
{x} = [A]-1{b}
[A] = mxn
{x} = nx1
{b} = mx1
» x = inv(A)*b;
» x = A\b;
Error if singular
Warning if nearly singular
•
For overdetermined system (m>n):
» x = A\b;
using Least squares regression “curve fit” of data
Warning if rank deficient (dependent columns) - solution not unique
•
For undetermined system (m<n):
» x = A\b;
using QR factorization with column pivoting
Never unique
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Example: Solving Equations
•
Solve this set of simultaneous equations:
» A = [-1 1 2; 3 -1 1;-1 3 4];
» b = [2;6;4];
» x = inv(A)*b
x =
1.0000
-1.0000
2.0000
» x = A\b
-x1 + x2 + 2x3 = 2
3x1 - x2 + x3 = 6
-x1 + 3x2 + 4x3 = 4
x =
1.0000
-1.0000
2.0000
»solve_examp
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Array Multiplication
•
•
Matrices must have the same dimensions
•
Resulting elements = product of corresponding
elements from the original matrices
Dimensions of resulting matrix = dimensions of
multiplied matrices
» a = [1 2 3 4; 5 6 7 8];
» b = [1:4; 1:4];
» c = a.*b
c =
1
5
4
12
9
21
16
32
c(2,4) = a(2,4)*b(2,4)
Same rules apply for other array operations
»array_mult
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Example: Array Operations
•
In most languages - use loops:
»
tic; for I = 1:1000
Density(I) = Mass(I)/(Length(I)*Width(I)*Height(I));
end; toc
elapsed_time =
0.0500
•
Use TIC and TOC to
measure elapsed time
In MATLAB - use Array Operations:
»
tic; Density = Mass./(Length.*Width.*Height); toc
elapsed_time =
0
Vectorized code is
much faster than loops
»array_examp
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Boolean Operations
Boolean Operators
= = equal to
»
»
Mass = [-2 10 NaN 30 -11 Inf 31];
all_pos = all(Mass>=0)
all_pos =
>
greater than
<
less than
»
~
not
each_pos =
&
and
0
|
or
isempty()
0
»
each_pos = Mass>=0
1
0
1
0
1
1
pos_fin = (Mass>=0)&(isfinite(Mass))
pos_fin =
0
1
0
1
0
0
1
isfinite(), etc. . . .
any()
all()
1 = TRUE
0 = FALSE
»bool_ops
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Exercise: Matrix Operations
•
You are given measured data of current vs.
applied DC voltage for a “black box” circuit
•
Determine the linear resistance of the circuit
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Solution: Matrix Operations
% Assign loaded data:
» A = voltage; b = current;
% Using left division
» x = A\b
Initial Fit
% Using Pseudoinverse
» pseudo_inv_A = inv(A'*A)*A’;
Improved fit
» x = pseudo_inv_A*b
% Repeat using linear data
» indices = find(voltage<8);
» A = voltage(indices); b = current(indices); .....
»mat_ops
(uses: >>mat_ops_setup.m & >>mat_ops.mat)
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
String Arrays
•
Created using single quote delimiter (')
» str
= 'Hi there,'
str =
Hi there,
» str2 = 'Isn''t MATLAB great?'
str2 =
Isn't MATLAB great?
•
Each character is a separate matrix element
(16 bits of memory per character)
str =
•
H
i
t
h
e
r
e
,
1x9 vector
Indexing same as for numeric arrays
»string_array
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
String Array Concatenation
Using [ ] operator:
» str ='Hi there,';
Each row must be
same length
» str1='Everyone!';
Row separator:
semicolon (;)
Column separator:
space / comma (,)
1x9 vectors
» new_str=[str, ' ', str1]
new_str =
1x19 vector
vectors
Hi there, Everyone!
» str2 = 'Isn''t MATLAB great?';
» new_str2=[new_str; str2]
new_str2 =
Hi there, Everyone!
2x19 matrix
Isn't MATLAB great?
For strings of different length:
• STRVCAT
• STR2MAT
» new_str3 = strvcat(str, str2)
new_str3 =
Hi there,
2x19 matrix
Isn't MATLAB great?
(zero padded)
»string_cat
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Working with String Arrays
String Comparisons
• STRCMP - compare whole strings
• STRNCMP - compare first ‘N’ characters
• FINDSTR - finds substring within a larger string
Converting between numeric & string arrays:
• NUM2STR - convert from numeric to string array
• STR2NUM - convert from string to numeric array
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Exercise: String Arrays
• Create a 5x5 magic matrix ("M")
• Use "M" to create a string array which will
display as follows:
» disp(string_array)
5x5 Magic Matrix:
New line character
'A' 'B' 'C' 'D' 'E'
1
17
24
1
8
15
2
23
5
7
14
16
3
4
6
13
20
22
4
10
12
19
21
3
5
11
18
25
2
9
HINT:
Create rows
separately &
concatenate
Tab character
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Solution: String Arrays
» M = magic(5)
» M_string = num2str(M)
» heading = ['5x5 Magic Matrix:', char(10)]
» row0 = [char(9), '''A'' ''B'' ''C'' ''D'' ''E''']
» row1 = ['1', char(9), M_string(1,:)]
» row2 = ['2', char(9), M_string(2,:)]
» row3 = ['3', char(9), M_string(3,:)]
» row4 = ['4', char(9), M_string(4,:)]
» row5 = ['5', char(9), M_string(5,:)]
» string_array = strvcat(heading,row0,row1,row2,row3,row4,row5)
»string_soln
Copyright  1984 - 1998 by The MathWorks, Inc.
Introduction to MATLAB
Multidimensional Arrays
»
»
1
15
9
2
4
3
1
4
1
1
1
1
1
1
0
1
2
3
4
1
0
1
3
6
10
0
1
1
4
10
20
1
0
0
0
0
1
0
0
0
0
0
0
0
A(:,:,2) =
20 30 130
0 100 80
11
1
1
70 60 120
3
4
14 15
1
6 10
0
16
2
3
13
5
11
10
8
9
7
6
12
4
14
15
1
0
16
A(:,:,2) = magic(4)
A(:,:,1) =
Page N
Page 1
A = pascal(4);
10
0
0
0
20
»
A(:,:,9) = diag(ones(1,4));
»mult_dim
Copyright  1984 - 1998 by The MathWorks, Inc.
Download