Presentation laddar. Vänta.

Presentation laddar. Vänta.

Per Lindström Inst. För Datavetenskap, UmU MATLAB MATrix LABoratory avancerad ”räknedosa”  utvecklingsmiljö och “programmeringsspråk” visualisering av.

Liknande presentationer


En presentation över ämnet: "Per Lindström Inst. För Datavetenskap, UmU MATLAB MATrix LABoratory avancerad ”räknedosa”  utvecklingsmiljö och “programmeringsspråk” visualisering av."— Presentationens avskrift:

1 Per Lindström Inst. För Datavetenskap, UmU MATLAB MATrix LABoratory avancerad ”räknedosa”  utvecklingsmiljö och “programmeringsspråk” visualisering av data  avancerad grafik 1 Mom 3, 5DV104, 5DV105 HT09

2 Stefan Johansson Department of Computing Science, Umeå University MATLAB 2 Mom 3, 5DV104, 5DV105 HT09

3 Per Lindström Inst. För Datavetenskap, UmU Användbara kommandon help kommando – visar hjälptext i kommandofönstret doc – öppnar Matlab-dokumentationen who/whos – listar variabler format – anger formatet på utskriften clear all – ta bort alla definierade variabler 3 Mom 3, 5DV104, 5DV105 HT09

4 Per Lindström Inst. För Datavetenskap, UmU Språket - kommandosyntaxen  liknar ”matematik” med C syntax  stor uppsättning kommandon och funktioner - avancerade algoritmer - ursprungligen inriktat mot linjär algebra  enkelt konstruera egna program/script och funktioner (M-filer) 4 Mom 3, 5DV104, 5DV105 HT09

5 Per Lindström Inst. För Datavetenskap, UmU Variabler m.m.  ingen variabeldeklaration - variabler definieras genom tilldelning  den grundläggande datatypen är double (normalt 16 decimaler) - elementen är i de flesta fall reella (kan vara komplexa)  det grundläggande dataformatet är matriser  1×1-matriser kallas skalärer  case-sensitive 5 Mom 3, 5DV104, 5DV105 HT09

6 Per Lindström Inst. För Datavetenskap, UmU …variabler m.m.  resultat lagras i ans (om ingen tilldelning)  tilldelningar sker med = >> A = 7.5*2 (resultatet i A) A = 15 >> 7.5*2 (resultatet i ans) ans = 15  semikolon undertrycker utskrifter  kommentarer inleds med % och räcker resten av raden 6 Mom 3, 5DV104, 5DV105 HT09

7 Per Lindström Inst. För Datavetenskap, UmU : operatorn start : steg : stopp  ger en följd av värden  till exempel 1:2:9 ger vektorn [ ] start : stopp  steget är 1 x = -pi/2:pi/30:pi/2  ger en radvektor 7 Mom 3, 5DV104, 5DV105 HT09

8 Per Lindström Inst. För Datavetenskap, UmU Grafik- 2D  plot - ritar ut en mängd av ordnade talpar (punkter, linjer, färger)  fplot - graf till funktion i en variabel  hold - håller kvar aktuellt grafikfönster, så att flera figurer kan ritas i samma fönster  olika kommandon för text i grafikfönster - xlabel, ylabel, title,... 8 Mom 3, 5DV104, 5DV105 HT09

9 Per Lindström Inst. För Datavetenskap, UmU Elementoperationer x = linspace(0,1); % OBS! Radvektor n=2; y = x.^n.*exp(x); plot(x,y,'k') n=3; hold on plot(x, x.^n.*exp(x)) 9 Mom 3, 5DV104, 5DV105 HT09

10 Per Lindström Inst. För Datavetenskap, UmU Kod direkt i kommandofönstret >>x = linspace(0,1);% OBS! Radvektor >>n=2; >>y = x.^n.*exp(x); >>plot(x,y,'k'); >>n=3; >>hold on >>plot(x, x.^n.*exp(x)) >> title('x^n*exp(x) för n=2 och n=3') >> xlabel('x-axeln') >> ylabel('y-axeln') >> axis([ ]) >> v=axis; >> plot([v(1) v(2)],[0 0]) %Rita y=0 >> plot([0 0], [v(3) v(4)]) %Rita x=0 10 Mom 3, 5DV104, 5DV105 HT09

