MATLAB Repetition og Udførelse af programmer Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005 >>mit_modul minf.m … minf(a) … mit_modul.m function r = minf(x) … r= size(x) …
MATLAB Hovedvindue
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
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
MATLAB-maskinen Script » A = [9,7] ans = … » B = 25i ans = … … Matlab.exe Workspace A B Lager (memory) Procesenhed Program
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']
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)
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’ =
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] = ?
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”
Og så er der skalering A* 5 A/3 A + 5 A
Programstrukturer Et program definerer rækkefølgen for at udføre ordrer. sekvens ordre ; ordre … valg if ( ) … end; switch … gentagelse (iteration, løkke) for …, while … kald af underprogram (funktion) f( … ) afbrydelse break, return
Funktioner function y = sinus(x,k) % Beregn sin(x).^k y = sin(x).^k
MATLAB-maskinen Script » A = [9,7] ans = … » B = 25i ans = … » sinus(A,6) … Matlab.exe Workspace A B Lager (memory) Procesenhed Program
Funktionskald Script » A = [9,7] ans = … » B = 25i ans = … » sinus(A,6) … Matlab.exe Workspace A B function y = sinus(x,k) Workspace x init A k init 6 y init ?
Funktionskald -afslutning Script » A = [9,7] ans = … » B = 25i ans = … » sinus(A,6) … Matlab.exe Workspace A B function y= sinus(x,k) Workspace x init A k init 6 y = … ans = y
Funktioner function resultat = kvadratrod(a) % Beregn kvadratrod af a ved bisektion low = 0; high = a; while (high - low) > 2*eps, mid = (high+low)/2; if mid*mid > a, high = mid; else low = mid; end end; resultat = (high+low)/2; kvadratrod(4) kvadratrod(1000) ans = » ans*ans
Sammensat returværdi function [fundet,resultat] = findindeks(e,a) % finder index for element e i vektor a, hvis det findes fundet = 0; for i=1:length(a), if a(i) == e, fundet = 1; break; end; if fundet, resultat = i; else resultat = 0; end; [b,c] = findindeks(7,a) b = 0 c = 0
Rekursion function resultat = kvadratrod(a) % Beregn kvadratrod af a ved bisektion resultat = trin(0,a+1,a); function r = trin(low,high,b) % kvadratrod b er mellem low og high if (high - low) <= 2*eps, r = (high+low)/2; return; end; mid = (high+low)/2; if mid*mid > b, r = trin(low,mid,b); else r = trin(mid,high,b); end;
Funktionskald - rekursion Script »f(8) Matlab.exe Workspace ans = ? function r = f(x) r = f(x-1) Workspace x init 8 r init ? function r = f(x) r = f(x-1) Workspace x init 7 r init ? …
Og så … PRØV DET !