Vad är MATLAB? Grunderna i MATLAB stefan@it.uu.se Utvecklat av MathWorks, Inc. http://www.mathworks.com Ursprungligen MATrix LABoratory. Första versionen klar i slutet av 70-talet Matematisk labbmiljö för Numeriska beräkningar Grafik En enkel miljö för att snabbt testa idéer och för att studera resultat Användningsområden Var kan man köra MATLAB? Ö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 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, Polacksbacken) MATLAB-miljön: Start MATLAB-miljön: avsluta Utvecklingsmiljön (MATLAB desktop) har ett flertal verktyg, t ex kommandofönstret Här är kommandofönstret MATLAB avslutas genom att man antingen ger kommandot quit eller exit >> exit Man väljer Exit MATLAB i File-menyn
MATLAB-miljön: hjälp MATLAB-miljön: hjälp Hjälp fås via MATLAB help i menyn Help Klicka t ex på MATLAB documentation 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. MATLAB-miljön: kommandon MATLAB-miljön: interaktiv MATLAB styrs vanligen från kommandofönstret (Command Window). Kommandon ges efter»-promptern och utförs när return-tangenten tryckts ned. Exempel: >> 42 + 19 61 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 = 4; >> c = a*b c = 2550 >> a+b 109 Variabler i MATLAB En variabel i MATLAB har alltid ett namn (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 tilldelas, utan speciell deklaration (är av typen matris ). kan vara fördefinierad (t ex pi, ans) >> a = a = >> pi.1416 Variabler i MATLAB Variabler i MATLAB visas i delfönstret Workspace Om inte workspace syns markera workspace i menyn View Workspace
Spara och hämta variabler Variabler kan sparas på fil och laddas upp vid annan MATLAB-session senare. I Workspace används knapparna Ladda upp Spara Variabler sparas då som s k MAT-filer, filer med ändelsen.mat Filen (och variablerna) kan laddas upp senare i samma fönster MAT-filer kallas binära och är ej läsbara eller editerbara. Variabler i MATLAB kan skrivas ut i olika format >> format long >> pi.1415926558979 >> format long e >> format short e >> pi.1416e+000 Observera att noggrannheten i pi är lika, det är bara utskriftsformatet som ändras. Variabler i Matlab Variabler i MATLAB Komplexa tal kan skapas med complex >> z = complex(1.2, 2.5) z = 1.2000 + 2.5000i eller i en beräkning >> z = sqrt(-2) z = 0 + 1.4142i Textsträngar skrivs innanför fnuttar, dvs >> namn = 'Nisse'; >> hej = ['Hej namn! ] hej = Hej Nisse! >> namn(2) = a namn = Nasse Exemplet visar att texter (textsträngar, strängar) fungerar som arrayer Vektorer (arrayer) Generera vektorer Kolonnvektor och radvektor i MATLAB Semikolon i vektorer ger radbyte >> vkol = [ 1; 2; ; 4; 5 ] >> vrad = [5 6 7 8 ], x = vkol = % Kolonnvektor 1 2 4 5 vrad = % Radvektor 5 6 7 8 x = % Skalär 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 4 5 >> vektor2 = 0.0:0.05:2.0 >> vektor2 = 0.0:0.05:2.0 vektor2 = 0 0.0500 0.1000 0.1500... 1.9500 2.0000
Generera vektorer Matriser Kommandot linspace skapar också vektorer linspace(startvärde,slutvärde,antal_steg) >> v = linspace(0,2,10) v = 0 0.2222 0.4444 0.6667 0.8889 1.1111 1. 1.5556 1.7778 2.0000 Dessa två metoder används när man skapar x-axlar vid grafik Skapa 1 A = 5 7 Semikolon eller retur i matrisen ger radbyte Semikolon efter hela uttrycket undertrycker utskrift >> A = [1 7; 5 ]; >> A A = 1 7 5 >> A = [1 7 5 ] A = 1 7 5 Matris elementvis 1 7 A = 5 >> A(1,1)=1; A(1,2)=7; >> A(2,1)=5; A(2,2)=; >> A A = 1 7 5 Att bygga ut en matris 1 7 Givet A = 5 1 7 skapa A = 5 2 1 >> A = [A; 2 1]; alternativt >> temp = [2 1]; >> A = [A; temp]; Skilj på rad- respektive kolonnvektorer! >> temp2 = [2;1]; >> A = [A; temp2];??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns. Element, rader och kolonner Delmatriser, kolon-notation Man kan arbeta med enskilda element, rader, kolonner, submatriser Kolon (:) betecknar hel rad respektive hel kolonn >> A(2,1) 5 >> A(2,:) 5 >> A(2,:) = [0 0] A = 1 7 0 0 2 1 Delmatriser till matrisen A, m n kan skapas snabbt med kolon-notation A(:,j) j:te kolonnen av A A(i,:) i:te raden av A A(i:k,j:m) delmatris, rader i-k och kol j-m A = 1 7 6 0 0 5 2 1 >> B = A(2:,1:2) B = 0 0 2 1 Exempel Plocka ut denna delmatris
Speciella matriskommandon Bestämma storlek och längd 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 rand(m,n) slumpmatris + ett stort antal andra >> B = ones(2,) B = 1 1 1 1 1 1 >> eye(2) 1 0 0 1 >> C = zeros(2,2) C = 0 0 0 0 >> A = [1 7; 5 ] >> vkol = [ 1; 2; ; 4; 5 ] >> size(a), size(vkol), length(vkol) 2 2 5 1 5 Matrisoperationer, aritmetiska Elementvisa operationer Aritmetiska operationer på matriser kan göras direkt. Addition/subtraktion OK om samma storlek, t ex C = A + B, där A och B är m n Matrismultiplikation, C = A*B, fungerar bara om antal kolonner i A är samma som antal rader i B Matrisdivision, C=A/B eller C=A\B \ (backslash) är speciell, t ex x=a\b ger lösning till linjärt ekvationssystem / används vanligen inte i matrissammanhang Operationer, t ex *,/,^ kan även utföras elementvis Exempel: B^2 = B*B men b B.^2 = b 2 11 2 21 2 b12 2 b22 >> B = [1 7;5 ]; >> B^2 6 28 20 44 >> B.^2 1 49 25 9 Generera en tabell Matrisalgebra Elementvisa operationer används ganska ofta. Skapa t ex en tabell >> tal = 0:5; >> tabell = [ tal; tal.^2; tal.^ ] tabell = 0 1 2 4 5 0 1 4 9 16 25 0 1 8 27 64 125 Vad händer om storlekarna inte stämmer? >> A=[1,7;5,]; >> x = [2; 1]; >> A*x 9 1 1 Ax = 5 7 2 1 2 1 men xa = 1 5 funkar inte >> x*a??? Error using ==> * Inner matrix dimensions must agree. är OK, 7 Vanliga räkneregler för matriser/vektorer gäller!
Matrisalgebra 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. Är en intelligent operator som ändrar metod efter vilket problem som ska lösas Om triangulärt system utförs framåt resp bakåtsubstitution Etc, etc Ex) lösning av ekvationssystem Antag att vi vill lösa följande ekvationssystem: x 1 + x2 x =.6 x1 + 2x2 + 4x = 2.1 x1 + 4x2 + 5x = 1.4 Vi kan skriva om ekvationssystemet på formen Ax = b: A = 1 1 1 2 4 1 4 5 x1 x = x2 x.6 b = 2.1 1.4 Ex) lösning av ekvationssystem Funktioner och operatorer Översätt till MATLAB >> A = [ 1-1 ; 1 2 4 ; -1 4 5]; >> b = [.6 ; 2.1 ; -1.4]; >> x = A\b x = 1.4818-0.4606 0.848 Finns mängder av inbyggda funktioner abs(x), sqrt(x), sin(x), log(x), log10(x), >> a = [-2 4]; >> abs(a) 2 4 >> sin(a) -0.909-0.7568 Observera att alla arbetar på vektorer och matriser!! Funktioner och operatorer Fler exempel min(x) ger minsta värdet i x max(x) på samma sätt, men största värde sum(x) summan av elementen i x cos(x) cos(x)för alla element i x exp(x) e x för alla element i x log2(x) tvålogaritmen av elementen i x lu(a) LU-faktorisering av matrisen A qr(a) QR-faktorisering av matrisen A fzero(f) Lösning till ekvationen f(x)=0 etc. Enkel grafik (2D) 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,2*pi,50); >> y = cos(x)+sin(x); >> plot(x,y) OBS! x är en talföljd här, en sk vektor. Funktioner i MATLAB fungerar även på talföljder!
Enkel grafik (2D) Enkel grafik (2D) 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 ) Lägg till texter på axlarna i bilder, som skapats med plot-kommandot >> x = linspace(0,*pi,50); y = sin(x); >> plot(x,y); >> title( Sinus mellan 0 till \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... Enkel grafik (2D)...blir det här title(...) Mera grafik: D (surf, mesh,mm), Movie, Uicontrol ylabel(...) surf(x,y,z) xlabel(...) 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. 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 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 Ett litet exempel MATLABs editor öppnas och följande kod skrivs in % Lisas ritprogram, LisasFil.m x0 = 0; x1 = 2*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 Inläsning av värde till variabel med ledtext x = input('ge ett tal'); Utskrift av text och siffror disp(['värdet blir x=' num2str(x)]); Dessutom finns: Villkorssatser Loopar Egendefinierade funktioner
MATLAB: Selektion (if) MATLAB: Relationsoperatorer Varianter med else-gren x = input('give a number x: '); if x > 0 disp('x is greater than zero!') elseif x < 0 disp('x is less than zero!') else disp('x is equal to zero!') end I if-satsen används logiska uttryck MATLAB har flera relationsoperatorer (Booleska operatorer) för jämförelser < Mindre än <= Mindre än eller lika med > Större än >= Större än eller lika med == Lika med ~= Skilt från I MATLAB gäller att om något är sant så har det värdet 1 (ett) och om något är falskt så har det värdet 0 (noll). MATLAB: Logiska operatorer MATLAB: Iteration (for) Följande logiska operatorer finns i MATLAB: & Och ~ Negation (inte) Eller Xor Exklusivt eller A & B A och B: sant om både A och B är sanna A B A eller B: sant om antingen A, B, eller båda är sanna ~A inte A: sant om A är falskt och falskt om A är sant xor(a,b) Exkl eller: sant om A är sant eller om B är sant (ej sant om A och B är sanna) Iteration Iteration med for innebär att något blir exekverat (utfört) ett förutbestämt antal gånger. % Bygg upp en vektor med for-loop. x = []; % Starta med tom vektor for k = 1:5 x(k) = input('give element in x:'); end k = 1:5 betyder att k i tur och ordning antar värdena 1, 2,, 4, 5 MATLAB: Iteration (while) Egna funktioner Iteration (while) Iteration med while innebär att något blir exekverat (utfört) tills ett visst villkor är uppfyllt x = []; % Tom vektor vid start a = 1; while a > 0 % utför så länge som x = [x a]; % a större än 0 a = input('enter value: '); end Observera att i while finns ingen räknare motsvarande k och x i for-exemplen Funktion kan ses som en svart låda. Man stoppar in indata och får som resultat utdata. I den svarta lådan utförs beräkningar och liknande Den svarta lådan har egna variabler, för mellanlagring av data, som vi utanför ej behöver bry oss om Enda kommunikation med omvärlden via in- och utdata (in- och utparametrar) indata utdata
Egna funktioner Egna funktioner Första raden i funktionsfil inleds med function, därefter utparameterlista, funktionsnamn och inparameterlista. function [y1,y2,,yn]=funknamn(x1,x2,,xm) % Kommentarer Satser En funktion kan ha noll, en, eller flera in- och utparametrar. Kan t o m ha variabelt antal parametrar Funktioner lagras i m-filer. Filnamnet måste stämma överens med funktionsnamnet, funknamn.m Funktioner körs genom att anropas [b1,b2,,bn]=filnamn(a1,a2,,am) Efter anropet behåller inparametrarna sina värden. De påverkas ej av funktionen. I en funktion kan finnas anrop till andra funktioner Egna funktioner: exempel 1 Några små tips Matematiska funktionen f(x) = sin(x)cos(x) blir så här som MATLAB-funktion function f = sincos(x) % Beräknar sin(x)*cos(x) f = sin(x)*cos(x); Anrop: >> x = 0.5; y = sincos(x) y = 0.4207 OBS. Funktionen lagras i m-filen sincos.m Piltangent återkallar tidigare kommando pl återkallar senaste kommando vars namn började med pl (plot t ex) kan också använda delfönstret command history. Dubbelklicka på ett kommando för att upprepa. Fönstret öppnas under menyn View Command history Några små tips Workspace och Array Editor 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 Om man dubbelklickar på en variabel i delfönstret Workspace så öppnas ett nytt fönster, Array Editor Dubbelklicka på en variabel i Workspace
Workspace och Array Editor Spara och hämta variabler Med Array Editor kan man ändra variabelstorlek och värden. I kommandofönstret kan man på exakt samma sätt spara med kommandot save filnamn variabler >> save MinaMatriser A B sparar variablerna A och B på filen MinaMatriser.mat Kan ladda in variablerna genom load filnamn Det finns även andra format än mat-formatet att välja på (testa help save)