11 Per Lindström Inst. För Datavetenskap, UmU Slutlig figur (som Figure 1) 11 Mom 3, 5DV104, 5DV105 HT09

12 Per Lindström Inst. För Datavetenskap, UmU Subplottar %Test subplot() by plotting different functions %in different plot windows % x=linspace(0,1); for n=0:10 y=x.^n.* exp(x); subplot(4,3,n+1) plot(x,y) nchar=num2str(n); title(strcat('x^n*exp(x) where n= ', nchar)) end 12 Mom 3, 5DV104, 5DV105 HT09

13 Per Lindström Inst. För Datavetenskap, UmU Subplottar 13 Mom 3, 5DV104, 5DV105 HT09

14 Per Lindström Inst. För Datavetenskap, UmU Funktioner  en funktion ̶ en fil - om en fil innehåller flera funktioner kan endast den första anropas, de andra är interna funktioner  första kommandoraden skall innehålla ordet function - (annars en kommandofil/script/huvudprogram) - function [utparametrar] = namn(inparametrar)  noll, en eller flera in-/utparametrar – värdeparametrar  anropas med: [utparametrar] = filnamn(inparametrar) - ger funktionen samma namn som filen  de första kommentarraderna (fram till blankrad eller första kommandorad) skrivs ut vid >> help filnamn 14 Mom 3, 5DV104, 5DV105 HT09

15 Per Lindström Inst. För Datavetenskap, UmU Mata in i editorn och spara myf() på fil namn myf.m function y = myf(x) %Evaluate f(x)=sin(x)+x^3-x^2+1.5 %Call: y=myf(x) % y=sin(x)+x.^3-x.^2+1.5; Skriv i kommandofönstret >> help myf Evaluate f(x)=sin(x)+x^3-x^2 Call: y=myf(x) >>t=-2:0.1:2; >>y=myf(t); >>plot(t,y) 15 Mom 3, 5DV104, 5DV105 HT09

16 Per Lindström Inst. För Datavetenskap, UmU Plot av: sin(x)+x^3-x^ Mom 3, 5DV104, 5DV105 HT09

17 Per Lindström Inst. För Datavetenskap, UmU Elementära matematiska funktioner help elfun Elementary math functions. Trigonometric. sin - Sine. sind - Sine of argument in degrees. sinh - Hyperbolic sine. asin - Inverse sine. asind - Inverse sine, result in degrees. asinh - Inverse hyperbolic sine. cos - Cosine. Och många fler….. 17 Mom 3, 5DV104, 5DV105 HT09

18 Per Lindström Inst. För Datavetenskap, UmU Problemet måste definieras i en funktion help funfun Function functions and ODE solvers. Optimization and root finding. -fminbnd Scalar bounded nonlinear function minimization. -fminsearch Multidimensional unconstrained nonlinear minimization, -fzero - Scalar nonlinear zero finding. Och många fler…….. >> help fzero FZERO Scalar nonlinear zero finding. X = FZERO(FUN,X0) tries to find a zero of the function FUN near X0, if X0 is a scalar. 18 Mom 3, 5DV104, 5DV105 HT09

19 Per Lindström Inst. För Datavetenskap, UmU Prova använda fzero() >> help myf Evaluate f(x)=sin(x)+x^3-x^2+1.5 Call: y=myf(x) >> xzero=fzero('myf',0.9) xzero = >> myf(xzero) ans = e Mom 3, 5DV104, 5DV105 HT09

20 Per Lindström Inst. För Datavetenskap, UmU S.k. anonyma funktioner FUNHANDLE constructs an anonymous function and returns a handle to that function. >> format short >> %Def. av anonym >> fh(-2); >> t=-2:0.1:2; >> y=fh(t); >> plot(t,y) >> tzero=fzero(fh,1.3) tzero = >> fh(tzero) ans =4.4409e Mom 3, 5DV104, 5DV105 HT09

21 Per Lindström Inst. För Datavetenskap, UmU X^2-2 i [-2..2] 21 Mom 3, 5DV104, 5DV105 HT09

22 Per Lindström Inst. För Datavetenskap, UmU Matriser tilldelning  omges av hakparenteser [ ]  tilldelning sker radvis  blank eller komma mellan elementen  rader i matrisen skiljs med semikolon eller ny rad värdet av en variabel  variabelns namn följt av retur 22 Mom 3, 5DV104, 5DV105 HT09

