Grunderna i MATLAB Beräkningsvetenskap I Beräkningsvetenskap och Matlab n Matlab är ett matematiskt verktyg och programmeringsmiljö som används inom beräkningsvetenskap men även inom andra områden (matematik, fysik, kemi, biologi, mm) n En enkel miljö för att snabbt testa idéer och för att studera resultat. Matematisk labbmiljö för Numeriska beräkningar Grafik Programmering Många kraftfulla fördefinierade funktioner med möjlighet att definiera egna. Många Toolboxar för olika tillämpningsområden (t.ex systemteknik) 1
MATLAB-miljön n Utvecklingsmiljön (MATLAB desktop) har ett flertal fönster, Command window, Current folder, Workspace och Command History. Uppgift: Starta Matlab på din dator och förflytta dig till lämplig katalog genom att klicka dig fram i Current folder eller i navigeringsraden ovanför. MATLAB-miljön n I Command Window kan man arbeta interaktivt som en avancerad miniräknare. Semikolon undertrycker utskrift. Om inget variabelnamn anges läggs variabeln i ans (=answer) Variabler skapas när de behövs, utan speciell deklaration (är av typen matris ). >> a = 75 a = 75 >> b = 34; >> c = a*b c = 2550 >> a+b ans = 109 2
Variabler i MATLAB n Variablerna visas i delfönstret Workspace n Kan även lista variabler i kommandofönstret med kommando who, whos Matriser n Matrisen är den grundläggande datatypen. n En tvådimensionell matris är en tabell med rader och kolonner. n En matris med m rader och n kolonner har storleken m n (m gånger n). n Vektorer är specialfall av matriser, då antal rader eller antal kolonner är 1. Exempel: radvektor, 1 n, och kolonnvektor, m 1. n En matris av storlek 1 1 kallas skalär (ett tal). n Varje värde i matrisen kallas element. 3
Vektorer Kolonnvektor och radvektor i MATLAB Semikolon i vektorer ger radbyte >> vkol = [ 1; 2; 3; 4; 5 ] >> vrad = [5 6 7 8 ], x = 3 vkol = % Kolonnvektor 1 2 3 4 5 vrad = % Radvektor 5 6 7 8 x = % Skalär 3 Vektorer Ändra enskilda element >> vrad(1) = -1.1; vrad(2) = 3.5; >> vrad vrad = -1.1000 3.5000 >> vkol = vrad' %transponera vkol = -1.1000 3.5000 vrad(1) anger att index 1 (position 1) ska tilldelas Tecknet betyder transponat 4
Generera vektorer n Kolonnotation används ofta för att skapa vektorer startvärde:steglängd:slutvärde om steglängd=1 kan det utelämnas >> vektor = 0:5 vektor = 0 1 2 3 4 5 >> vektor2 = 0.0:0.05:2.0 vektor2 = 0 0.0500 0.1000 0.1500... 1.9500 2.0000 Generera vektorer Kommandot linspace skapar också vektorer linspace(startvärde,slutvärde,antal_elem) >> v = linspace(0,2,10) v = 0 0.2222 0.4444 0.6667 0.8889 1.1111 1.3333 1.5556 1.7778 2.0000 Dessa två metoder används t ex när man skapar x-axlar vid grafik och vid numeriska beräkningar (diskretisering av x-axeln). Uppgift: Skapa en vektor med jämnt fördelade element av avstånd 2*pi/100 på intervallet [-pi, pi] på två olika sätt med metoderna ovan. 5
Hur skapas en matris? Skapa 1 A = 5 7 3 Semikolon eller retur i matrisen ger radbyte Semikolon efter hela uttrycket undertrycker utskrift Uppgift: Skapa en 3x4 matris och transponera den. >> A = [1 7; 5 3]; >> A A = 1 7 5 3 >> A = [1 7 5 3] A = 1 7 5 3 Matris elementvis 1 7 A = 5 3 >> A(1,1)=1; A(1,2)=7; >> A(2,1)=5; A(2,2)=3; >> A A = 1 7 5 3 6
Speciella matriskommandon n Finns inbyggda funktioner för att skapa vanliga (och ovanliga) matriser n Kan skapa mer avancerade matriser genom kombinationer eye(n) enhetsmatrisen ones(m,n) ett-matris zeros(m,n) noll-matris rand(m,n) slumpmatris + ett stort antal andra >> B = ones(2,3) B = 1 1 1 1 1 1 >> eye(2) ans = 1 0 0 1 >> C = zeros(2,2) C = 0 0 0 0 Element, rader och kolonner n Man kan arbeta med enskilda element, rader, kolonner, delmatriser >> A(2,1) ans = 5 Kolon (:) betecknar hel rad respektive hel kolonn >> A(2,:) ans = 5 3 >> A(2,:) = [0 0] A = 1 7 0 0 2 1 7
Delmatriser, kolon-notation Delmatriser till matrisen A, m n kan skapas snabbt med kolon-notation n A(:,j) j:te kolonnen av A n A(i,:) i:te raden av A n A(i:k,j:m) delmatris, rader i-k och kol j-m A = 1 7 6 0 0 5 2 1 3 >> B = A(2:3,1:2) B = 0 0 2 1 Exempel Plocka ut denna delmatris Workspace och Array Editor n Om man dubbelklickar på en variabel i delfönstret Workspace så öppnas ett nytt fönster, Array Editor Dubbelklicka på en variabel i Workspace n Kan man ändra variabelvärde men även storlek. 8
Bestämma storlek och längd >> A = [1 7; 5 3] >> vkol = [ 1; 2; 3; 4; 5 ] >> size(a), size(vkol), length(vkol) ans = 2 2 ans = 5 1 ans = 5 Matrisoperationer, aritmetiska n Matematiska operationer på matriser kan göras direkt, C = sin(a); och fungerar då elementvis n Addition/subtraktion OK om samma storlek, t ex C = A + B, där A och B är m n n Matrismultiplikation, C = A*B, fungerar bara om antal kolonner i A är samma som antal rader i B n Matrisdivision, C=A/B, betyder C=A*inv(B) 9
Matrisalgebra Vad händer om storlekarna inte stämmer? >> A=[1 7;5 3]; >> x = [2; 1]; >> A*x ans = 9 13 1 Ax = 5 7 2 3 1 2 1 men xa = 1 5 fungerar inte >> x*a??? Error using ==> * Inner matrix dimensions must agree. är OK, 7 3 Vanliga räkneregler för matriser/vektorer gäller! Elementvisa operationer n Operationer, t ex *,/,^ kan även utföras elementvis Exempel: B^2 = B*B men B.^2 = b b 2 11 2 21 b b 2 12 2 22 >> B = [1 7;5 3]; >> B^2 ans = 36 28 20 44 >> B.^2 ans = 1 49 25 9 10
Elementvisa operationer n På samma sätt är B*C vanlig matrismultiplikation mellan två matriser medan B.*C = b11c b21c 11 21 n Ibland kan detta generera fel (vanligt fel att glömma punkt) b b 12 22 c c 12 22 >> a = [2 4]; >> a.^2 ans = >> a^2 4 16??? Error using ==> ^ Matrix must be square. Linjära ekvationssystem n Backslash-operatorn, \ Används för att lösa ekvationssystem, Ax=b >> A = [-2 4;2 5]; b=[1;2]; >> x = A\b x = 0.1667 0.3333 Uppgift: Skapa ett slumpmässigt linjärt ekvationssystem av storlek 5x5 och lös det. Verifiera lösningen genom att beräkna residualen r=ax-b. Vad förväntar vi oss för resultat och hur stor avvikelse kan vi tillåta? 11
Komplexa tal n Komplexa tal kan skapas med complex >> z = complex(1.2, 2.5) z = 1.2000 + 2.5000i n eller i en beräkning >> z = sqrt(-2) z = 0 + 1.4142i Komplexa tal n Givetvis fungerar vektorer >> z = complex([1.2 3],[-1 2.5]) z = 1.2000-1.0000i -3.0000 + 2.5000i n Speciella funktioner real(z) ger realdelen av z imag(z) ger imaginärdelen av z conj(z) konjugatet till z abs(z) - absolutbeloppet av z angle(z)- fasvinkeln i radianer 12
Enkel grafik (2D) n Gången när något ska plottas är Skapa en horisontell axel (x-axel) Beräkna funktionsvärden (y-axel) Plotta x mot y, plot(x,y) Spara figuren för att inkludera in en rapport senare (finns olika filformat, se help print ) >> x = linspace(0,2*pi,50); >> y = cos(x)+sin(x); >> plot(x,y) >> print djpeg minfig.jpg Enkel grafik (2D) n X-axel skapas genom x = linspace(x0,x1,antal_pkt); eller x = [x0:steglangd:x1]; n Plotkommandot kan utvidgas på många olika sätt, t ex (gör help plot ) >> plot(x,cos(x), -,x,sin(x), o ) Alternativt: >> plot(x,cos(x), - ) >> hold on; >> plot(x,sin(x), go ) 13
Enkel grafik (2D) Uppgift:Plotta funktionen y=sin(x 2 ) i intervallet x=[0,5] med steg av 0.05 och använd en blå streckad linje och * som punktmarkeringar i datapunkterna. Enkel grafik, histogram n bar(x,y) eller bar(y) n bar(a, stacked ), bar(a, grouped ) n bar3(a) [A är en 6x3 matris nedan] 14
Enkel grafik, tårtdiagram n pie(x), pie3(x) n pie3(x,utdrag,{ Bit 1, Bit 2, }) 3D-grafik n I 3D har man x, y och z-axel n Givet x-axel och y-axel måste man skapa x- värden för alla y-värden, och y-värden för alla x- värden, ett nät. Detta görs med kommandot meshgrid 15
3D-grafik Antag att f ( x, y) = xe 2 2 x y ska plottas i figuren n Axlarna i bilden fås genom >> x = 0:0.1:1; y = 0:0.2:1; n Nätet skapas genom >> [X, Y] = meshgrid(x,y); n Funktionsvärdena beräknas för varje x och y- värde >> Z = X.* exp(-x.^2 - Y.^2); 3D-grafik n Slutligen plotta >> mesh(x,y,z); 16
3D-grafik n Lite bättre upplösning om man ökar antalet punkter i x och y-led >> x=linspace(0,1,50); y=linspace(0,1,50); >> [X,Y] = meshgrid(x,y); >> Z = X.* exp(-x.^2 - Y.^2); >> mesh(x,y,z); 3D-grafik n Byt mesh mot surf så fås en yta >> surf(x,y,z); 17
3D-grafik n Ta bort rutnätet >> shading( interp ); Uppgift: Plotta Twin-peaks funktionen z=(x 2 +3y 2 )e (1-x*x-y*y), x=[-2,2], y=[-2,2] 18
3D-grafik n Nivålinjer >> contour(x,y,z,20); >> contour3(x,y,z,20); Grafik-fönstret n Använd menyerna i grafikfönstret för att rotera, zooma, flytta synvinklar, ändra linjetyper, lägga till text, ändra färgskalor, etc. Uppgift: Lägg till namn på x-, y- and z-axlarna i Twin-peaks plotten. Sätt också titel och rotera figuren. (Extra: Ändra på färgskalan, colormap.) 19
Text (textsträngar) n Text skrivs innanför apostrofer, dvs '' >> namn = 'Nisse'; >> utrop = ['Hej ' namn '!'] utrop = Hej Nisse! >> namn(2) = 'a' namn = Nasse n Exemplet visar att texter (textsträngar) fungerar som radvektorer med indexering. n Observera att man sammanfogar flera textbitar med hakparenteserna. Text När behövs textsträngar? n T ex för att ha texter på axlarna i bilder, som skapats med plot-kommandot >> x = linspace(0,3*pi,50); y = sin(x); >> plot(x,y); >> title( Sinus mellan 0 till 3\pi ); >> xlabel( x ); ylabel( sin(x) ); \pi i en textsträng är s k LaTeX-syntax och kan användas för att skriva matematisk text Resultatet... 20
Text...blir det här title(...) ylabel(...) xlabel(...) Några små tips n Piltangent återkallar tidigare kommandon, skriv början på kommandot och använd pilen. n kan också använda delfönstret command history Dubbelklicka på ett kommando för att upprepa (inkl utföra) kommandot Markera kommandot med musen, dra och släpp i kommandofönstret. Kommandot utförs ej utan man trycker på return för att utföra. Kan på det sättet ändra i kommandot innan utförande. 21
Några små tips n ctrl-c avbryter körningen av ett kommando (men stoppar inte MATLAB) n diary kan användas för att spara skärmutskrifter i en fil >> diary uppg1.txt diverse kommandon här >> diary off % stänger diary Allt som skrivs på skärmen mellan diary och diary off hamnar nu i filen uppg1.txt. Lämpligt att använda för att redovisa körexempel i inlämningsuppgifter t ex. Sammanfattning n MATLAB-miljön Command Window (arbetsfönster), Current Folder (filer), Workspace (variabler), Command History (tidigare kommandon) n Variabler i MATLAB Lagrar värden, skapas vid tilldelning, x=3.22; z=1e-20; Kommandon: whos, save, load, format n Matematiska funktioner och beräkningar Matlab fungerar som en avancerad miniräknare +, -, *, /, ^, sqrt(x), sin(x), log(x), exp(x), etc. n Vektorer och matriser A=[ 2 3; 2 1 ]; A(1,2)=4; A(2,:)=[ 3 4 ]; x=linspace(xstart,xstop,npkt); x=xstart:dx:xstop; length, size, zeros, ones, eye, rand, lu(a); x=a\b,.*,./,.^ 22
Sammanfattning n Grafik plot(x,y, r-* ), xlabel, ylabel, title, bar, pie, hold on, clf, print djpeg fig.jpg meshgrid, mesh, surf, shading, contour, contour3 n Textsträngar text= Hej ; text2=[text alla! ]; text2(2)= o ; disp(text), text=num2str(x) n Kommandofiler (M-filer) Alla kommandon kan sparas i en M-fil och köras som ett enkelt program. Kommandona utförs en i taget i ordning. Kommandofiler har ändelsen.m (LisasFil.m) och körs med Runknappen eller genom att skriva filnamnet i kommandofönstret. n Annat nyttigt exit, help, demo, diary, ctrl-c, input, piltangenten 23