old simple class notes

advertisement
math403
Introductory MATLAB
Zheng Chen
Spring 2010
1
Environment of matlab
•
•
•
•
3 windows:
Command window
History window
Editor window
2
Executable file form
• Files of form .m for functions and main
programs
• All files to solve one problem should be in one
directory
• Pwd, cd, ls, cd.., cp, mkdir, rmdir,
• Help while
3
Matlab as a calculator
•
•
•
•
•
•
2+3/4.0*5+(-2)^3+ log(3.4)
Sin(pi/4);
1.2+3i
Format of numbers
Format long
Format short
4
variables
•
•
•
•
•
X=3-2^3;
Assign the value to x
Y=x+4; assign the value to y
Pi=3.1415…, eps=2.2204e-16
I, j have the value sqrt(-1);
5
Built in functions
•
•
•
•
Trig
Log
Sqrt(x);
exp
6
vectors
•
•
•
•
•
•
•
•
Row vector: V=[1,2 3]
U=[-5, 6, 12]
V+/-U;
W=[7,8];
Cd=[2*w, 3V];
V(2); it is the same as V(1,2);
Column vector w=[7;8;9]
W(2) =w(2,1);
7
Colon notations
• V=1:8;
• V=3:7;
• V=.32:0.1:-2
• Extracting
• A=[1,2 ,3 ,4,5 ,6 ,7 ,8]
• What is the b=A(4:7) and c=A(1:3:7)
8
transpose
• Row vector to column vector or vice verse
• General matrices with size m*n
• W’ is of size n*m if W has size m*n
9
Scalar product of vectors u*v
•
•
•
•
•
Scalar product:
u=[a, b, c], v=[l, m,n]’
In matlab, u*v=al+bm+cn; it is a number
sqrt(u*u’) ; and norm(u);
Recall what is the meaning of norm?
10
Dot product .*
• u=[a, b, c], v=[l, m, n]
• u.*v is a vector with the same size as u and v;
• simply multiply the corresponding elements of
two vectors
• u.*v named as dot product
11
Dot Division ./
• ./ is defined to give element by element
division
• u=[a, b, c], v=[l, m, n];
• u./v=[a/l , b/m, c/n];
• Try 1./[2, 3, 4];
12
Dot Power of Arrays (.^)
• u = [ 10, -11, 12];
• u.^2;
• .* ; ./ ; .^ mean component wise
operations
13
Functions applied to arrays
• u = [ 10, 11, 12];
• sin(u), sqrt(u);
14
Matrices –
Two-Dimensional Arrays
• Input: a=[1 2 3; 5 6 7];
• or a= [1 2 3
5 6 7];
b=[1 2; 3 4; 5 6];
• size(a) = dimensions of matrix, that is, number
of rows and number of columns
• size(a) is itself one vector with size 1, 2.
15
Special Matrices
• ones(2,3); zeros(2,3); eye(3);
• d = [-3 4 2], D = diag(d);
• given F = [0 1 8 7; 3 -2 -4 2; 4 2 1 1],
find diag(F);
• c=[0 1; 3 -2; 4 2]; x=[8;-4;1];
find g = [c x] (extra column)
find h=[c; k] (stacked c and k) where k=[7 8]
• Try spy(F), grid for fun
16
Extracting Bits of Matrices
• J =[ 1 2 3 4
5 6 7 8
9 0 3 11];
Find J(2,4); J(:,2); J(3,:); J(1:2, 2:4);
17
Dot product of matrices (.*)
• The dot product works as for vectors:
corresponding elements are multiplied
together
18
Matrix{vector products
• An (m x n) matrix times an (n x k) matrix is a
(m x k) matrix.
• A = [5 7 9; 1 -3 -7]; x = [8; -4; 1]; find A*x
• Practice: choose two matrices A and B, find
A*B, (A*B)’ and B’*A’
• Practice: choose matrices A, B and C, find
A*(B*C) and (A*B)*C
19
Sparse matrices
•
•
•
•
•
•
•
•
>> i = [1, 3, 5]; j = [2,3,4];
>> v = [10 11 12];
>> S = sparse (i,j,v); T=full(S);
save memory, only save diagonal elements
>> n = 5;
>> l = -(2:n+1)'; d = (1:n )'; u = ((n+1):-1:2)';
>> B = spdiags([l d u],-1:1,n,n);
>> full(B) (%l,d,u are column vectors)
20
System of linear equations
• Ax=b
• x = A \ b; (“\backslash")
• try inv(A) and inv(A)*b
21
Overdetermined system
of linear equations
• generally speaking, Ax=b has no solution
when # of equations > # of unknowns
• r = Ax-b;
• Least square solution: make r minimum
• normal equations:
Cx = d; where C = A’A and d = A’b
• matlab gives the solution in its routine library
x = A\b
22
• A =[0.0000 0.0000; 0.0001 0.0000;
0.0013 0.0000; 0.0030 0.0000; 0.0075 0.0001]
• b = [5 50 500 1000 2000];
• X=A\b’
23
For Loop
• for i=1:10
disp([i i^2 i^3])
end
• for i=1:4
for j=1:4
disp([i j i^2+j^2])
end
end
24
example
• for i=1:4
for j=i:4
disp([i j i^2+j^2])
end
end
25
example
• sum=0.0; bigsum=0.0;
• for i=i:1000
bigsum =bigsum+1/i;
end
for i=i:1000
sum =sum+1/i^2;
end
disp([ bigsum sum])
26
Questions
• What is the sum of 1+1/2+1/3+… until the
term where 1/n<=10^(-3) ?
• How many terms we have in the expansion of
1+1/2+1/3+… if the partial sum is just >=2 ?
27
While loop
• % format long
i = 1; % start the counter at 1
total = 0; % initialize the sum
while(1/i >= 1e-3)
% condition
total = total + 1/i;
% update the sum
i=i+1;
end
disp([i 1/i total])
% display the number of
loops, 1/i, and the current sum
28
While loop(condition changed)
i = 1; % start the counter at 1
total = 0; % initialize the sum
while(total <= 2) % condition changed
total = total + 1/i
% update the sum
i= i+1
end
% disp([I total])
disp([i-2 total-1/(i-1)])
% display the
number of terms, and the final sum
29
Example to use while loop
• Problem: what is the greatest value of n that can
be used in the sum
1+(1/2)^2+ (½)^2 +… + (1/n)^2
and get a value of less than 2?
S = 1; n = 1;
while S+ (1/(n+1))^2 < 2
n = n+1; S = S + (1/n)^2;
end
• [n, S]
30
Logicals
• true = 1, false = 0
• If x<1.0
elseif
31
if...then...else...end
• if logical test 1
commands to be executed if test 1 is true
elseif logical test 2
commands to be executed if test 2 is true
but test 1 is false
...
end
32
• R = input('What is your name:','s')
if R=='cuana'
'today your hw: read the notes'
else
'bye'
end
33
• Problem: find out all triples of integers, at
most 20, as the 3 sides of one right triangle,
like 3, 4, 5;
34
Using for and if loop
for i=1:20
for j=i:20
for k=j:20
if k^2==i^2+j^2
[i, j, k]
end
end
end
end
35
Functions defined by yourself
•
•
•
•
•
% Compute the area of a triangle whose
% sides have length a, b and c.
% Inputs: a,b,c: Lengths of sides
% Output: A: area of triangle
% Usage: Area = area(2,3,4);
function [A] = area(a,b,c)
s = (a+b+c)/2;
A = sqrt(s*(s-a)*(s-b)*(s-c));
36
• Problem: find the are of one triangle with
given 3 numbers, you need to decide whether
these three numbers can be the 3 sides of one
triangle.
for example, 3, 4 and 5 are 3 sides of one
triangle, 3, 4 and 8 are not 3 sides of one
triangle.
given a<=b<=c , criteria for them to be 3 sides
of a triangle: c<a+b & a> c-b.
37
Functions countinue
• function [A] =triValue(a,b,c)
s = (a+b+c)/2;
A = sqrt(s*(s-a)*(s-b)*(s-c));
• save the file as triValue.m
• Another function: two results are provided
function [cir, A] =triValue(a,b,c)
s = (a+b+c)/2;
cir=s*2;
A = sqrt(s*(s-a)*(s-b)*(s-c));
38
• function area=tri_area(a, b, c)
dd=min([a,b,c]);
aa=max([a,b,c]);
b=a+b+c-dd-aa;
a=aa; c=dd;
if c>(a-b) & b+c>a
'the given numbers are 3 sides of one triangle, and the area is: '
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c))
else
'the given numbers are not 3 sides of one triangle'
end
39
Another example of functions
• Fibonnaci sequence is dened by
f1  0; f 2  0; f n  f n 1  f n  2
n=3,4, …
input: integrer
output: f n
40
Method 1: File Fib1.m
function f = Fib1(n)
% Returns the nth number in the
% Fibonacci sequence.
F=zeros(1,n+1);
F(2) = 1;
for i = 3:n+1
F(i) = F(i-1) + F(i-2);
end
f = F(n);
41
function f = Fib2(n)
% Returns the nth number in the
Fibonacci sequence.
if n==1
f = 0;
elseif n==2
f = 1;
else
f1 = 0; f2 = 1;
for i = 2:n-1
f = f1 + f2;
f1=f2; f2 = f;
end
end
42
Recursive programming
function f = Fib3(n)
% Returns the nth number in the
% Fibonacci sequence.
if n==1
f = 0;
elseif n==2
f = 1;
else
f = Fib3(n-1) + Fib3(n-2);
end
43
% The final version uses matrix powers. The vector y has
two components,
 fn 
