TANA81: Beräkningar med Matlab - Variabler och Matriser - Logiska uttryck och Villkor - Repetitionssatser - Grafik - Funktioner Variabler I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde: >> x=3.67 x = 3.6700 Variabeln kan sedan användas i beräkningar: >> y=log(1+x)/sin(x) y = -3.0569 Typeset by FoilTEX 1 Typeset by FoilTEX 2 Exempel Beräkna uttrycket Matriser I Matlab: y = 1+e1+x 1+ 3. Exempel: En 2 3 matris innehåller värdena A = ( ) ( ) a11 a 12 a 13 1 3 7 =. a 21 a 22 a 23 4 2 1 >> y=( 1+exp(1+x) )/( 1+sqrt(3) ); Används ; fås ingen utskrift av beräkningsresultatet. Istället disp(y). Räkneoperationer + - * / \ ^ I Matlab skapas matrisen med kommandot: >> A = [ 1, 3, 7 ; 4-2 1 ]; Tecknet ; betyder ny rad och, nytt element. Behöver ej, annat än för tydlighet. Standardfunktioner sqrt, sin, cos, exp, log, atan,... Typeset by FoilTEX 3 Typeset by FoilTEX 4
Indexering För att manipulera enskiljda element i en matris anger man dess index. Exempel Antag att vi har en 2 3 matris A. Elementet a 23 skrivs ut till skärmen genom: >> disp( A(2,3) ) Här A(2,3)=1 Man kan ändra elementet a 12 genom att skriva >> A(1,2)=5; För att skriva ut en hel rad används : notation >> disp( A(2,:) ) Matriser skapas med hjälp av ett antal standard funktioner: ones, zeros, eye, rand,... Exempel En 5 4 matris innehållande ast nollor skapas med kommandot: >> A = zeros(5,4); Matriser kan förekomma i räkneoperationer (på samma sätt som variabler). >> A = rand(5,3); 3x5 matris med slumptal! >> B = ones(4,5); 4x5 matris med ettor! >> C = B*A; Matrisen C får storlek 4 3. Vid matrisoperationer måste dimensioner passa! Typeset by FoilTEX 5 Typeset by FoilTEX 6 Operationer som finns tillgängliga på matriser är - Vanliga räkneoperationer: +,, och - Transponat: B=A. - Division: C=A\B eller C=A/B (beräknar antigen AB 1 eller A 1 B). - Storlek: [n,m]=size(a) ger antalet rader och kolumner. Dessutom finns ett stort antal funktioner för att lösa vanliga matris problem. Exempelvis beräknas egenvärden genom >> D = eig( A ); Vektorer En vektor x är en matris med ast en kolumn (eller en rad). Vektorer kan enkelt skapas med kolon notation: >> x = (1:5) ; >> y= (2:0.5:3.5) ; ger två vektorer x = 1 2 3 4 5, och y = Vektorlängd beräknas med n=length(x). 2 2.5 3.0 3.5. Typeset by FoilTEX 7 Typeset by FoilTEX 8
Ofta vill man utföra beräkningar elementvis. Använd då +, -,.*,./, och.^ Exempel: kommandona >> x = 0:0.1:1; >> y = (1+exp(x))./(1+x.^2); skapar en vektor y R 11 med exempelvis x(3)=0.2000 och y(3)=2.1360. 1+e 0.2 1+0.2 2 2.1360. Standardfunktioner som sin, cos, etc utförs elementvis! Logiska uttryck Logiska variabler kan ha värdet sant eller falskt. I Matlab tolkas värdet 0 som falskt och 1 som sant. Relationsoperatorer <, <=, >, >=, ==, och ~=. Logiskaoperatorer &, och ~. Exempel Låt x=3.0 och y=6.5. >> x > y ans = 0 >> z = x + y >= x^2 x == y Prioritet Aritmetriska > Relations > Logiska. Kan använda parenteser. Typeset by FoilTEX 9 Typeset by FoilTEX 10 Villkorssatser Exempel En funktion ges av uttrycket I Matlab finns if <logiskt uttryck> <satser> Vissa rader utförs ast om uttrycket har värdet sant. Alternativ är if <logiskt uttryck> <satser 1> else <satser 2> I Matlab kan vi skriva: x=3.5; if (x <= 0) f=0; else f=x^2; ; f(x) = { 0, x 0, x 2, x > 0. Typeset by FoilTEX 11 Typeset by FoilTEX 12
Repetitionssatser Då ett antal rader skall upprepas ett fixt antal gånger används en for sats: Exempel Beräkna summan S = Detta ger S=1.6439. for <variabel>= start:steg:slut <satser> for k=1:1000 S=S+k^(-2); 1000 k=1 1 k 2. Exempel Beräkna maximum av en funktion f(x) = sin(x 2 )e 2x på intervallet [0,1] genom att skapa en vektor med n element och beräkna funktionens värden för ett antal jämt fördelade x-värden. Hitta sedan det största funktionsvärdet. Typeset by FoilTEX 13 Typeset by FoilTEX 14 Exempel Summera alla positiva element i en matris A. [n,m]=size(a); for i=1:n for j=1:m if ( A(i,j)>0 ) S=S+A(i,j); disp(s) Då några rader skall upprepas ett (okänt) antal gånger används en while sats: while <logiskt uttryck> <satser> Så länge det logiska uttrycket har värdet sant upprepas kommando raderna! Typeset by FoilTEX 15 Typeset by FoilTEX 16
Exempel Fibonacci talen ges av F 1 = 0, F 2 = 1, och F n = F n 1 + F n 2. Vilket är det största talet F k som forfarande är mindre än 100? F(1)=0;F(2)=1;n=2; while ( F(n)< 100 ) n=n+1; F(n)=F(n-1)+F(n-2); n-1,f(n-1) Repetitionssatsen avbryts när n = 13 så det största talet blir F 12 = 89. Grafik I Matlab finns ett kommando plot som används för att skapa enkla 2D grafer. Skriv >> x = [ 1 2 4 5]; >> y = [ 3 2 2 4]; >> plot( x, y ); Punkterna (x k,y k ) sammanbinds med räta linjer. Linjetyp kan anges: >> plot( x, y, r-- ); ger röd streckad linje. Se help plot. Typeset by FoilTEX 17 Typeset by FoilTEX 18 Exempel Rita en graf över funktionen y = arctan(x) på intervallet 2 < x < 2. >> x = -2:0.5:2; >> y = atan(x); >> plot( x,y, b-,x,y, r+ ); För att få en jämnare kurva måste vi välja fler punkter (x k,y k ). Exempel Rita en graf över funktionen y = cos(x)/(1 + x 2 ) på intervallet 0 < x < 1. >> x = 0:0.05:1; >> y = cos(x)./(1+x.^2); >> plot(x,y); Observera att elementvis./ och.^ måste användas. Vi kan namnge koordinataxlarna med >> xlabel( x ); >> ylabel( y ); Typeset by FoilTEX 19 Typeset by FoilTEX 20
Kommandofiler i Matlab Man kan samla Matlab kommandon i en fil. Antag exempelvis att följande program finns på filen summa.m: for k=1:100 S=S+k; ; I Matlab skriver jag då: >> summa >> S 5050 Detta är en kommentar! Variabeln S ges då ett värde! Filen måste sluta på.m. En hyfsad Editor finns inbyggd i Matlab. Funktioner i Matlab En funktion har ett antal inparametrar och beräknar ett antal utparametrar. I Matlab måste varje funktion skrivas på en egen fil (med ändelse.m). Filen som innehåller funktionen skall ha följande utsee: Inledande kommentar! function [ut1,ut2,ut3]=min_funktion( in1,in2,in3 ); <kommando rader> Kan ha godtyckligt antal in och utparametrar. Den inledande kommentaren visas då man skriver: >> help min_funktion Typeset by FoilTEX 21 Typeset by FoilTEX 22 Exempel Skriv en funktion Medel som beräknar medelvärdet av elementen i en vektor x. Funktionen skall kunna anropas på följande sätt: >> y = Medel( x ); På filen Medel.m skriver vi: Medel: Beräknar medelvärdet av vektorn x. Anrop: >> y=medel( x ); function [y]=medel(x); n=length(x); for k=1:n S=S+x(k); ; y=s/n; blir retur värde! Typeset by FoilTEX 23 Typeset by FoilTEX 24
I Matlab kan vi nu skriva: >> Medel( exp( 1:10 ) ) ans = 3.4844e+03 Exempel Skriv en funktion som beräknar skillnaden mellan två vektorer mätt enligt formeln: d(x,y) = max 1 k n x k y k. Vi skall kunna skriva >> x=rand(10,1); y=rand(10,1); 10 slumptal mellan 0 och 1. >> D = Skillnad( x, y) D = 0.7563 Typeset by FoilTEX 25 Typeset by FoilTEX 26 På filen Skillnad.m skriver vi. function [S]=Skillnad( x, y ) n=length(x); for k=1:n Sk = abs( x(k) - y(k) ); if (Sk>S) S=Sk; Samma sak kan enklare skrivas S=max(abs(x-y));. Ganska komplicerade operationer kan utföras enkelt med hjälp av Matlabs standardfunktioner. Typeset by FoilTEX 27