Innehåll Vad är MATLAB? Grunderna i MATLAB stefan@it.uu.se Användningsområden MATLAB-miljön Variabler i MATLAB Funktioner i MATLAB Vektorer, matriser, linjära ekv system Enkel D-grafik Spara i m-filer Polynom och kurvanpassning Exempel och smakprov Vad är MATLAB? Vad är MATLAB? Utvecklat av MathWorks, Inc. http://www.mathworks.com Första versionen klar i slutet av 70-talet Matematisk labbmiljö för Numeriska beräkningar Grafik Programmering En enkel miljö för att snabbt testa idéer och för att studera resultat Avancerat interaktivt mjukvarupaket för beräkningar och visualiseringar. Ursprungligen MATrix LABoratory. Många kraftfulla fördefinierade funktioner med möjlighet att definiera egna. Eget objektorienterat programmeringsspråk. Samverkan med C, C++, Java och FORTRAN möjlig. 1
Vad är MATLAB? Var kan man köra MATLAB? Över 5 tilläggsprogram (toolboxar) finns för speciella tillämpningsområden, t ex: signalbehandling bildbehandling statistik symbolisk matematik finansiell matematik Körs under UNIX/Linux, Windows eller Macintosh. MATLAB finns i datorsalor på Polacksbacken, Ångström och på IBG Kan köpa speciell student-cd som, kostar ca 550 kr. Köps på IT-stöd (hus 3, Polacksbacken) Användningsområden Användningsområden Överallt där det förekommer beräkningsproblem! Undervisning: matematik, särskilt linjär algebra, beräkningsvetenskap, fysik, kemi, teknik, ekonomi, etc. Forskning: tekniska beräkningar, algoritmutveckling, analys av metoder och visualisering av resultat. Industrin: signalbehandling, bildbehandling, reglerteknik, optimering, simulering m.fl. MATLAB kan användas interaktivt som en avancerad räknedosa (kalkylator). Enkelt! MATLAB kan också användas som ett programmeringsspråk på ett mer avancerat sätt. MATLAB kommer att användas mer avancerat i kursen Beräkningsvetenskap I (period 3)
MATLAB-miljön: Start MATLAB-miljön: kommandon Utvecklingsmiljön (MATLAB desktop) har ett flertal verktyg, t ex kommandofönstret Här är kommandofönstret MATLAB styrs vanligen från kommandofönstret (Command Window). Kommandon ges efter»-promptern och utförs när return-tangenten tryckts ned. Exempel: >> 4 + 19 61 MATLAB-miljön: interaktiv MATLAB-miljön: avsluta I kommandofönstret kan man arbeta interaktivt som en avancerad miniräknare. Semikolon undertrycker utskrift. Om inget variabelnamn anges läggs variabeln i ans (=answer) >> a = 75 a = 75 >> b = 34; >> c = a*b c = 550 >> a+b 109 MATLAB avslutas genom att man antingen ger kommandot quit eller exit >> exit väljer Exit MATLAB i File-menyn 3
MATLAB-miljön MATLAB-miljön: hjälp Hjälp fås via MATLAB help i menyn Help Observera även Demos som kan vara idé att titta igenom Hjälp för enstaka kommandon kan göras direkt i kommandofönstret >> help kommando Exempel Vad gör kommandot exit? >> help exit EXIT Exit from MATLAB. EXIT terminates MATLAB. Variabler i MATLAB Variabler i MATLAB En variabel i MATLAB Variabler i MATLAB har alltid ett namn (måste börja på bokstav) kan ses som behållare som innehåller ett värde av en viss typ (heltal, rella tal, text, ) kan tilldelas ett värde skapas när de behövs, utan speciell deklaration (är av typen matris ). kan vara fördefinierad (t ex pi) >> a = 3 a = 3 >> pi 3.1416 visas i delfönstret Workspace Om inte workspace syns markera workspace i menyn View Workspace 4
Variabler i MATLAB Variabler i MATLAB Kan listas med kommando who, whos >> who Your variables are: a ans >> whos Name Size Bytes Class a 1x1 8 double array ans 1x1 8 double array Grand total is elements using 16 bytes whos ger samma information som workspace kan skrivas ut i olika format, sparas och laddas upp >> format long >> pi 3.1415965358979 >> format long e >> pi >> 3.14159653589793e+000 >> format short e >> pi 3.1416e+000 Observera att noggrannheten i pi är lika, det är bara utskriftsformatet som ändras. Funktioner: fördefinierade Funktioner: egendefinierade Det finns mängder av fördefinierade funktioner, t ex för elementär matematik linjär algebra grafik i D och 3D integraler och differentialekvationer statistik Kurvanpassning Exempel: abs(x), sqrt(x), sin(x), log(x), log10(x), Man kan också skapa egna funktioner...mer om detta i kursen Beräkningsvetenskap I 5
Vektorer Vektorer MATLAB arbetar på vektorer och matriser vektor är en följd av tal, t ex 1 3 5 7 9 en vektor är en typ av matris, t ex matris med 1 rad och 5 kolonner (1x5-matris) ett enskilt tal, en skalär betraktas som en 1x1-matris Matriser/vektorer skapas med hakparantes >> v1 = [1 3 5 7] v1 = 1 3 5 7 Radbyte i en matris/vektor görs med kolon >> v = [1;3;5;7] v = 1 3 5 7 Alla funktioner i MATLAB arbetar på vektorer >> sin(v1) 0.8415 0.1411-0.9589 0.6570 Vektorer Vektorer Finns också speciella funktioner för att skapa vektorer >> x = 1::7 x = 1 3 5 7 >> x = 1:7 x = 1 3 4 5 6 7 Detsamma som >> x = 1:1:7 från 1 till 7 med steglängd från 1 till 7 med steglängd 1 En annan funktion är linspace >> x = linspace(1,7,5) x = från 1 till 7 med steglängd 1.0000.5000 4.0000 5.5000 7.0000 från 1 till 7 i 5 steg Vektorer kan alltså skapas genom x = linspace(x0,x1,antal_pkt); eller x = x0:steglangd:x1; 6
Matriser Man kan arbeta med enskilda element, rader, kolonner, submatriser Antag 1 A = 5 7 3 1 Kolon (:) betecknar hel rad respektive kolonn >> A(,1) 5 >> A(,:) 5 3 >> A(,:) = [0 0] A = 1 7 0 0 Matriser Aritmetiska operationer på matriser kan göras direkt vanliga räkneregler gäller Addition/subtraktion OK om samma storlek, t ex C = A + B Matrismultiplikation, C = A*B fungerar bara om antal kolonner i A är samma som antal rader i B. 1 Matriser >> x = [; 1] x = 1 Antag A=[1 7;5 3]; >> A*x Vanliga räkneregler för matriser/vektorer gäller. 9 13 >> x*a??? Error using ==> * Inner matrix dimensions must agree. Matriser Finns inbyggda funktioner för att skapa vanliga (och ovanliga) matriser Kan skapa mer avancerade matriser genom kombinationer eye(n) enhetsmatrisen ones(m,n) ett-matris zeros(m,n) noll-matris + ett stort antal andra >> B = ones(,3) B = >> eye() 1 1 1 1 1 1 1 0 0 1 >> C = zeros(,) C = 0 0 0 0 7
Elementvisa operationer Elementvisa operationer Operationer, t ex *,/,^ kan även utföras elementvis Exempel: B^ = B*B men b B.^ = b 11 1 b b 1 >> B = [1 7;5 3]; >> B^ 36 8 0 44 >> B.^ 1 49 5 9 På samma sätt är B*C vanlig matrismultiplikation mellan två matriser medan b11c11 b1c1 B.*C = b1c1 bc Ibland kan detta >> a = [ 4]; generera fel >> a.^ 4 16 >> a^??? Error using ==> ^ Matrix must be square. Linjära ekvationssystem Linjära ekvationssystem Linjärt ekvationssystem, exempel 3x1 + 4x = 5 System med ekv, obekanta x1 7x = 8 3x1 + 4x = 5 x1 7x = 8 System med 4 ekv, obekanta 6x1 x = 3 kallas överbestämt 5x1 + x = 1 Linjära ekvationssystem kan skrivas på matrisvektorform 3x1 + 4x = 5 x1 7x = 8 överförs till 3 4 x1 5 = 7 x 8 A x b A är en matris (kvadratisk, ) b är en vektor innehållande högerledet x är en vektor med obekanta 8
Linjära ekvationssystem Linjära ekvationssystem Skapa och 3 A = 5 b = 8 4 7 Semikolon eller retur i matrisen ger radbyte >> A = [3 4; -7]; >> A A = 3 4-7 >> b = [5; 8] b = 5 8 I MATLAB löser man linjära ekvationssystem med backslash-operatorn, \ >> x = A\b x =.3103-0.488 \-operatorn använder Gauss-elimination för att lösa systemet b Jfr A som är förbjudet för matriser och vektorer Linjära ekvationssystem Komplexa tal Använd backslash x = A\b istället för invers x = inv(a)*b Backslash kräver färre operationer och är alltså snabbare och effektivare Komplexa tal kan skapas med complex >> z = complex(1.,.5) z = 1.000 +.5000i eller i en beräkning >> z = sqrt(-) z = 0 + 1.414i 9
Komplexa tal Några små tips Givetvis fungerar vektorer Piltangent återkallar tidigare kommando >> z = complex([1. 3],[-1.5]) z = 1.000-1.0000i -3.0000 +.5000i 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 pl återkallar senaste kommando vars namn började med pl (plot t ex) Man behöver sällan (aldrig?) skriva om samma kommando igen om man vill göra en liten modifiering Några små tips Några små tips kan också använda delfönstret command history. öppnas under menyn View Dubbelklicka på ett kommando för att upprepa drag och släpp kommandon från command history till kommandofönstret Command history ctrl-c avbryter körningen av ett kommando (men stoppar inte MATLAB) diary kan användas för att spara skärmutskrifter i en fil >> diary uppg1.txt Allt som skrivs på skärmen hamnar nu i filen uppg1.txt >> diary off % stänger diary Lämpligt att använda för att redovisa körexempel i inlämningsuppgifterna 10
Enkel grafik (D) Enkel grafik (D) Gången när en graf ska ritas är Skapa en horisontell axel (t ex x-axel) Beräkna funktionsvärden (y-axel) Plotta x mot y, plot(x,y) >> x = linspace(0,*pi,50); >> y = cos(x)+sin(x); >> plot(x,y) x-axel skapas genom x = linspace(x0,x1,antal_pkt); eller x = x0:steglangd:x1; Plotkommandot kan utvidgas på många olika sätt, t ex >> plot(x,cos(x), -,x,sin(x), o ) Enkel grafik (D) Enkel grafik (D) Namnge axlar med xlabel resp ylabel och sätt titel med title title >> x = linspace(0,*pi,50); >> y = cos(x)+sin(x); >> plot(x,y) >> xlabel( x ); >> ylabel( y ); >> title( Min figur );...ger resultatet ylabel xlabel 11
Enkel grafik (D) Spara kod i M-filer Kan ändra i plot interaktivt genom att markera Edit Plot under menyn Tools Kan sedan dubbelklicka på linjer, axlar, titel etc och ändra egenskaper En kommandofil är ett sätt att lagra kommandon som annars skulle skrivas interaktivt i kommandofönstret Genom att köra filen så exekveras (utförs) alla kommandon i filen och resultat visas i kommandofönstret (eller grafikfönstret) Ändelse på kommandofil måste vara.m, t ex minfil.m OBS! Fördel att lagra kod i fil vid inlämningsuppgifter. Filen (=koden) kan ju då redovisas. Spara kod i M-filer Spara kod i M-filer M-filer skapas enklast i MATLABs editor skriv edit i kommandofönstret eller använd menyn File: File -> New -> M-file Ett nytt fönster med en editor öppnas där man kan skriva in sin kod Matlabs editor Skriv in koden precis på samma sätt som i kommandofönstret 1
Spara kod i M-filer Spara kod i M-filer Spara filen! Viktigt att ha kontroll på i vilken katalog m-filen sparas Enklast är att se till att man befinner sig i den katalog man vill befinna sig i genom (Current Directory) i MATLABs huvudfönster. För att gå till annan katalog klicka på -knappen Kör koden, dvs utför de kommandon som skrivits in genom ett av alternativen i kommandofönstret, skriva filnamnet utan ändelse (.m) >> MinFil kör koden i filen MinFil.m i editorn, klicka på -knappen Spara kod i M-filer Spara kod i M-filer Ett litet exempel MATLABs editor öppnas och följande kod skrivs in % Lisas ritprogram, LisasFil.m x0 = 0; x1 = *pi; n = 100; x = linspace(x0, x1, n); y = sin(x); plot(x,y); Spara koden och skriv i kommandofönstret >> LisasFil Koden körs då och ger resultatet 13
Polynomhantering Polynomhantering Exempel på polynom 3 p( x) = 3x + 5x + x + 1 3:e gradspolynom p( x) = x + :a gradspolynom p( x) = 4x + 5 1:a gradspolynom p ( x) = x 3 + x Ett generellt n:e gradspolynom p( x) = a a n n 1 n x + an 1x + + ax + a1x + 0 I MATLAB lagras enbart koefficienterna 3 p( x) = 3x + 5x + x + 1 >> p = [3 5 1]; p( x) = x + >> p = [1 0 ]; p ( x) = x 3 + x >> p = [1 0 1 0]; Polynomhantering Det finns ett flertal funktioner för polynom roots ger rötterna till polynomet polyder ger derivatan till polynomet p( x) = 3x p ( x) = 9x + 5x 3 + x + 1 + 10x + >> p = [3 5 1]; > roots(p) -1.3563-0.155 + 0.4708i -0.155-0.4708i >> polyder(p) 9 10 Polynomhantering Fler funktioner >> x=3; polyval(p,x) polyval evaluerar polynomet i punkten 133 x conv multiplicerar >> q = [1 0 ]; polynomet p med >> conv(p,q) polynomet q 3 5 8 11 4 Plottning av polynom >> x =linspace(-,); >> y = polyval(p,x); >> plot(x,y); 14
Kurvanpassning Kurvanpassning Att anpassa polynom (och andra funktioner) till mätdata är mycket vanligt inom naturvetenskap, teknik, ekonomi, medicin, Interpolation Minsta kvadratanpassning Två huvudtyper Interpolation Minsta kvadratanpassning I MATLAB kan funktionen polyfit användas till båda typerna: t 1.0 4.0 4.5 4.9 6.0 7.0 y 3. 4.1 4. 4.1 0.5 1.0 p = polyfit(t,y,grad_tal) innebär att ett polynom av grad grad_tal anpassas till mätvärdena (t,y). Kurvanpassning Kurvanpassning I MATLAB och med polynom av grad 5 blir det och figuren >> t = [1 4 4.5 4.9 6 7]; >> y = [3. 4.1 4. 4.1 0.5 1]; >> p = polyfit(t,y,5) p = 0.1480-3.1468 5.3138-94.9413 160.457-84.5993 >> xx = linspace(1,7); % skapa x-axel >> yy = polyval(p,xx); % evaluera polynomet >> plot(t,y, r*,xx,yy, - ) 15
Kurvanpassning och med polynom av grad blir det Kurvanpassning och plot >> p = polyfit(t,y,) p = -0.67 1.5995 1.9488 >> xx = linspace(1,7); % skapa x-axel >> yy = polyval(p,xx); % evaluera polynomet >> plot(t,y, r*,xx,yy, - ) y-axeln modifierad för att stämma med föregående plot Kurvanpassning Kurvanpassning 1:a plotten visar exempel på interpolation grafen går genom punkterna gradtalet = antalet punkter-1 :a plotten visar exempel på minsta kvadratanpassning Grafen går inte genom punkterna utan är en typ av medelvärde Gradtalet < antalet punkter-1 Slutsats Om det blir interpolation eller minsta kvadrat avgörs av antalet punkter i funktionen polyfit Motivering För att entidigt kunna rita en rät linje (= 1:a gradspolynom) krävs punkter en andragradskurva (= :a gradspolynom) krävs tre punkter Om man har n st punkter och i polyfit anger polynom av grad n-1 finns det exakt ett polynom som går genom punkterna Om man anger lägre grad i polyfit blir det en approximation, t ex ett medelvärde mellan punkterna 16
Kurvanpassning Kurvanpassning Minsta kvadrat Den typ av approximation man vanligen använder då man väljer för låg polynomgrad kallas minsta kvadratanpassning Baseras på att man minimerar summan av avstånden mellan graf och punkter i kvadrat (gröna linjer i figur) Minsta kvadrat eller interpolation? Vilken man väljer beror på problemet och vad man vill ha fram Interpolation fungerar enbart för ganska få punkter ger våldsamma svängningar vid många punkter (se figur) Minsta kvadrat används ofta vid mycket stora datamängder Minsta kvadrat används ofta då man har osäkerheter i mätningar, t ex statistiska fel etc. Det är då inte rimligt med en kurva som går exakt genom inexakta mätvärden Grafik i 3D, några smakprov Grafik i 3D, några smakprov Funktioner av två variabler kan visualiseras på många olika sätt mesh(x,y,z) surf(x,y,z) 17
Grafik I 3D, några smakprov Grafik: strömlinjer, smakprov contour(x,y,z) Grafik: film och bildspel, smakprov Bildbehandling, smakprov Oscillerande klockkurva 18
MATLAB-exempel Visualisera redan beräknade data, exempel från aerodynamik, rymdfärja med chockvågor 19