y  

 f n 1 
% Returns the nth number in the Fibonacci sequence.
function f = Fib4(n)
A = [0 1;1 1];
y = A^n*[1;0];
f=y(1);
44
Which method you like most?
• Which algorithm is most efficient?
• method 3(recursive programming) no efficient
45
More Built-in Functions
•
•
•
•
•
x = pi*(-1:3), round(x)
Try fix(x); floor(x); ceil(x); sign(x), rem(x,3)
A = [1:3; 4:6; 7:9];
s = sum(A), ss = sum(sum(A));
x = [1.3 -2.4 0 2.3], max(x), max(max(A));
min(x);
• y = rand, Y = rand(2,3)
46
Use rand
% simulates "n" throws of a pair of dice
% Input: n, the number of throws
% Output: an n times 2 matrix, each row
% referring to one throw.
% Useage: T = dice(3)
function [d] = dice(n)
d = floor(1 + 6*rand(n,2));
%% end of dice
47
Function ‘find’
• A = [ -2 3 4 4; 0 5 -1 6; 6 8 0 1];
• k = find(A==0);
To interpret the result we have to recognize
That “find" first reshapes A into a column vector;
this is equivalent to numbering the elements of A
by columns as in
1 4 7 10
2 5 8 11
3 6 9 12
Now try n = find(A <= 0); and A(n)
48
• A=[1 4 7 10
2 5 8 11
3 6 9 12];
n = find(A <= 0);
Try A(n);
Try m = find( A' == 0);
49
plot
•
•
•
•
•
linspace (a,b,n) producing n+1 points;
N = 10; h = 1/N; x = 0:h:1; doing the same.
X=linspace(0,1,110);
y = sin(3*pi*x);
Plot(x,y)
50
Plot with title
• Using string inside of ‘ ’
title('Graph of y = sin(3pi x)')
xlabel('x axis')
ylabel('y-axis')
grid
off (% off grid)
51
Plot-line styles & color
• plot(x,y,'w-');
• Colors
y
yellow .
m
magenta
c
cyan
R
red
g
green
b
blue
w
white
k
black
line styles
point
o
circle
x
x-mark
+
plus
solid
*
star
:
dotted
-.
dashdot
-dashed
• Try plot(x,y,'b*‘)
52
• plot(x,y,'w-'), hold on
• plot(x,y,'gx'), hold off
• save or print the graphs in .eps form
• clf, N = 100; h = 1/N; x = 0:h:1;
• y = sin(3*pi*x); plot(x,y)
• axis([-0.5 1.5 -1.2 1.2]), grid
53
subplot
for n = 1:8
subplot(2,4,n), plot(x,sin(n*pi*x))
end
54
Characters, Strings and Text
• %The ability to process text in numerical
processing is useful for the input and output
of data to the screen or to disk-les.
• The assignment, t1 = ‘abc ‘, t2 = ‘efghijk‘;
• t3 = [t1,t2];
• T3 is abcdefghijk;
55
Conversion among strings,
integers and real numbers
• 'str2num‘, 'int2tr' and 'num2str‘;
• Example:
N = 11:20; ncube = N.^2;
['The perfect squares of integere from ',
int2str(ncube(1)),' to ', int2str(ncube(10)), '
are in the following: ']
num2str(ncube)
% fprintf(num2str(ncube))
% disp(ncube)
56
Plotting Surfaces
• Plot the surface of f(x; y) = (x -3)^2-(y-2)^2
for 2<= x <= 4 and 1<= y<= 3.
[X,Y] = meshgrid(2:.5:4, 1:.5:3);
Z = (X-3).^2-(Y-2).^2;
mesh(X,Y,Z)
57
f=-xyexp(-2(x^2+y^2)), -2<=x,y<=2;
[X,Y] = meshgrid(-2:.1:2,-2:.2:2);
f = -X.*Y.*exp(-2*(X.^2+Y.^2));
figure (1)
mesh(X,Y,f), xlabel('x'), ylabel('y'), grid
figure (2), contour(X,Y,f)
xlabel('x'), ylabel('y'), grid, hold on
58
To locate the maxima of the
“f” values on the grid
fmax = max(max(f))
kmax = find(f==fmax)
Pos = [X(kmax), Y(kmax)]
plot(X(kmax),Y(kmax),'*')
text(X(kmax),Y(kmax),' Maximum‘)
% the ‘find’ above gives the index numbers of
matrices X and Y
59
timing
% Matlab allows the timing of sections of code
by providing the functions tic and toc.
tic
x=0;
for j=1:1000
x=x+j^3;
end
toc
60
Reading and Writing
Data Files
In a file 'table.dat' , data is as following:
1 56
2 58
3 65
4 67
fid = fopen('table.dat','r');
% action is reading, file identfier fid
a = fscanf(fid,'%1d%2d');
% one with 1 digits and one with 2 digits
fclose(fid); % close the file with file identier fid.
A = reshape(a,2,5)';. % change the size of a to 2times5
61
HW and projects
• Pob1: using the mid point method to find the
approximate solution of any equation in one
interval for example: 4x+3sin(pi/2*x)-5=0 in
[0,1]
• Pob2: using Newton’s method to find the
approximate solution of any equation in one
interval for example: 4x+3sin(pi/2*x)-5=0 in
[0,1]
62
• Pob3: find the determinant value of any given
matrix of size n by n. (your program should ask
people in input the matrix row by row)
• Pob4: using echelon method to find the solution
of any linear system with 2 unknowns; your
program should ask people to input the
coefficients of the system and the program
should be valid to any such system, in other
words, your program should contain 3 possible
situations of solutions.
63
• Given 3 points, find the distance from the
third point to the line though the other two
points. Your program should ask the people
input the three points or a matrix of size 3by2
64
Download