MATLAB Afslutning Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005
MATLAB Hvorfor? Hvordan?
Et værktøj til tekniske beregninger Analyse og modellering af data Simulering af modeller
Værktøjskasser osv.
Andre muligheder Lommeregner Regneark (Excel) Maple MathCad SAS … Brug det rigtige værktøj til opgaven
Structures v1= struct('Varenavn', 'Papirclips', 'Pris', 19.95) v1 = Varenavn: 'Papirclips' Pris:
En ny stuktur >> v1= struct('Varenavn', 'Papirclips', 'Pris', 19.95) v1 = Varenavn: 'Papirclips' Pris: >>v2 = v1; v2.Varenavn = 'Elastikker'; v2.Pris= 17.50; >>v2 v2 = Varenavn: 'Elastikker' Pris:
En database >> v3 = v1; v3.Varenavn = 'Tape'; v3.Pris= 9.25; v3 v3 = Varenavn: 'Tape' Pris: >> lager = [v1 v2 v3] lager = 1x3 struct array with fields: Varenavn Pris >> lager(2).Pris ans =
En database-operation function pris=findpris(varelager,vare) for v = varelager if strcmp(v.Varenavn,vare) pris= v.Pris; return; end pris = -1 >> findpris(lager,'Tape') ans = m-fil
Data analyse – fiskeskiver
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 ’
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 = M 1 ‘ = p ‘+ X*w 1 ’
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;
Løsning p » global p M w1 » p = [1 1]; » w1 = [1 0.5]; » M = [1.5 0]; » fmin('fz', 0, 2*pi) ans = » ans/pi ans = » M = [0 0]; » fmin('fz', 0, 2*pi) ans = » ans/pi ans =
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 = fz(ans*pi) ans = e-032
Billeder B = imread('image.bmp','bmp') ; » size(B) ans = » image(B)
Billedbehandling » Udsnit = B(101:104, 301:304, :) Udsnit(:,:,1) = Udsnit(:,:,2) = Udsnit(:,:,3) = » image(Udsnit);
Forbrænding 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 % Sandsynlighed for glød i næste trin % afhænger af om naboer er ens, samt en % koefficient f. % Naboer regnes cyklisk.
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;
Simulering P = rand(7, 8) > 0.5; pcolor(P); P = step(P, 0.5); pcolor(P); …
Simpel Ind- og Udlæsning » help iofun File import/export functions. load - Load workspace from MAT-file. save - Save workspace to MAT-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.
Formatteret Ind- og Udlæsning File opening and closing. fopen - Open file. fclose - Close file. Formatted file I/O. fscanf - Read formatted data from file. fprintf - Write formatted data to file....
Formater The format specifier : % [- | + | 0] [Field Width][.Precision] Format Character "-" aligns output left (usually, it's right-aligned). "+" outputs a plus sign for positive numbers (usually, it is supressed). “0” outputs leading zeroes. The field width specifies the overall field length. The precision specifies the length of the fractional part for floating point numbers. If omitted, the default is 6. The format character determines the base type for the formatted values: "d": integer value in decimal format. "f": floating point value in fixed format (xxx.yyyyyy). "e": floating point value in scientific format (0.yyyyyye+zzz). "E": floating point value in scientific format (0.yyyyyyE+zzz). "s": String.
Eksempel fprintf(red_file,'Jordens radius: %9.0f m\n',R); fprintf(red_file,'Refraktionskoefficient: %9.2f\n',k); fprintf(red_file,'\r\n'); fprintf(red_file,' Fra Til V Sd ih sh S d_H\n'); fprintf(red_file,' gon m m m m m\n'); Jordens radius: m Refraktionskoefficient: 0.13 Fra Til V Sd ih sh S d_H gon m m m m m
Eksempel … fprintf(red_file,'%5.0f %5.0f %9.4f %9.3f %9.3f %9.3f %9.3f%9.3f\n',linie);
Nu til Øvelser Saml op på tidligere øvelser Kig på opgave