TEKNISKA HÖGSKOLAN Matematik Fredrik Abrahamsson Introduktion till MATLAB
Introduktion till MATLAB sid. 2 av 12 Innehåll 1 Vad är MATLAB? 3 1.1 Textens syfte..................................... 3 2 Grundläggande begrepp 4 2.1 Inmatning i MATLAB................................ 4 2.2 Aritmetiska operationer............................... 5 2.3 Elementära funktioner................................ 6 2.4 Redigering och formatering............................. 7 2.5 Hjälp i MATLAB................................... 8 2.6 Operationer med radvektorer............................ 8 2.7 Generering av vektorer................................ 9 2.8 Kurvritning...................................... 10
Introduktion till MATLAB sid. 3 av 12 1 Vad är MATLAB? MATLAB är ett interaktivt program, speciellt lämpat för att lösa matematiska problem med numeriska metoder. Namnet MATLAB kommer ifrån MATrix LABoratory, då programmets ursprungliga uppgifter var att hantera matriser. Idag har det vidareutvecklats till ett programmeringsspråk med mycket kraftfulla numeriska rutiner, och det innehåller även verktyg för grafiska presentationer. Många numeriska problem löses på en bråkdel av tiden med MAT- LAB, jämfört med t.ex. Fortran eller C, vilket har fått många företag att börja använda MATLAB i beräkningssyfte. Exempel på tillämpningsområden av MATLAB är: Matrishantering (Aritmetiska operationer, lösning av linjära ekvationssystem, beräkning av egenvärden m.m.) Grafisk presentation (2- och 3-dimensionella funktionsgrafer, nivåkurvor, vektorbilder m.m.) Statistiska beräkningar (Beräkning av max, min, medelvärde, standardavvikelse m.m.) Slumptalsgenerering Ickelinjära ekvationer (Nollställen till funktioner av en variabel, lösning av icke-linjära ekvationssystem m.m.) Integration (Numerisk integration av funktioner av en variabel) Differentialekvationer (Numerisk lösning av ett skalärt begynnelsevärdesproblem, eller system av sådana) Signalbehandling (FFT, Laplace- och Z-transformer) 1.1 Textens syfte Den här texten är tänkt som en något komprimerad introduktion till MATLAB, med mycket moderata krav på förkunskaper i linjär algebra. I texten finner läsaren ett antal övningsuppgifter, som det är meningen att man (ev. tillsammans med en kamrat) skall försöka att lösa på egen hand, innan man löser labuppgifterna. I För att vidare utforska MATLABs potential rekommenderas MATLAB User s guide, eller någon av de många svenska instruktionsmanualerna.
2 Grundläggande begrepp Introduktion till MATLAB sid. 4 av 12 Vi börjar med att studera de mest grundläggande kommandona och deras användning. Uppgifterna som du skall lösa lär dig förhoppningsvis att kommunicera med MATLAB, och ger dig några exempel på saker som MATLAB kan göra - t.ex. att rita grafer till funktioner. Vid Tekniska Högskolan finner du Matlab i windows via startknappen All programs JTH Matematik Matlab 2.1 Inmatning i MATLAB Efter att man har startat MATLAB får man upp ett antal fönster och det högra är kommandofönstret. Där finner man prompten > > som betyder att MATLAB är redo att ta emot instruktioner i detta fönster. Alla inmatningar avslutas med RETURN. Man kan nu tilldela ett variabelnamn ett värde; t.ex. så ger inmatningen > > G=12 följt av RETURN, resultatet G = 12 Variabeln G och dess tilldelade värde sparas av MATLAB i dess arbetsutrymme (workspace) och man kan använda variabeln senare under samma arbetspass. Med kommandot who får man en lista över alla variablerna i MATLAB s arbetsutrymme. Värt att notera är att man kan avbryta en pågående beräkning med CONTROL-C. MATLAB arbetar (nästan) bara med en enda objekttyp - matriser - som är listor av (reella eller komplexa) tal. Det svåraste med att lära sig effektiv MATLAB-programmering är att lära sig att tänka i termer av matriser, då man är van vid att hantera ett tal i taget, t.ex. när man programmerar sin miniräknare. Matrishanteringen är emellertid också fördelen med MATLAB; när man väl lärt sig att hantera matriser minskas programmeringsinsatsen avsevärt. Vad matriser är och vad de har för matematiska egenskaper får du lära dig i kursen Linjär Algebra och avsnitt 3 i denna laboration ägnas åt matriser. Vi kommer i den första delen nästan uteslutande att syssla med vektorer, som är endimensionella listor av tal (den enklaste matristypen). I MATLAB så definieras en vektor (matris) vanligtvis genom att man tilldelar ett variabelnamn ett värde (uttryck), följt av RETURN. Inmatningen > > A=[2 4 5] ger resultatet A = 2 4 5 Observera användningen av hakparanteser, jämfört med den förra inmatningen. Naturligtvis
Introduktion till MATLAB sid. 5 av 12 behövs mellanslag (alternativt kommatecken) mellan de olika siffrorna. Efter inmatningen gäller nu att variabeln A representerar en radvektor med tre element. (Alt. en matris av typen 1 3). MATLAB lagrar vektorn som tre tal, A(1), A(2), A(3) där A(1) är vektorns första tal 2, A(2) är vektorns andra tal 4 och A(3) det sista talet 5. > > A(2) ans = 4 MATLAB definierar (efter varje beräkning) automatiskt en variabel ans vars värde är lika med värdet av den senaste beräkningen. Om man inte vill se resultatet av en inmatning på skärmen avslutar man kommandot med semikolon ; innan RETURN, man kan också ange flera inmatningar på samma rad genom at skilja dem åt med ett kommatecken,. Dessa exekveras i den ordning de skrevs in när man trycker på RETURN. En matris med fler än en rad kan matas in antingen som > > B=[1 2 3; 4 5 6; 7 8 9]; eller > > B=[ 1 2 3 4 5 6 7 8 9]; vilket resulterar i att variabeln B nu representerar 3 x 3 matrisen med elementen som ovan. I lite mer avancerade tillämpningar definierar man ofta nya matriser med hjälp av andra, redan definierade matriser. T.ex. kan man göra så här: > > x=[1 2] x= 1 2 > > y=[x 3 4] y= 1 2 3 4 Med kommandot clear raderas arbetsutrymmet. Pröva genom att exekvera kommandona who, clear, who i en följd. Övning 1: Mata in vektorerna x=[2 3 6 7], och y=[1 1 4 2 9]. Vad är x(3)? 2.2 Aritmetiska operationer De vanliga aritmetiska operationerna mellan tal (skalärer) ser ut så här: + addition - subtraktion / division exponentiering
Talet π skrivs pi medan talet e (= e 1 ) skrivs exp(1). Skriver du > > pi blir svaret ans = 3.1416 Introduktion till MATLAB sid. 6 av 12 (Kom ihåg att ans står för det senaste svaret). De aritmetiska operationerna har de vanliga prioritetsordningarna, dvs. multiplikation utföres före addition osv. Parenteser tolkas precis som vanligt. > > 27 1/3 ger svaret 9 (= (27 1 )/3) medan > > 27 (1/3) ger svaret 3 (= 3 27). 2.3 Elementära funktioner MATLAB har alla de vanliga elementära grundfunktionerna, t.ex. exponential- och logaritmfunktionerna, de trigonometriska funktionerna, kvadratrotsfunktionen och flera andra. I MATLAB skrivs några av dem så här: Funktion x e x ln(x) lg(x) sin(x) cos(x) tan(x) arcsin(x) arccos(x) arctan(x) syntax i MATLAB sqrt(x) exp(x) log(x) log10(x) sin(x) cos(x) tan(x) asin(x) acos(x) atan(x) För att beräkna ett funktionsvärde skriver man funktionens namn, följt av argumentet innanför parenteser (precis som man ofta skriver med penna.) Om vi vill beräkna sin(π/2) skriver vi > > sin(pi/2) och får resultatet ans = 1
Introduktion till MATLAB sid. 7 av 12 Vi beräknar e ln( 4) ; > > exp(log(sqrt(4))) ans = 2.0000 Vi beräknar roten till ekvationen 2 tan x = 4 för π/2 < x < π/2. Med handräkning får vi roten till (exakt) x = arctan( 4 2 ). Med MATLAB kan vi beräkna ett närmevärde: > > x = atan(4/sqrt(2)) x = 1.2310 2.4 Redigering och formatering Man kan återfå tidigare givna kommandorader genom att trycka på piltangenten upp. Senare kommandon får man genom att trycka på piltangenten ned. Man kan redigera ett givet kommando genom att flytta markören med piltangenterna höger och vänster. Det antal decimaler som MATLAB skriver ut kan man styra med hjälp av kommandot format. De vanligaste varianterna är format short, format long som ger 5 resp. 15 signifikanta siffror. > > format long; 10*pi ans = 31.41592653589793 > > format short; ans ans = 31.4159 Övning 2: Beräkna med hjälp av MATLAB: a) e 2 sin(π/6) b) tan(π/4) ln( 2) c) roten till ekvationen e x = 15 (Du får själv lösa ut x för hand ). Övning 3: Liksom alla kalkylatorer räknar MATLAB enbart med närmevärden, dvs. alla tal lagras med ett ändligt antal decimaler. Här är en enkel illustration av detta. Beräkna talet e 2 e e dels exakt, dels med hjälp av MATLAB. Övning 4: Precis som din kalkylator kan MATLAB inte hantera hur stora tal som helst. När beräkningarna resulterar i ett allför stort tal skriver MATLAB ut resultatet Inf (infinity). a) Beräkna talet 10 104.
Introduktion till MATLAB sid. 8 av 12 b) Beräkna talet (10 104 ) 1/104 dels exakt, dels med hjälp av MATLAB. Varför blir svaret som det blir? c) Beräkna Inf+Inf, Inf-Inf. Hur tolkar du resultatet? 2.5 Hjälp i MATLAB Att flitigt använda sig av hjälpfunktionen i MATLAB är ett bra sätt att utvidga sitt kunnande om dess funktioner. Hjälpfunktionen är organiserad i nivåer - en beskrivning av hjälpmöjligheterna får du om du skriver help help. Om man känner till ett kommando så kan man alltid skriva help följt av kommandot, vilket resulterar i en beskrivning av kommandot. Alternativt kan man skriva helpwin följt av kommandot; då får man hjälptext i ett separat hjälpfönster. Om man vill starta ett separat hjälpfönster och själv navigera sig fram kan man skriva helpbrowser. Kommandot demo startar en java-baserad demonstration av MATLAB s olika möjligheter. Om du skriver help elfun (eller helpwin elfun) får du en lista av de elementära funktioner som MATLAB hanterar. Du känner säkert igen många av dem, men t.ex. funktionen fix kanske är ny. Övning 5: Ta med hjälp av MATLAB:s hjälpfunktion reda på vad funktionerna fix och abs gör. 2.6 Operationer med radvektorer MATLAB s styrka visar sig först då man börjar arbeta med vektorer eller matriser. I ett effektivt MATLAB program är så gott som alla variabler vektorer eller matriser. De flesta av de aritmetiska operationerna är definierade också för vektorer (och matriser), men man får vara lite försiktig. Om x och y är två radvektorer av samma längd kan man utföra elementvis (koordinatvis) addition och subtraktion genom att skriva x+y resp. x-y. > > x = [1 2 3], y = [4 5 6]; > > x+y ans = 5 7 9 > > x-y ans = -3-3 -3 Ofta vill man utföra koordinatvisa operationer av andra slag än addition och subtraktion. T.ex. så kanske man vill beräkna den koordinatvisa produkten av två vektorer x och y. Det går då inte att skriva x*y, ty då tolkar MATLAB det som att man vill utföra matrisprodukten av x och y, vilket är något annat (mer om den produkten i kursen Linjär Algebra). Lösningen i MATLAB är att skriva en punkt framför operationen dvs. vi skriver.* istället för * > > x.*y ans = 4 10 18
Introduktion till MATLAB sid. 9 av 12 På samma sätt kan vi utföra koordinatvis division och exponentiering med hjälp av kommandona./ respektive. Försäkra dig om att du har förstått innebörden av elementvisa operationer - dessa är oerhört viktiga. > > x./y ans = 0.2500 0.4000 0.5000 > > y. x ans = 4 25 216 De elementära funktionerna vi nämnde tidigare går också bra att applicera på en vektor eller en matris - de appliceras automatiskt koordinatvis. > > z=[4 9 16]; > > sin(z) ans = -0.7568 0.4121-0.2879 > > sqrt(z) ans = 2 3 4 Se också de viktiga kommandona ones och zeros. Övning 6: Definiera vektorerna x = [7 2 0] och y = [6 2 7]. Beräkna x+y, x-y, x.*y, x./y, y. x och x.*cos(y) Beräkna också x(1)+y(1). 2.7 Generering av vektorer Vi skall nu beskriva ett av de vanligaste kommandona i MATLAB. Lär dig det ordentligt! Låt a, b och h vara givna tal. Man kan då bilda radvektorn x = [a a+h a+2h... b] med hjälp av kommandot x = a:h:b > > x = 0:1:10 x = 0 1 2 3 4 5 6 7 8 9 10 > > y = -5:2:5 y = -5-3 -1 1 3 5 Av naturliga skäl kallas h ofta för steglängd. Analogt så ger kommandot > > x = 0:0.1:pi radvektorn x = [0 0.1 0.2... 2.9 3.0 3.1 ]. Hur lång är x, dvs. hur många element innehåller denna vektor? Fundera först ut ett svar, mata sedan in x enligt ovan och skriv > > length(x)
Introduktion till MATLAB sid. 10 av 12 Om steglängden h skall vara lika med 1 kan h utelämnas; kommandot > > x = 1:5 skapar vektorn x = [ 1 2 3 4 5]. Om b<a kan man ha h<0. Övning 7: (a) Använd en instruktion av typen x = a:h:b för att mata in vektorerna x= [-500-499... 499 500], y = [1 3 5 7 9 11] och z = [0.1 0.2 0.3 0.4 0.5 0.6]. (b) Mata in vektorn x = [1 2... 100] och använd kommandot sum för att beräkna summan 1 + 2 + 3 + + 100. (Skriv först help sum ). (c) Beräkna summan 1 2 +2 2 +3 2 +...100 2. Ledning: skapa först vektorn [1 2 2 2 3 2...100 2 ] (d) Använd hjälpfunktionen och ta reda på vad kommandot linspace uträttar. Skriv därefter linspace(0,1), linspace(1,10) samt linspace(1,100). 2.8 Kurvritning Med MATLAB kan man enkelt åskådliggöra resultat grafiskt. Betrakta två radvektorer x = [x(1) x(2)... x(n)] och y = [y(1) y(2)... y(n)] av samma längd n. Kommandot plot(x,y) ritar ut de n st punkterna (x(1),y(1)),..., (x(n),y(n)) för att sedan sammanbinda dem med räta linjer. (En s.k. kartesisk plot). > > x = [1 2 3 4]; > > y = [1 4 9 16]; > > plot(x,y) Samma resultat får man genom att skriva > > plot(x,x. 2) 16 14 12 10 8 6 4 2 0 1 1.5 2 2.5 3 3.5 4 Om man inte ger ett särskilt kommando så kommer MATLAB att dimensionera koordinataxlarna så att alla punkter syns (s.k. autoscaling). Följande mall kan användas för att rita grafen y = f(x) för a x b. > > x = a:h:b; > > y=f(x); > > plot(x,y) Det första kommandot x = a:h:b; skapar vektorn x = [a a + h a + 2h... b] (vi har valt steglängden h). Nästa kommando beräknar funktionsvärdena för dessa x värden och lagrar
Introduktion till MATLAB sid. 11 av 12 dem i vektorn y. Slutligen ritas punkterna (x,y) som sammanbinds med räta linjer. När man ritar kurvor bör man tänka på att det blir en bättre graf om man har fler punkter (dvs. om steglängden h görs liten) men bara till en viss gräns. Vektorerna bör inte ha fler än ca 400 element. Därefter blir det bara slöseri med beräkningstid och minnesutrymme. > > x = 0:0.1:2*pi; > > y=sin(x); > > plot(x,y) Här ritas funktionskurvan y = sin(x) på intervallet 0 x 2π. Något snabbare är att hoppa över andra raden ovan och istället skriva > > plot(x,sin(x)) 1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1 0 1 2 3 4 5 6 7 Man kan välja hur kurvan skall ritas genom att ge order om en speciell linjetyp och det är även möjligt att rita ut punkterna utan att sammanbinda dem. > > x = 0:0.1:2, y = x.*exp(x); > > plot(x,y, : ) (Prickad sammanbunden kurva) > > plot(x,y,. ) (Punkterna utritade som små prickar) > > plot(x,y, o ) (Punkterna utritade som små cirklar) Om vi vill rita ut graferna för funktionerna f(x) = sin x och g(x) = cos(x) i samma figur kan man använda sig av kommandot hold on för att låsa den aktuella figuren enligt följande. > > x=0:0.1:2*pi; > > plot(x,sin(x)) > > hold on > > plot(x,cos(x)) 1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 Kommandot help plot ger ytterligare information. Övning 8: Rita följande tre funktionskurvor på intervallet [-10, 10]. 1 0 1 2 3 4 5 6 7
Introduktion till MATLAB sid. 12 av 12 a) y = 2cos(x) b) y = 3x 2 + 1 c) y = x 1+x 2 Använd sedan kommandot axis för att få axlarna att gå från -10 till 10 längs x-axeln, och från -1 till 2 längs y-axeln. Man kan även rita en mängd andra typer av grafer, t.ex. stapeldiagram, histogram m.m. > > x = 1:10; bar(x,x. 2)