Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

MATLAB Programmering Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2003 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 2003 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 2003 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 Programstrukturer Et program definerer rækkefølgen for at udføre ordrer. sekvens valg gentagelse (iteration, løkke) kald af underprogram (funktion) afbrydelse

3 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;

4 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

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

6 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

7 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

8 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;

9 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

10 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;

11 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

12 Og så … PRØV DET !

13 Funktionaler (Function-functions) FPLOT(FUN,LIMS) plots the function specified by the string FUN between the x-axis limits specified by LIMS = [XMIN XMAX]. FUN must be the name of an M-file function with variable x such as 'sin(x)', 'diric(x,10)'. plot('sinus(x,17)', [0, 2*pi] ) Sammenlign: x = 0: 0.2 : 2*pi; plot(x, sinus(x,17))

14 Integral » quad('sin', 0, 2*pi) ans = 0 » quad('sinus(x,2)', 0, 2*pi) ??? Can not find function 'sinus(x,2)'. function r = sin2(x) r = sinus(x,2); » quad('sin2', 0, 2*pi) ans = 3.1416

15 Minimum » fmin('sin', 0, 2*pi) ans = 4.7124 » ans/pi ans = 1.5000

16 Løsning af Differentialligninger function xdiff = difflign(t,x) % Differentialligningerne % x(1)'(t) = x(2) % x(2)'(t) = -x(1) % xdiff = [ - x(2) ; x(1) ]; » [t,x] = ode23('difflign', [0,2*pi], [0,1]'); » plot(t,x)

17 Billeder B = imread('image.bmp','bmp') ; » size(B) ans = 1008 886 3 » image(B)

18 Billedbehandling » Udsnit = B(101:104, 301:304, :) Udsnit(:,:,1) = 188 183 176 182 198 182 172 172 188 195 173 159 185 188 169 156 Udsnit(:,:,2) = 183 168 162 172 190 172 169 167 179 185 172 158 179 179 166 151 Udsnit(:,:,3) = 179 163 159 171 187 163 162 163 174 176 167 153 167 170 157 147 » image(Udsnit);

19 Ind- og Udlæsning fra filer » help iofun File import/export functions. load - Load workspace from MAT-file. save - Save workspace to MAT-file. dlmread - Read ASCII delimited file. dlmwrite - Write ASCII delimited file. wk1read - Read spreadsheet (WK1) file. wk1write - Write spreadsheet (WK1) file. Command window I/O clc - Clear command window. home - Send cursor home. disp - Display array. input - Prompt for user input. pause - Wait for user response.

20 Positionsbestemmelse p = [x, y] w 1 = [a,b] -- lokalt A = [ cos(theta) sin(theta) -sin(theta) cos(theta) ] w l GLOBAL = ( p’ + A*w 1 ’)’ p M1?M1? M 1 ‘ = p ‘+ X*w 1 ’

21 Løsningsforsøg p X = (M 1 ‘ - p ‘)/w 1 ’ » p = [1 1]; » w1 = [1 0.5]; » M = [1.5 0]; » (M' - p')/w1' ans = 0.5000 0 -1.0000 0 M 1 ‘ = p ‘+ X*w 1 ’

22 Bedre forsøg M 1 ‘ = p ‘+ X*w 1 ’ X= [ cos(theta) sin(theta) -sin(theta) cos(theta) ] f(theta) = M 1 ‘ - p‘ - X *w 1 ’ Dvs. f(theta) = [ 0 0]’ Husk så at for vektor a gælder: a*a’ = |a| 2 Dvs. Vi kan finde minimum for z(theta) = f(theta) * f(theta)’ function r = fz(theta) global M p w1; X = [cos(theta), sin(theta); -sin(theta), cos(theta)]; f = M' - p' - X*w1'; r = f'*f;

23 Løsning p » global p M w1 » p = [1 1]; » w1 = [1 0.5]; » M = [1.5 0]; » fmin('fz', 0, 2*pi) ans = 1.5708 » ans/pi ans = 0.5000 » M = [0 0]; » fmin('fz', 0, 2*pi) ans = 2.8198 » ans/pi ans = 0.8976

24 Forbrænding Et kulpartikel brænder: - Nogle dele er dækket af en askeflage - Andre dele er glød Hvordan udvikler det sig ?

25 En model function Pnext = step(P,f) % Simulering af forbrænding: emne er matrix P % med glød = 1 % aske = 0 % Sandsynlighed for glød i næste trin % afhænger af om naboer er ens, samt en % koefficient f. % Naboer regnes cyklisk.

26 Algoritmen function Pnext = step(P,f) d = size(P); Pnext = zeros(d); for i = 1:d(1), for j = 1:d(2), n = P(op(i,d(1)), j ); e = P(i, ned(j,d(2)) ); s = P(ned(i,s(1)), j ); v = P(i, op(j,d(2)) ); if (2+n+sy+e+v)*f*rand > 0.5, Pnext(i,j) = 1; end; function r = ned(k,n); r = k-1; if r == 0, r = n; end; function r = op(k,n); r = k+1; if r > n, r = 1; end;

27 Simulering P = rand(7, 8) > 0.5; pcolor(P); P = step(P, 0.5); pcolor(P); …

28 Eksempel function r = fz(x) global M p w1; X = [cos(x), sin(x); -sin(x), cos(x)]; r1 = M' - p' - X*w1'; r = r1'*r1; » global M w1 p » M = [1.5 0] » w1 = [1 0.5] » p = [1 1] » fmin('fz',0,pi)/pi ans = 0.5000 fz(ans*pi) ans = 1.2326e-032


Download ppt "MATLAB Programmering Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2003 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