Datorövning 1: Introduktion till MATLAB Om datorövningarna Övningarna går ut på att bekanta sig med MATLAB och se hur man löser olika typer av problem. Arbetet är självständigt. Hoppa över sådant ni tycker verkar för lätt och tveka inte att fråga närvarande handledare om det är något ni undrar. För kommandon, variabelnamn och MATLABresultat används skrivmaskinsstil. För matematiska variabler och formler används kursiv stil. Grundläggande information om programmet Information från andra källor Datorövning 1 innehåller material som liknar följande kapitel i kursboken: Kapitel 1 Att börja använda MATLAB, Kapitel 2 Enkel grafik, Kapitel 3 Linjära ekvationssystem och matriser och Kapitel 6 Programmering i MATLAB. Det kan även vara intressant att öppna titta på Getting started i helpdesk. 1. Start och avslutning av MATLAB Starta MATLAB genom att klicka på MATLAB-ikonen. Ett s k kommandofönster öppnas. Du får bl a upp följande text: >> To get started, type one of these: helpwin, helpdesk, or demo. For product information, type tour or visit www.mathworks.com. Teckenkombinationen >> är MATLABs prompter. Den visar att MATLAB är beredd att ta emot kommandon. I exemplen nedan låter vi promtern vara med. Ett kommando ges efter MATLABpromtern och utförs då return-tangenten trycks ned. För att avsluta MATLAB: skriv exit eller quit Bra att veta redan nu: Vill du avbryta någon körning i MATLAB, men ändå stanna kvar i MATLAB: tryck ctrl-c. Det kan vara bra att prova några av de kommandon som föreslås ovan, speciellt demo och tour. Spar dock detta tills du har tid över. Sida 1
Introduktion till matriser i MATLAB MATLAB är ett s k interpreterande språk, vilket innebär att så fort man givit ett kommando, så får man svar. Man behöver dessutom aldrig typdeklarera variabler, utan inför dem när helst man dem behöver. 1. Använd MATLAB som en enkel räknedosa Prova att använda operatorerna,,,, ˆ samt någon matematisk funktion(avsnitt 2.4). Exempel: >> 2*3 + 4 Värdet lagras automatiskt i ans (answer) om inget annat variabelnamn anges. Du kan skapa egna variabler t ex genom att ge följande kommando: >> minvar = 2*3 + 10.6 Svaret lagras då i variabeln minvar. Observera att decimalpunkt skall användas; inte decimalkomma. Notera att svaret från MATLAB innehåller variabelnamnet som angavs. Variabler används direkt i aritmetiska uttryck, detta gäller även variabeln ans. Prova att använda dina variabler men gissa först svaret: >> ans + minvar / 2 Prioritetsordningen fungerar precis som man väntar sig. Prova att använda parenteser för att upphäva denna: >> (10 + minvar) / 2 Ge nu kommandot >> who så ser du vilka variabler som finns i arbetsarean. För att få mer information om variablerna, skriv >> whos den talar även om vilken storlek variablerna har. Vi skall om en stund skapa större variabler än den skalära minvar. För att få mer information om ett visst kommando i MATLAB, så skriver man >> help kommando Sida 2
prova nu >> help who Prova även att skriva enbart >> help Kommandon som ges utan att avslutas med semikolon, ;, gör att MATLAB skriver ut svaret genast. Om man inte vill ha svaret utskrivet så avslutar man kommandot med ett semikolon. ge nu följande kommando: >> minvar2 = 2*3 + 4; Skriv sedan who eller whos för att se att det faktiskt skapades en variabel i alla fall. Vill du se värdet av minvar2, så skriv bara variabelns namn: >> minvar2 Det går alltid att få reda på en variabels värde genom att skriva dess namn, oavsett hur den skapats. 2. Vektorer i MATLAB Namnet MATLAB kommer ursprungligen från MATrix LABoratory. Den grundläggande datatypen är en matris, vilket även kan ses som en slags tabell. (Vi tänker oss nu bara tvådimensionella matriser). En matris med st rader och st kolonner sägs ha storleken. I andra programmeringsmiljöer arbetar man med ett tal åt gången, men i MATLAB arbetar man alltså med hela matriser på ett smidigt och enkelt sätt. Om matrisen har storlek så är det ett vanligt tal (skalär), om den är av storlek eller så kallas den för radvektor respektive kolonnvektor. En vektor kan ses som en slags punktmängd. Variabler i MATLAB är oftast vektorer och matriser, t ex behövs vektorer då man skall rita grafen till en funktion. Prova nu följande: >> vkol = [ 1; 2; 3; 4 ], vrad = [ 5 6 7 8 ] Fler variabler kan definieras på samma rad genom att man använder kommatecken eller semikolon mellan variabeldefinitionerna. Sida 3
För att särskilja element i en kolonnvektor så används semikolon, ;. För att särskilja element i en radvektor så används blanktecken, som ovan, eller kommatecken, som nedan: >> vkol = [ 1; 2; 3; 4 ], vrad = [ 5, 6, 7, 8 ] Skriv whos för att se vilka variabler du har. Hur gör du för att ändra enbart ett element i en vektor? Skriv nu >> vkol( 2 ) = 2.2 och se vad som händer. För att skriva ett kommando igen med endast små ändringar kan den bekväme prova att trycka på -tangenten. Prova detta och ändra till >> vkol( 6 ) = 1 Vektorn utökas och de element som inte specificerades blir nollor. Vektorer kan också skapas med kortkommandon, s k kolon-notation eller med ett kommando som heter linspace. Prova följande: >> vektor = 0:8, vektor2 = 0:0.5:2, vektor2lin = linspace(0,2,5) Ändra linspace(0,2,5) till linspace(0,2,10) och jämför resultaten. Verifiera din upptäckt genom att se vad hjälpen säger >> help linspace Om man snabbt vill göra om en radvektor till en kolonnvektor, så kan man transponera den (dvs med apostrof, ). Prova med att skriva >> nyradvekt = vkol 3. Matriser i MATLAB Definiera en -matris: >> A = [ 8 1 6; 3 5 7; 4 9 2 ] eller så här Sida 4
>> B = [ 1 2 3 4 5 6 7 8 9]; Raderna i en matris skils åt med semikolon, :, eller genom att trycka på return-tangenten. MATLAB ger inget svar innan man avslutat matrisen. Skriv whos igen nu för att se storleken hos matriserna. För att komma åt endast ett element så indexeras matrisen på samma sätt som vektorerna. Vad tror du händer nu: >> B, B(3,1) = A(1,3) Kommandot size kan användas om man vill se storleken på en matris: >> size(a) Vill man spara matrisens storlek i två variabler m och n så skriver man: >> [m,n] = size(a) 4. Rita funktioner av typen Att rita funktioner av en variabel är lätt i MATLAB. Rita t ex i intervallet [0, 3 ]. Skriv följande: >> x = 0:3*pi; >> y = sin( x ); plot( x, y ); Ett nytt fönster, s k grafikfönster, öppnas. Resultatet blir en kantig graf, eftersom enbart 10 punkter används. Skriv length(x) deller whos för att se längden på vektorerna x och y. Skalningen av axlar görs automatiskt. Vi ser här att sin-funktionen faktiskt kan ha en vektor som argument och returnera motsvarande resultat som en vektor, dvs matematiska funktioner i MATLAB fungerar elementvis på vektorer! Förklara vad som händer om endast -värden ges (plot(y)). Prova även följande: >> x2 = linspace(0, 3*pi, 40); >> y2 = sin( x2 ); >> plot( x, y, -, x2, y2, -- ); Vad händer? Vad ger nu length(x)? Varför ritas ut i ett större intervall än? Sida 5
Ena linjen blev streckad genom att vi lade till parametern --. Man kan även använda fplot för att rita funktioner. Den fungerar dock enbart för MATLABs standardfunktioner (som sin(x), cos(x), exp(x),...) samt för egendefinierade funktioner som man skriver själv och lagrar i s k M-fil. 5. Lokal arbetskatalog För kommande övningar behöver du skapa en ny arbetskatalog med namnet matlab01. Skriv sedan >> addpath d:\matlab01 Det går även att gå in under Set path i File-menyn. Spara fortsättningsvis alla filer du skapar i denna katalog. För att ändra aktiv katalog till din nyskapade katalog skriver du >> cd c:\temp\matlab99 6. Spara bilder Kommandot print används för att spara en ritad bild eller ta ut den på papper. Skriv >> help print för att se vilka format man kan spara bilden i. Det är vanligt att man inte hinner läsa all text som fladdrar förbi, prova igen >> more on >> help print då skrivs bara en liten del i taget ut på skärmen. Man trycker return för att fortsätta utskriften eller qför att avsluta den. Om du ger följande: >> print -djpeg bildnamn så sparas grafen som en bild på filen bildnamn.jpg. Man kan även använda menyerna i grafikfönstret för att spara bilden på en fil. Välj File-menyn och sedan Export. Blädderlistan Save as type visar ett antal format. I PC-miljö går det att skriva ut genom att gå in i grafikfönstrets File-meny och välja print. Sida 6
7. Generering av funktionstabeller Om man istället vill ha en funktionstabell för en funktion, t ex vektorer man har till en matris: >> x = 0:10; >> y = x.ˆ2; >> funktionstabell = [ x; y ], så kan man sätta ihop de Här ser vi en s k elementvis operation. x.ˆ2 innebär att varje element i x kvadreras och svaret blir en vektor av samma längd som x. Punkten anges för att skilja elementvisa operationer från s k matrisoperationer. Matrisalgebra hör dock inte till denna kurs men finns översiktligt beskrivet i Appendix B. 8. Att ladda och spara data För att spara numeriska resultat på en fil används kommandot save. Om det anropas utan parametrar lagras samtliga variabler i arbetsarean. Det är vanligt att andra program skall kunna läsa filen, då ger man parametern -ASCII vilket skapar en textfil istället för en binärfil. Prova att lagra en variabel i en binärfil: >> x = rand(10); >> save minvar.mat x Filen minvar.mat innehåller nu variabeln x. Det går nu att läsa in variabeln >> clear >> load minvar.mat >> x När data lagras i ASCII-format så sparas inte variabelnamnet. Då en matris inläses från textfil får variabeln samma namn som filen. För att läsa in datafiler som är av ostrukturerad karaktär finns kommandon fread, fscanf, fgetl, etc. M-filer: Kommandofiler och funktionsfiler När man börjar behärska MATLAB lite mer och man behöver många kommandon för att lösa ett problem, så är det klokt att spara dessa i en s k M-fil, dvs filer som har suffix.m. Sida 7
Det finns två sorters M-filer, dels kommandofiler och dels funktionsfiler. En funktionsfil måste innehålla en funktion som man definierar själv med kommandot function. En M-fil exekveras (körs) då man skriver filens namn (utan suffixet) när man är i kommandofönstret i MATLAB. Filen kan utnyttja redan definierade variabler, men kan även läsa in från tangentbord och skriva ut på skärmen. Du skall nu få provköra några M-filer som redan är färdiga. Hämta hem följande filer från http://www.tdb.uu.se/ matlab/kurs/dator1/ Användarnamnet är MATLAB99 och lösenordet är externkurs. ritafunk.m surprise1.m surprise2.m sork.m aritmetikspel1.m aritmetikspel2.m Testkör, svara på eventuella frågor och njut av resultaten! Nu skall du få skriva en egen liten kommandofil. Öppna editorn genom att skriva: >> edit Editorn fungerar ungefär som ett Word-dokument, t ex kan man klippa och klistra textrader. Man skriver in det man vill programmet skall göra i editorn, gärna snyggt och prydligt (rad-för rad), så det är lättläst för andra. Kommentarer inleds med %-tecken. Programmet utför kommandona i den ordning som de står i filen. Om någon kommandorad är för lång så skriver man tre punkter,..., sist på den rad som måste avbrytas, t ex texten = [ Hej och välkommen till ett roligt program!,... Vi hoppas att du skall tycka om MATLAB. ]; disp( texten ); Skriv nu: % Mitt första program. % ex1.m disp( Hej! ); x = input( Ge ett tal: ); y = input( Ge ett till tal: ); sum = x + y; disp( Summan av talen blir: ); sum % prova även med disp(sum) här Sida 8
Spara programmet som ex1.m (antingen i File-menyn, med diskett-symbolen eller snabbast med ctrl-s). Flytta muspekaren till kommandofönstret och skriv >> ex1 då körs ditt program! Här visas även att inläsning från tangentbord sker med input och utskrift på skärm med disp. Nu kan du ändra lite i editorn, t ex prova disp(sum) istället. Kom ihåg att spara nya versionen innan du provar att köra det modifierade programmet. Nu ska du få skriva en egen funktion och spara den på f.m Öppna nytt fönster i edit (File - New) och skriv in följande: function y = f( x ) % MATLAB-funktion som returnerar värdet % av en matematisk funktion % f.m y = x.*x - sin(x) + 5; Spara som f.m. Nu kan du i kommandofönstret skriva följande: >> v = linspace(0,2*pi); >> w = f(v); >> clf; >> plot( v, w ); Eller, ännu snyggare: Öppna en ny fil, ex2.m, i vilken du lägger in dessa kommandon och modifierar så att användaren kan ge intervallet som funktionen skall ritas i: % Ex2.m % Lek med funktioner. disp( Program som ritar en specialfunktion i intervallet [a,b] ); a = input( Ge a: ); b = input( Ge b: ); v = linspace(a,b); w = f(v); clf; plot( v, w ); % Testa även med area(v, w)... Sida 9
Sedan kör du programmet med >> ex2 Om du vill se vilka filer du har i din aktuella katalog, så skriv >> dir Innehållet i en M-fil kan du få med kommandot type, prova >> type ex2 >> type plotyy Skriv nu >> help ex1 samt >> help f Vad händer? Vi nämnde ovan att man kan spara en MATLAB-session med kommandot diary. Man kan återanvända kommandona om man editerar diary-filen och döper om den så det blir en M-fil. Skriv: >> diary matrisen clear; n = 5 A = magic(n); n = 10 A = magic(n); clf; subplot(2,1,1); surf(a); subplot(2,1,2); mesh(a); >> diary off Sida 10
Modifiera filen matrisen med edit och kalla den matrisen.m Nu kan du testköra ditt nya program genom att ge >> matrisen Demonstrationsexempel och information om MATLAB För att få hjälp i MATLAB så kan man t ex använda helpdesk, help eller helpwin För demonstration av MATLAB, SIMULINK och s k toolboxar (Communications, Control System, Financial, Higher-Order Spectral Analysis, System identification, Image Processing,...) prova nu demo-kommandot: >> demo och välj sedan önskad demonstration. Ibland medför en demonstration att motsvarande MATLABkommandon skrivs ut i kommandofönstret. Vill du avbryta, så tryck ctrl-c. 9. Allmän information om MATLAB-produkter För att få information om återförsäljare, böcker etc som har med MATLAB att göra så kan man få stor hjälp av MathWorks hemsidor. Öppna din internetbläddrare (t ex Netscape eller Explorer) och ge URL: http://www.mathworks.com/ Bilden på sid 468 har ändrats, men innebörden är densamma på Vilka MATLAB-böcker finns? Se t ex under och klicka på General. http://www.mathworks.com/products/ http://www.mathworks.com/support/books/ Överst bland alla böcker står den du just nu har framför dig! Klicka och se vilken information som finns om denna. Varning! Deras länk är felaktig, för att få information om kursen måste du ge följande URL http://www.tdb.uu.se/ matlab Sida 11
10. Tillämpningar där MATLAB använts Ge kommandot >> tour välj MATLAB In Industry. Bl a kan man se här att Forskmarks kraftstation och SAAB Military aircraft bygger sina simuleringsmodeller i MATLAB. Samma information kan erhållas på: http://www.mathworks.com/industry/ Sida 12