Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

MATLAB Programmering Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005 d = size(s); for k = 1:d(1), for n = 1:d(2), if (s(k,n) < 0) r(k,n)

Lignende præsentationer


Præsentationer af emnet: "MATLAB Programmering Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005 d = size(s); for k = 1:d(1), for n = 1:d(2), if (s(k,n) < 0) r(k,n)"— Præsentationens transcript:

1 MATLAB Programmering Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005 d = size(s); for k = 1:d(1), for n = 1:d(2), if (s(k,n) < 0) r(k,n) = -1; else r(k,n) = 1; end; end; end

2 Hvor er matricen ? Skiverne skal pakkes i pakker af ca. samme vægt. Hvad er vægten af de næste skiver?

3 Hvor er matricen ? Skivevægt (gram) for Fisk1: 6 9 13 16 22 24 26 27 27 28 28 28 27 29 31 29 29 32 26 27 30 28 30 28 27 27 25 25 23 23 22 20 25 18 16 15 13 11 Skivevægt (gram) for Fisk2: 3 5 7 6 12 13 11 11 14 14 16 19 23 27 28 29 27 28 31 29 35 32 33 26 26 32 30 28 29 26 35 21 28 21 21 26 7 21 31 31 26 21 16 11 8 11 4 5 3 7 10

4 Tilnærmelse med polynomium

5 Et simplere 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]

6 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 = 1.5000 -0.5000 » p = [1 1]; q = p; findlinje Warning: Matrix is singular to working precision. x = Inf

7 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]

8 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 = 0.5000 0.1667

9 Programstrukturer Et program definerer rækkefølgen for at udføre ordrer. sekvens valg gentagelse (iteration, løkke) kald af underprogram (funktion) afbrydelse

10 Sekvens x = 0:9 A = [x ; x; x] C = A * A' D = A'* A x = 0:9; A = [x ; x; x]; C = A * A'; D = A'* A;

11 Valg IF expression statements ELSEIF expression statements ELSE statements END a = [1 2 4]; b = 1; if a... b = a - 1;... end; if b... b = a - 1;... elseif a > 1... b = a - 2;... else... b = 0;... end

12 Multivalg s = size(A); switch s(1)+s(2) case 0, disp('nulmatrix'); case 2, disp('skalar'); case 1, disp('1 x 0 ?'); otherwise, if s(1) == 1 | s(2) == 1 disp('vektor'); else disp('matrix'); end A = [] … A = 1 … A = [1 2] … A = [1; 2] … A = [1 2; 4 3]

13 Iteration (over søjler i vektor) FOR variable = expr, statements END for i = 1: 32, x(i) = i*0.2; y(i) = sin( x(i) ).^19; end for h = [1 2 3; 5 6 7], disp(h); end for k = [1 3 5 7 11 13], y = sin( x ).^k; plot(x,y); end for m= 5, b = m; end

14 Generel Iteration WHILE expression, statements END % beregn kvadratroden af a % low = 0; high = a+1; while (high - low) > 2*eps, end; resultat = (high+low)/2; mid = (high+low)/2; if mid*mid > a, high = mid; else low = mid; end

15 Afbrydelse % 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;

16 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) 2.0000 kvadratrod(1000) ans = 31.6228 » ans*ans 1000.0000

17 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

18 Rekursion function resultat = kvadratrod(a) % Beregn kvadratrod af a ved bisektion resultat = trin(0,a,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;

19 Og så … PRØV DET !


Download ppt "MATLAB Programmering Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005 d = size(s); for k = 1:d(1), for n = 1:d(2), if (s(k,n) < 0) r(k,n)"

Lignende præsentationer


Annoncer fra Google