23 Stefan Johansson Department of Computing Science, Umeå University Skapa en matris 23 Mom 3, 5DV104, 5DV105 HT09

24 Stefan Johansson Department of Computing Science, Umeå University Enstaka element i matrisen adresseras med rad- resp. kolumnindex 1,2,…. variabelnamn(radindex,kolumnindex) A(1,3) Observera! skillnad mellan tilldelning och adressering 24 Mom 3, 5DV104, 5DV105 HT09 A=[1 5;10 15;-2 6] ger A (3*2)-matris A(1,1)=100 ändrar (1,1)-elementet

25 Stefan Johansson Department of Computing Science, Umeå University Del av matrisen i:te radenA(i,:) j:te kolumnenA(:,j) DelmatrisA(i:j,k:l) alla 25 Mom 3, 5DV104, 5DV105 HT09

26 Per Lindström Inst. För Datavetenskap, UmU Att skapa matriser ones(n) n × n-matris med ettor ones(m,n) m × n-matris med ettor zeros(n) n × n-matris med nollor eye(n) en enhetsmatris n × n diag ger diagonalen/skapar diagonalmatris triu,tril ger över/under triangulära matriser 26 Mom 3, 5DV104, 5DV105 HT09

27 Per Lindström Inst. För Datavetenskap, UmU Matrisoperationer A’ (konjugerade) transponatet det(A) determinanten inv(A) inversen eig(A) egenvärdena norm(A) 2-normen A*B, A+B 27 Mom 3, 5DV104, 5DV105 HT09

28 Per Lindström Inst. För Datavetenskap, UmU Strängar  strängar är av datatypen char  de lagras som matriser  strängkommandon - strcmp, strncmp - strcat - strfind, findstr - strrep - lower, upper - int2str, str2double - sprintf -... >>s = ’detta är en sträng’ s = detta är en sträng >>s(2) ans = e >>s2 = s(5:10) s2 = a är e Exempel: 28 Mom 3, 5DV104, 5DV105 HT09

29 Per Lindström Inst. För Datavetenskap, UmU Kontrollstrukturer... for variabel = uttryck satser end for I = 1:2:n satser end for i= 1:n satser end for (i=1; i<=n; i=i+2) { satser } jmfr. C / Java 29 Mom 3, 5DV104, 5DV105 HT09

30 Stefan Johansson Department of Computing Science, Umeå University …kontrollstrukturer... if logiskt uttryck satser end if logiskt uttryck satser elseif logiskt uttryck satser end if logiskt uttryck satser else satser end 30 Mom 3, 5DV104, 5DV105 HT09

31 Per Lindström Inst. För Datavetenskap, UmU...kontrollstrukturer... logiska operatorer  & (och)  | (eller)  ~ (inte) relations operatorer  == (lika med)  ~= (skilt från)  (mindre/större än)  = (mindre än eller lika med resp. större än eller lika med) 31 Mom 3, 5DV104, 5DV105 HT09

32 Stefan Johansson Department of Computing Science, Umeå University 32 Mom 3, 5DV104, 5DV105 HT09 Andra användbara funktioner vid kontroller any(), all(), ismember() Exempel a=[1:10]; b=[ ]; if(any(a<0)) %värde falskt do something else do something else end Exempel -ismember(b,a); Ger vektor [ ] -ismember(a,b); Ger vektor [ ]

33 Per Lindström Inst. För Datavetenskap, UmU...kontrollstrukturer... while logiskt uttryck satser end x=0.1 while x < 3 x = x*1.1 end Exempel: 33 Mom 3, 5DV104, 5DV105 HT09

34 Per Lindström Inst. För Datavetenskap, UmU...kontrollstrukturer switch vilkorsuttryck case vilkor1 satser case {vilkor2,vilkor3,...} satser : [otherwise] satser end vilkorsuttrycket kan vara en skalär eller sträng 34 Mom 3, 5DV104, 5DV105 HT09

35 Per Lindström Inst. För Datavetenskap, UmU Skärmutskrift och inläsning returvärdet från kommandon som inte avslutas med semikolon skrivs ut kommandon för utskrift  fprintf – formaterad utskrift (C syntax)  disp – textutskrift eller matriser  Ex. disp(’Rubrik över en tabell’)  T.ex. om a och b är radvektorer av samma längd: disp([a’ b’]) 35 Mom 3, 5DV104, 5DV105 HT09

