MATLAB Indledning Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2002
Et værktøj til tekniske beregninger Analyse og modellering af data Simulering af modeller Eksempler: Fiskeskivers størrelse Beregning af Ukrudtstæthed Simulering af dynamisk system Simulering af forbrænding
Fiskeskivers størrelse Skiverne skal pakkes i pakker af ca. samme vægt. Hvad er vægten af de næste skiver?
Målte Data Skivevægt (gram) for Fisk1: Skivevægt (gram) for Fisk2:
Graf
En bedre graf Kan vi tilnærme med et andengradspolynomium ?
Det ser da ikke så galt ud
Ukrudtstæthed
Styring
Forbrænding Et kulpartikel brænder: - Nogle dele er dækket af en askeflage - Andre dele er glød Hvordan udvikler det sig ?
Og nu til … HVORDAN ?
MATLAB Hovedvindue
Demo
Helpdesk
Matricen Et rektangulært talsæt: A = » A = [1 2 3; 4 5 6; 7 8 9] Dimensioner: Antal rækker x Antal søjler » size(A) ans = 3 3
Talværdier reelle tal komplekse tal » B = [1 2.1 pi; 3E1-2i j-1 6] B = i i » size(B)
Vektor Rækkevektor – 1 x n Søjlevektor – n x 1 » C = [1 2 3]; D = [1;2;3] C = D = 1 2 3
Skalar Hvad er en vektor af længde 1? En 1 x 1 matrice » a = 5 a = 5 » size(a) 1 1 » length(a) 1
Hvor er matricen ? Skiverne skal pakkes i pakker af ca. samme vægt. Hvad er vægten af de næste skiver?
Hvor er matricen ? Skivevægt (gram) for Fisk1: Skivevægt (gram) for Fisk2:
Hvor er Matricen ? Et kulpartikel brænder: - Nogle dele er dækket af en askeflage - Andre dele er glød Hvordan udvikler det sig ?
En model function Pnext = step(P,f) % Simulering af forbrænding: emne % er matrix P % med glød = 1 % aske = 0
Delmatricer A(2:3,1:2) A(2,2) A(1,:) A(1:2:3,1:2:3) A(pi,pi) A = » A(2:3,1:2) » A(2,2)5 » A(1,:)1 2 3 » A(1:2:3,1:2:3) » A(pi,pi) Warning: Subscript indices must be integer values. 9
Hvor er matricen ?
Billedbehandling » Udsnit = B(101:104, 301:304, :) Rød Grøn Blå
Transponering Transponering af A A’ Ombytter rækker og søjler » D = [ ; ] D = » D' » A'
Specielle Matricer Nulmatrix Enhedsmatrix Etmatrix Tom matrix Tilfældige tal … Se help elmat » zeros(2,3) » eye(2,3) » ones(2,3) » A = [] » size(A) 0 0 » rand(2,3)
Bygning af Matricer a = » A = [a ; a] » B = [A, [4 ;4]] » C = [A ; a] » D = [A, a] ??? All matrices on a row in the bracketed expression must have the same number of rows. » D = [A, a'] ??? All matrices on a row in the bracketed expression must have the same number of rows. » D = [C, a']
Hvor er Matricen ?
Kinematik p = [x, y]’ w 1 = [a,b] ‘ A = [ cos(theta) sin(theta) ; -sin(theta) cos(theta) ] w l GLOBAL = (p + A * w 1 )’
Og nu … + - * / …
Addition og Subtraktion A = B = A+B = ? A-B = ? A+B’ = ? ??? Error using ==> + Matrix dimensions must agree. B’ =
Multiplikation A = B = A.* B = ? A * B = ? A * B’ = ? ??? Error using ==> * Inner matrix dimensions must agree B’ =
Skalarprodukt a = b = a * b = ? 10 + * * * +
Matrix-multiplikation A = A * B’ = A * B = ? A(1,:) * B(:,1) A(1,:) * B(:,2) A(2,:) * B(:,1) A(2,:) * B(:,2) [m x n] * [n x k] = [m x k] B’ = ??? Error using ==> * Inner matrix dimensions must agree.
Lidt gymnastik A = [1 2 3] A* A’ = ? A’* A = ? [A; A ] * A’= ? A * [ A; A; A] = ?
Hvordan bruges det ? p = [x, y] w 1 = [a,b] -- lokalt A = [ cos(theta) sin(theta) -sin(theta) cos(theta) ] w l GLOBAL = (p’ + A * w 1 ’)’
Division A = B = A./ B = ? A / B = ? A \ B = ?
Matrix-Division X = A / B betyder at X * B = A Y = A \ B betyder at A * Y = B » X = A/B X = » X*B » Y = » A*Y \ “op i”
Hvordan bruges det ? p = [x, y] w 1 = [a,b] -- lokalt A = [ cos(theta) sin(theta) -sin(theta) cos(theta) ] w l GLOBAL = (p’ + A * w 1 ’)’ w 1 ‘ = A \ (w l GLOBAL ‘ – p’)
Et eksempel p =[p1,p2] q =[q1,q2] Hvad er ligningen for linjen ? y = ax + b – find a og b [p2 ; q2] = [p1 1 ; q1 1] * [a ; b] [p1 1; q1 1] \ [p2 ; q2] = [a ; b]
En løsning [p1 1; q1 1] \ [p2 q 2]’ = [a b]’ » p = [0 0]; q = [1 1]; » A = [p(1) 1; q(1) 1]; a = [p(2) q(2)]; » x = A\a' x = 1 0 findlinje.m » p = [1 1]; q = [3,4]; » findlinje x = » p = [1 1]; q = p; findlinje Warning: Matrix is singular to working precision. x = Inf
Overbestemthed p =[p1,p2] q =[q1,q2] Find den bedste løsning ! y = ax + b [p2; q2; r2] = [p1 1 ; q1 1; r1 1] * [a ; b] r =[r1,r2]
Bedste løsning [p1 1; q1 1; r1 1] \ [p2; q2; r2] = [a ;b] » p = [0 0]; q = [1 1]; r = [2 1] » A = [p(1) 1; q(1) 1; r(1) 1]; a = [p(2) q(2) r(2)]; » x = A\a' x =
Polynomier [a n a n-1 a n-2 … a 1 a 0 ] * [x n x n-1 x n-2 … x 1 ]’ » roots([1 -2 1]) ans = 1 » roots([ ]) ans = i i » roots([ ]) ans = i i
» p2 = [1 -2 1]; » p3 = [ ]; » p4 = [ ]; » x = 0.6:0.05:1.4; » plot(x,polyval(p2,x), x, polyval(p3,x), x,polyval(p4,x), x,polyval([0],x) ) Undersøgelse
Og så er der skalering A* 5 A/3 A + 5 A
Andre Operationer » A^2» A*A » hilb(2) » A * hilb(2) == hilb(2) *A » A * hilb(2) » hilb(2) * A
Næste gang … Programmer: FOR …, IF …