36 Stefan Johansson Department of Computing Science, Umeå University 36 Mom 3, 5DV104, 5DV105 HT09 Input() för inläsning via tangentbordet Ex. postal=input ( ’Ge positivt heltal’); Inmatning av sträng görs med Ex. str=input(’Ledtext ’,’s’); Utan ; i slutet ger utskrift av det nyss inmatade

37 Stefan Johansson Department of Computing Science, Umeå University 37 Mom 3, 5DV104, 5DV105 HT09 %A program to roll 2 ordinary dice a number of times. %Number of times is input by the user. %The program produces statistics for results 2,3,4...,11,12 % disp('The program simulates rolling 2 dice a number of times') num=-1; % Initiate for the while-loop while num <= 0 num=input('Give number of simulations (>0): ') end % of while tab=zeros(12,2); % 2:nd column for relative frequence %Use the clock to initiate the random sequence rand('state',sum(100*clock));

38 Stefan Johansson Department of Computing Science, Umeå University 38 Mom 3, 5DV104, 5DV105 HT09 %Simulate and save for i=1:num res=rolldice+rolldice; tab(res,1)=tab(res,1)+1; end %of for %Compute relative frequence tab(2:12,2)=tab(2:12,1)/num; %Print format short format compact utfall=2:12; disp('disp does not print results readable') disp('DICE_Sum Totals Relative freq.') disp([utfall(:) tab(2:12,:)]) disp('Using FPRINTF gives better print out') %NOTE the transpose of tab disp('DICE_Sum Totals Relative freq.') %The matrix is printed column wise fprintf('%3d %10d %10.3f\n',[utfall; tab(2:12,:)'])

39 Stefan Johansson Department of Computing Science, Umeå University 39 Mom 3, 5DV104, 5DV105 HT09 function dice = rolldice %Roll one ordinary dice. The returned value is %1, 2, 3, 4, 5 or 6 %Call: s=rolldice % dice = 1+floor(rand*6);

40 Stefan Johansson Department of Computing Science, Umeå University 40 Mom 3, 5DV104, 5DV105 HT09 >> simdice The program simulates rolling 2 dice a number of times Give number of simulations (>0): num = disp does not print results readable DICE_Sum Totals Relative freq. 1.0e+004 *

41 Stefan Johansson Department of Computing Science, Umeå University 41 Mom 3, 5DV104, 5DV105 HT09 Using FPRINTF gives better print out DICE_Sum Totals Relative freq >>

42 Per Lindström Inst. För Datavetenskap, UmU function fmedel=tabell(fun,xstart,xslut,step) %Anrop: fmedel=tabell(fun,xstart,xslut,step) %Funktion som tabulerar den matematiska funktionen fun %mellan xstart och xslut med steg step %fun = filnamn eller funktionshandtag för den matematiska %funktionen %fmdel= medelvärdet av funktionsvärdena % t=xstart; n=0; while t<=(xslut+eps) fx=feval(fun,t); n=n+1; x(n)=t; tabell(n)=fx; t=t+step; end %of while 42 Mom 3, 5DV104, 5DV105 HT09

43 Per Lindström Inst. För Datavetenskap, UmU %Skriv ut if isa(fun,'function_handle') fun=func2str(fun); end %of if if n>0 disp(strcat('Tabell över funktionen ',fun)) disp('x-värden f(x)-värden') disp([x(:) tabell(:)])%Gör x och tabell till kolumner medel_1=sum(tabell)/n; else disp('Fel i x-argumenten') medel_1=0; end %of if %Ett annat sätt är med vektorer x=xstart:step:xslut; fx=feval(fun,x); n=length(x); if n>0 medel_2=sum(fx)/n; else medel_2=0; end %of if fmedel=medel_1; 43 Mom 3, 5DV104, 5DV105 HT09

44 Stefan Johansson Department of Computing Science, Umeå University 44 Mom 3, 5DV104, 5DV105 HT09 function mult(tal) %Anrop: mult(tal) %Skriv ut multiplikationstabell för tabell 1,2,3...,tal %Multiplicera talen med 1,2, % if tal>0 for i=1:tal for j=1:12 t(i,j)=i*j; end end % for i disp('Multabeller för talen') disp([1:tal]) disp(' ') disp(t') else disp('Fel indata') end % of if

45 Stefan Johansson Department of Computing Science, Umeå University 45 Mom 3, 5DV104, 5DV105 HT09 %Ett annat sätt if tal>0 rad=1:tal; col=1:12; disp('ETT ANNAT SÄTT att beräkna') A=col'*rad; A end % of if

46 Stefan Johansson Department of Computing Science, Umeå University 46 Mom 3, 5DV104, 5DV105 HT09 >> mult(5) Multabeller för talen

47 Per Lindström Inst. För Datavetenskap, UmU Spara och öppna/ladda data datat i definierade variabler kan sparas i en fil (ges filändelsen.mat)  save  ex. för att spara matrisen A och vektorn b till filen ’minfil.mat’ i aktuell katalog >>save minfil A b  load  ex. ladda in filen ’minfil.mat’ >>load minfil (skapar A och b i Matlab)  ex. >>load minfil A b 47 Mom 3, 5DV104, 5DV105 HT09

48 Per Lindström Inst. För Datavetenskap, UmU Validering vid inmatning Skräp in ger skräp ut….. Så man bör validera indata!!!! T.ex. Inmatning av ett postivt tal tal=-1; while tal<0 tal=input(’Ge positivt tal: ’); end %of while T.ex. inmatning av tal i vektor där alla tal måste vara olika och i givet intervall [1..20] -----” rad=[]; %tomma vektorn disp('Ge 5 tal. Alla olika') i=1; while i<=5 tal=input('Ge tal>>>: '); if any(rad==tal) | tal 20 disp('Fel inmatning. Försök igen') else rad(i)=tal; i=i+1; end %of if end %of while 48 Mom 3, 5DV104, 5DV105 HT09

49 Stefan Johansson Department of Computing Science, Umeå University %Konverteringstabell mellan Celsius och Fahrenheit %Formel: Temp(F)=9/5Temp(C)+32 %Låt användaren mata in starttrmp. i C, ökning mellan varje rad %i tabellen och antalet rader i tabellen disp('Konverteringstabell mellan Celsius och Fahrenheit'); start = input('Ge starttemp i Celsius: '); incr = input('Ge steget (mellan rader) i Celsius: '); total = input('Hur många rader i tabellen: '); stop = start+(total-1)*incr; C = start:incr:stop; F = 9/5*C+32; more on format bank disp('Celsius Fahrenheit'); disp([C(:) F(:)]); disp('**************************Med FPRINTF blir utskriften'); disp('Celsius Fahrenheit'); fprintf('%10.2f %10.2f \n', [C;F]); Ett exempel till 49 Mom 3, 5DV104, 5DV105 HT09

50 Stefan Johansson Department of Computing Science, Umeå University >> help CelFah Konverteringstabell mellan Celsius och Fahrenheit Formel: Temp(F)=9/5Temp(C)+32 Låt användaren mata in starttrmp. i C, ökning mellan varje rad i tabellen och antalet rader i tabellen >> CelFah Konverteringstabell mellan Celsius och Fahrenheit Ge starttemp i Celsius: -10 Ge steget (mellan rader) i Celsius: 5 Hur många rader i tabellen: 10 Celsius Fahrenheit Mom 3, 5DV104, 5DV105 HT09

51 Stefan Johansson Department of Computing Science, Umeå University **************************Med FPRINTF blir utskriften Celsius Fahrenheit >> 51 Mom 3, 5DV104, 5DV105 HT09

52 Stefan Johansson Department of Computing Science, Umeå University % Studera felet då derivatan till f(x)=exp(x) % approximeras med % fprim(x)= (f(x+h)-f(x-h))/(2h) % format compact x=input('Give x-value for approximation: ') t=0.1; i=1; while t>eps %Define all h-values in an array h(i)=t; i=i+1; t=t/10; end %of while fxph = exp(x+h); fxmh = exp(x-h); deriv = (fxph-fxmh)./(2*h); error = exp(x)-deriv; format short e minerr = min(abs(error)) min_ind = find((error == minerr)|(error == - minerr)); 52 Mom 3, 5DV104, 5DV105 HT09

53 Stefan Johansson Department of Computing Science, Umeå University if length(min_ind) == 1 disp('for h= '), disp(h(min_ind)) else disp('There are more than one h-value that give minerror') min_ind end %of if error = abs(error); RXF = eps./h; %Beräkningsfel RT = h.^ 2; %Trunkationsfel clf loglog(h,error) title('Error in central diff-approx. of deriv. to f(x)=exp(x)') xlabel('10Log h') ylabel('10Log error') hold on loglog(h, RXF, 'r--') loglog(h, RT, 'k.') 53 Mom 3, 5DV104, 5DV105 HT09

54 Stefan Johansson Department of Computing Science, Umeå University 54 Mom 3, 5DV104, 5DV105 HT09

55 Stefan Johansson Department of Computing Science, Umeå University function s = xty(x, y) %Call: s=xty(x,y) %Beräkna skalärprodukten mellan vectorerna x och y %med reella element % if length(x) ~= length(y) error('Vektorerna ska ha samma längd'); return end s = 0; for k = 1:length(x) s = s+x(k)*y(k); end % Snabbare variant x=x(:), y=y(:); s1 = x'*y; %Använd fördefinierad funktion dot s2 = dot(x,y); if (s == s1) & (s == s2) disp('Alla tre summorna lika') else disp('Olika summor'); format long [s s1 s2] end 55 Mom 3, 5DV104, 5DV105 HT09

56 Stefan Johansson Department of Computing Science, Umeå University function [terms, sum] = harmoni(upper) %Compute the sum of 1/k; k=1,2,3,4,5, %until that sum exceeds upper. %Call: [terms,sum] = harmoni(upper) %terms = no. of terms in the sum %sum = the actual sum %Also there is a printout for each time the sum %exceeds "the next" integer. % sum = 0; k = 0; oldsum = -1; heltal = 1; while (sum <= upper) & (oldsum ~= sum) k = k+1; oldsum = sum; sum = sum+1/k; if sum >= heltal fprintf(1,'%d termer behövs för att överskrida %d \n', k, heltal); heltal = heltal+1; end %of if end %of while terms = k; 56 Mom 3, 5DV104, 5DV105 HT09

57 Stefan Johansson Department of Computing Science, Umeå University >> [termer, summa]=harmoni(15); 1 termer behövs för att överskrida 1 4 termer behövs för att överskrida 2 11 termer behövs för att överskrida 3 31 termer behövs för att överskrida 4 83 termer behövs för att överskrida termer behövs för att överskrida termer behövs för att överskrida termer behövs för att överskrida termer behövs för att överskrida termer behövs för att överskrida termer behövs för att överskrida termer behövs för att överskrida termer behövs för att överskrida termer behövs för att överskrida termer behövs för att överskrida Mom 3, 5DV104, 5DV105 HT09

58 Stefan Johansson Department of Computing Science, Umeå University >> termer termer = >> format compact >> summa summa = >> format long >> summa summa = Mom 3, 5DV104, 5DV105 HT09

59 Stefan Johansson Department of Computing Science, Umeå University function [pos, neg] = split1(x) %Call: [pos, neg]=split1(x) %x= a vector with numeric values %pos= a vector containing the positive values of x %neg= a vector containing the negative values of x % %This is the straight forward solution in Matlab indpos = 0; indneg = 0; for k=1:length(x) if x(k)<0 indneg = indneg+1; neg(indneg) = x(k); else indpos = indpos+1; pos(indpos) = x(k); end %of if end %of for k= Mom 3, 5DV104, 5DV105 HT09

60 Stefan Johansson Department of Computing Science, Umeå University >> type split2 function [pos, neg] = split2(x) %Call: [pos, neg]=split2(x) %x = a vector with numeric values %pos = a vector containing the positive values of x %neg = a vector containing the negative values of x % %This is the short, but not obvious solution in Matlab indpos = find(x>=0); indneg = find(x<0); pos = x(indpos); neg = x(indneg); 60 Mom 3, 5DV104, 5DV105 HT09


Ladda ner ppt "Per Lindström Inst. För Datavetenskap, UmU MATLAB MATrix LABoratory avancerad ”räknedosa”  utvecklingsmiljö och “programmeringsspråk” visualisering av."

Liknande presentationer


Google-annonser