• No results found

MATLAB 6 i kursen experimentella metoder

N/A
N/A
Protected

Academic year: 2022

Share "MATLAB 6 i kursen experimentella metoder"

Copied!
37
0
0

Loading.... (view fulltext now)

Full text

(1)

MATLAB ® 6 i kursen experimentella metoder

Sten Hellman

Fysikum Stockholms Universitet Övningsuppgifter av

Max Karlovini, Theresia Månsson & Jonas Strandberg

(2)

1 INLEDNING 7

2 VAD ÄR MATLAB? 8 3 KONVENTIONER 9

4 PASS 1- KOMMA IGÅNG 10

4.1 De första stegen – ”Hello World” 10 4.1.1 Logga in på datorn. 10 4.1.2 Starta Matlab 10

4.1.3 Matlabs "skrivbord” (desktop) 11 4.1.4 Say Hello 12

4.1.5 Matlabs hjälpfunktion 12 4.1.6 Avsluta Matlab 14

4.2 Börja räkna 14

4.2.1 Matlab som en räknedosa 14 4.2.2 operatorer 15

4.2.3 variabler 15 4.2.4 konstanter 18

4.3 Miljön i MATLAB 19

4.3.1 Städa upp kommandofönstret: tyst input, fortsättningsrader 19 4.3.2 Format och avrundning 19

4.3.3 Matlabs "Workspace" 20

4.4 ”Play it again Sam”- att upprepa kommandon 21 4.4.1 Att återkalla kommandon 21

4.4.2 Matlabs historiefönster 22 4.4.3 M-filer, vad är det? 22

4.5 Litet om vektorer 23 4.5.1 Skapa vektorer 23 4.5.2 Räkna med vektorer 24 4.5.3 Elementvisa operationer 25

4.6 Litet om matriser 26 4.6.1 Skapa matriser 26 4.6.2 Räkna med matriser 28 4.7 Övningsuppgifter 29

5 PASS 2 – DATORER, FILNAMN OCH MER BERÄKNINGAR 30 5.1 Att navigera på datorn 30

5.1.1 Minne och hårddisk på en dator 30 5.1.2 Filnamn och Sökvägar 31 5.1.3 Fullständiga filnamn 32 5.1.4 Aktuell katalog 33

5.1.5 "Current directory browser" 33 5.1.6 Var söker MATLAB efter filer 34 5.1.7 Var skall jag spara filer 35 5.1.8 Gemensamma matlab-filer 35

5.2 Att spara och läsa tillbaks innehållet i workspace 35

5.3 M-filer 36

5.3.1 Editorn för M-filer 36 5.3.2 Att spara en m-fil på disk 37 5.3.3 Läsa in och köra en m-fil 37 5.3.4 Kommentarer. 37

5.3.5 In- och Utmatning av data till en m-fil. 39 5.3.6 Utskrift när m-file kör - Echo kommandot. 39 5.4 Inbyggda funktioner 40

5.5 Vektorer 40

5.5.1 Operationer på vektorer 40

5.6 Matriser 42

5.6.1 Operationer på matriser 42 5.7 Övningsuppgifte 43

6 PASS 4 – 2D-GRAFIK 45

6.1 Kurvor i två dimensioner 45

6.1.1 Att växla mellan fönster, och städa i fönster. 46 6.1.2 plot-kommandot 46

6.1.3 Styra utseendet på grafiken 47 6.1.4 Koordinataxlar 48

6.1.5 Text 49

6.2 Plotta punkter med fel 50

6.3 Histogram 51

6.3.1 Kommandot bar - stapeldiagram 51 6.3.2 Kommandot hist - histogram 51 6.3.3 Kommadot stairs - konturdiagram. 51 6.3.4 Kommandot stem - stolpdiagram. 52 6.4 Utskrifter av grafik 52

6.5 Spara grafer och flytta till andra program 52 6.5.1 Lägga in bilder i Word 53

(3)

6.6 Fler Kurvor i samma graf - kommandot hold. 53 6.7 Fler grafer i samma fönster - kommandot subplot 54 6.8 Rita i grafer 55

6.9 Logaritm-skalor 57 6.10 Övningsuppgifter 57

7 PASS 5 - LITET OM TEXT-STRÄNGAR, MER BERÄKNINGAR, ANPASSNINGAR 58

7.1 MATLABs Workspace Browser 58 7.1.1 Array Editorn 59

7.2 Anpassa MATLABs Desktop 59

7.3 Text-strängar 60

7.3.1 Manipulera textsträngar 60 7.3.2 Delsträngar 60

7.4 Enkel statistik 61

7.5 Polynom 62

7.5.1 Hitta rötter till polynom. 62

7.5.2 Finn polynomuttryck för givna rötter 62 7.5.3 Värden på polynom 62

7.5.4 Derivator av polynom 63

7.5.5 Produkter och kvoter av polynom 63 7.6 Matrisekvationer 63

7.7 Minsta kvadratanpassning 64

7.8 Minsta kvadratanpasning med matrismetod 66 7.9 Övningsuppgifter 68

8 PASS 6 - PROGRAMMERING 58 8.1 Att programmera 69

8.2 Formatterad in- och utmatning 69 8.3 Slingor 69

8.4 funktioner 69

9 PASS 7 70

9.1 Avacerad grafik 70

9.1.1 Axlar och property-editor 70

10 SVAR OCH LÖSNINGAR 71 10.1 Svar till avsnitt 4 71

11 SAKREGISTER 72

(4)

1 Inledning

Det här kompendiet är avsett att användas i kursen "Den experimentella metoden" som ingår i första årskursen i fysiklinjen vid Stockholms Universitet. Kompendiet är inte avsett att vara en komplett kurs i MATLAB utan strävar till att ge en introduktion till programmet, och mer detaljerade kunskaper inom de områden som är nödvändiga för kursen "Den experimentella metoden". Tonvikten ligger inom två områden: beräkningar för att behandla mätvärden från laborationer, och grafisk presentation av mätdata och resultat, främst då 2D grafik. Detta upplägg innebär att en del områden inte alls kommer att beröras, som till exempel komplexa tal, 3D grafik och mer avancerade matematik-tillämningar. Vi är dock förvissade om att man efter att ha följt kursen har så goda kunskaper i att använda MATLAB så att det skall vara relativt enkelt att på egen hand läsa in andra områden vartefter behov av det uppstår.

Programmet MATLAB har en mycket väl utvecklad hjälpfunktion, men som med alla andra program kan det vara svårt att veta vad man skall be om hjälp med innan man har nått en viss kunskapsnivå.

Dessutom kan det ibland vara besvärligt att vara hänvisad till engelska termer. För att träna upp det interaktiva hjälpsökandet använder kompendiet flitigt hänvisningar till MATLABs egen dokumentation.

Kompendiet är skrivet i avsikt att läsas i en följd, många avsnitt bygger direkt på tidigare avsnitt, en hel del av de exempel som ges förutsätter att föregående exempel har körts.

Organisationen och innehållet i det här kompendiet har lånat mycket ur ett kompendium av Hans Mühlen – ”MATLAB” – som kom i flera upplagor under åren 1987-93.

2 Vad är M

ATLAB

?

MATLAB är ett kommersiellt program, eller snarare programpaket, för matematiska beräkningar och grafisk presentation. MATLAB-paketet har en mängd utbyggnadsmöjligheter med färdiga moduler och kan användas för ett stort antal mer eller mindre specialiserade beräknings- och simuleringstyper.

I den här kursen, och även i övrigt här på fysikum, använder vi oss av MATLAB dels för att skriva program för att genomföra beräkningar, till exempel för att bearbeta lab-resultat, dels för att presentera resultat i grafisk form.

Som alla andra program har MATLAB sina styrkor och svagheter. Namnet MATLAB stod ursrpungligen för MATrix LABoratory, och även om MATLAB har utvecklats enormt sedan det döptes så är fortfarande matrishanteringen en av de starka sidorna hos MATLAB, något som kommer att komma till stor användning under den här kursen. Rent allmänt är MATLAB väldigt förlåtande, man behöver till exempel inte - som i de flesta högnivåspråken för programmering - göra skillnad mellan heltal och decimaltal. Man behöver inte heller i förväg tala om hur stora vektorer skall vara. Det finns gott stöd för att producera grafik, men det kan i början kännas litet avigt att man inte enkelt kan plotta sin(x) mot x, utan först måste konstruera en vektor med x–värden och en annan vektor med y–värden och sedan plotta dem mot varandra.

Vi skall också komma ihåg att MATLAB är ett matematikprogram, inte ett ordbehandlingsprogram. Vi kommer alltså att behöva komplettera vår arsenal med ett program för att hantera text och figurer för att kunna producera dokuementationen av våra experiement

(5)

3 Konventioner

I detta kompendium används endast ett fåtal typografiska konventioner. En är när vi visar exakt hur det ser ut när man skriver in kommandon i MATLABs kommandofönster och får output tillbaks till det fönstret. Sådana exempel visas med speciellt typsnitt inom en ram:

>> Kommandot som skrivs in Respons från MATLAB

Ibland refererar vi till kommandon och variabler i löpande text, och markerar då detta genom att skriva variabelnamnet med samma typsnitt a = sin(x).

Referenser till MATLABs hjälp-dokument skrivs med initialt ? och särskilt typsnitt, t.ex.

?/MATLAB/Reference/MATLAB Function Reference/Mathematics/Elementary Math/

hur man använder en sådan referens för att söka ett avsnitt i dokumentationen beskrivs i avsnitt 4.1.5 Notera också att MATLAB använder den anglosaxiska konventionen där decimalkommat inte skrivs med komma utan med punkt. 2,3 är ett talpar medan 2.3 är ett decimaltal.

4 Pass 1- komma igång

Efter det första dataövningspasset skall du kunna:

• Logga in på ditt studentkonto på Fysikums datorer

• Starta MATLAB

• Använda MATLAB som en enkel mini-räknare

• Återkalla MATLAB kommandon från historie-filen.

4.1 De första stegen – ”Hello World”

Det finns en slags ”tradition” inom litteraturen om datorprogram och programmeringsspråk enligt vilken den första uppgiften man skall lösa när man ger sig i kast med ett nytt program eller språk är att få programmet att skriva ”Hello World” på skärmen.

Det här kan verka litet fånigt, men det är faktiskt inte så dumt. Visserligen är det vi kräver av själva programmet tämligen trivialt, men för att det hela skall fungera måste vi behärska en hel del saker om den miljö i vilket programmet fungerar: vi måste kunna logga in på den dator där programmet skall köras, hitta och starta programmet, få programmet att acceptera våra instruktioner om vad som skall utföras, köra programmet och till sist få programmet att kommunicera ett resultat, vanligtvis via en bildskärm. Kan vi klara av alla dessa uppgifter så kan vi i fortsättningen koncentrera oss på att få programmet att lösa mer och mer komplicerade uppgifter.

4.1.1 Logga in på datorn.

Hur man loggar in på datorerna på övningslabbet kommer troligen att variera med tiden. Det beror också på vilket operativsystem den dator du skall arbeta vid använder. Här beskrivs hur det går till att logga in på en dator som kör operativsystemet Windows under vårterminen 2002. Skulle du misslyckas att komma in på det sätt som beskrivs här kan det bero på att förhållandena ändrats, så fråga en assistent om du är tveksam.

I normalfallet kommer datorn att visa upp en inloggningsruta på skärmen där användarnamnet redan är ifyllt som ”student”. Allt du behöver göra är då att klicka på ”OK” så loggas du in, och kan börja arbeta.

4.1.2 Starta Matlab

När du är inloggad kan du se ett antal små bilder – ”ikoner” – på skärmen. Alla dessa ikoner är en symbol för andra objekt som finns på datorn. Det kan vara filer, mappar (kataloger) eller program. Vad som händer när du dubbelklickar på en ikon beror på vad ikonen är en symbol för, är det t ex en symbol för en fil skapad i programmet Microsoft Word kommer programmet Microsoft Word att starta och öppna filen om du dubbelklickar på ikonen. På din skärm

kommer du att ha en ikon som visar MATLABs symbol. Den ikonen är länkad direkt till programmet MATLAB, så genom att dubbelklicka på den startar MATLAB.

En alternativ metod att starta MATLAB är att klicka på den lilla fyrkanten längst ned, märkt med Windows-symbolen och ordet ”Start”. Då öppnas en meny med ett antal alternativ varav ett är

”Start programs ›”. Klickar du på den raden så öppnas en mindre meny (det är innebörden av symbolen ”›”), där väljer du ”MATLAB 6.1 ›” och på den meny som då öppnas återigen ”MATLAB

6.1”.

Figur 1Matlab symbolen

(6)

4.1.3 Matlabs "skrivbord” (desktop)

När MATLAB har startat öppnas ett nytt fönster på din dator som kan se litet olika ut beroende på vilka inställningar som har sparats[0], men det blir i alla fall en version av det som kallas MATLABs skrivbord. En variant av skrivbordet ser ut som nedan, men bli alltså inte förskräckt om det inte ser riktigt likadant ut.

Vi skall senare (avsnitt 7.2) ta en närmare titt på hur man kan förändra utseendet på det som MATLAB

visar så att informationen kan anpassas till vad vi vill göra under ett givet arbetspass. Men låt oss börja med en enkel konfiguration för att först bekanta oss litet med MATLAB: Gå in i menyn ”View”. Att gå in i en meny betyder att man klickar på menyns titelord, i det här fallet ”View”. När man gör det visas ett litet fönster (ungefär som i figuren härintill) som kallas rullgardinsmeny (pull-down menu). Genom att klicka på något av de ord som står i menyn kan du utföra vissa kommandon. Dessa menyer har ett särskilt symbolspråk, en liten triangel, som den du

kan se efter ”Desktop Layout” anger att du genom att klicka på den raden kan öppna upp ytterligare en meny, en undermeny till ”Desktop Layout”.

Symbolen ”√” används för variabler som kan slås på och av i menyn. I det exempel som vi visar till höger betyder det att ”Command Window” är påslaget, medan de andra alternativen är avslagna. Eventuellt är fler alternativ påslagna när du startar MATLAB, slå i så fall av dem genom att klicka på de ord som har

Desktop Layout ›

Undock Command Window

√√√√ Command Window Command History Current Directory Workspace Launch Pad Figur 2: Matlabs desktop

symbolen ”√” till vänster om sig så att det ser ut som i figuren. När vi nu lämnar menyn genom att klicka någonstans utanför menyfönstret har vi en enkel MATLAB-desktop med ett enda fönster – kommandofönstret öppet. Kommandofönstret (Command Window) är det fönster genom vilket vi och MATLAB kommunicerar med varandra, där skriver vi in kommandon och MATLAB skriver ut resultat.

4.1.4 Say Hello

Så har vi äntligen kommit fram till den punkt då vi är redo att säga hallå världen. Det som återstår är att instruera MATLAB att skriva ut ”Hello World” på skärmen. Det finns fler sätt att få MATLAB att utföra kommandon, det enklaste som vi skall använda först är att helt enkelt skriva in kommandot i kommandofönstret. När vi skriver ett kommando i kommandofönstret och trycker på ”return” så kontrolleras först att kommandot har en korrekt syntax, dvs att kommandot är skrivet enligt de regler som gäller för MATLABs kommandospråk så att programmet kan tolka instruktionen. Om kommandot vi skrivit in är korrekt så utförs det och eventuella resultat visas i kommandofönstret. Det kommando vi skall använda för att säga hallå heter disp() efter engelskans ”display”. Kommandot betyder helt enkelt att MATLAB skall visa det som står inom parantesen (argumentet) i kommandofönstret på skärmen. Som vi snart kommer att se kan det som står inom parantesen vara en mängd olika storheter, men just nu är vi intresserade av något som kallas för textsträng. En textsträng är en sträng av tecken, omgiven av enkla citationstecken – ’ . MATLAB behandlar en textsträng som en liten låda som man inte, i alla fall inte utan ganska mycket möda, kan göra något med annat än att spara och ta fram vid behov. Just nu räcker ju detta för våra syften, genom att ge textsträngen ”Hello World” som argument till kommandot disp ger vi MATLAB instruktionen att skriva ut strängen på skärmen. Det sista steget blir alltså att ge kommandot disp(’Hello World’) i kommandofönstret, som svar kommer MATLAB att skriva ”Hello World” i kommandofönstret, och vi har klarat av vår första MATLAB uppgift.

» disp(’Hello World’) Hello World

Lägg märke till att under tiden som du skriver strängen så är den lila, och att den skiftar färg till mörkröd när du skriver dit det andra citationstecknet och fullbordar en korrekt sträng. Det här är ett stöd som MATLAB ger oss för att underlätta att skriva korrekta kommandon. Vi återkommer senare till en genomgång av annan hjälp vi kan få.

4.1.5 Matlabs hjälpfunktion

MATLAB har en mycket omfattande on-line dokumentation, och kraftigt stöd för hjälpfunktionen. Det finns fler sätt att hitta information så vi kommer under kursens gång att få lära oss fler olika metoder för att avlocka MATLAB dess hemligheter. Den första metoden vi skall använda är att öppna och använda hjälp-fönstret. Det gör du genom att i MATLABs desktop klicka på ? symbolen. Då öpnnas ett nytt fönster – ”Help window”, ett fönster som är uppdelat i två panåer genom en vertikal avgränsning.

Den vänstra panåen används för att navigera i materialet och finna det avsnitt i dokumentationen som vi är intresserade av, i den högra panån presenteras hjälp-texter.

Tittar vi nu först på den vänstra panån så kan vi välja fyra alternativa sätt att navigera genom att klicka på någon av de fyra flikarna högst upp:

contents

ger oss en innehållsförteckning där ämnena är grupperade i kapitel och underkapitel i olika nivåer ner till enstaka sidor.

(7)

index

ger oss tillgång till ett alfabetiskt ämnesregister där vi kan söka om vi vet namnet på det kommando eller det begrepp vi vill veta mer om.

search

ger oss möjlighet att söka i den samlade dokumentationen. Sökningen kan vara efter såväl enstaka ord som hela fraser.

favourites

är en sida som vi själva kan bygga upp. Om vi genom att använda någon av de tre metoderna ovan har hittat en sida som vi misstänker att vi kommer att återvända till kan vi genom att clicka på ”add to favourites” ovanför textpanån lägga till ett bokmärke till den sidan. Nästa gång vi startar MATLAB och går in i hjälpfunktionen kan vi hitta vår favoritsida under den här fliken. Skulle vi vilja ta bort en favorit, eller döpa om den så kan vi göra det genom att klicka på en favorit med den högra musknappen.

Lå oss nu ta en närmare titt på vad som möter oss under fliken ”contents”. Schematiskt ser panån under ”contents” ut så här:

Boxarna symboliserar avsnitt i hjälpkatalogen. Genom att klicka på någon av textraderna kommer vi till motsvarande avsnitt i hjälpdokumentationen. Den lilla fyrkanten med ett + -tecken visar att motsvarande symbol innehåller underavdelningar som vi kan göra synliga genom att klicka på plustecknet. När vi gör det - prova! - så öppnas den avdelningen, och vi kan fortsätt att klicka oss fram tills vi når ner till den nivå vi söker. En underavdelning som är öppnad kan stängas igen: klicka bara på minustecknet så stängs motsvarande nivå. I den här kursen kommer vi nästan uteslutande att hålla oss inom den del av dokumentationen som startar med boxen "MATLAB". Klickar du på den boxen så öppnar sig nästa nivå. På denna nivå är "Getting Started" och "Using MATLAB" de avsnitt vi kommer att behöva mest. Bägge dessa rubriker har en underrubrik som heter "Development Environment" som är det avsnitt som vi kommer att ha mest nytta av. I det här kompendiet används en speciell syntax för att beskriva hur du skall navigera fram till givna avsnitt i hjälpdokumentationen. Låt oss t ex börja med att läsa i dokumentationen hur MATLAB med hjälp av fägkodning och andra trix hjälper oss att skriva korrekta kommandon i kommando fönstret. Till den sidan når du genom att med början i läget som avbildas i figuren ovan klicka på följande titlar:

MATLAB Using MATLAB Development Environment Running MATLAB Functions The Command Window

Preferences for the Command Window

Längst ned på sidan finns en länk "syntax highlightning" som leder oss till den sida som beskriver hur MATLAB använder färgkoder för att hjälpa till med syntaxen.

För att spara utrymme kommer vi i det här kompendiet att använda en speciell syntax för att beskriva hur vi navigerar i hjälpsystemet. Klickandet ovan skriver vi

?/MATLAB/Using¬MATLAB/Development¬Environment/Running¬MATLAB¬Functions/The Command¬Window/Preferences for the Command Windown

När vi har läst färdigt i hjälpfönstret så kan det vara bekvämt att göra sig av med det så att vi lättare kan se kommandofönstret. Enklast gör vi det genom att använda oss av en av symbolerna som visas högst upp till höger i varje fönster (alltså inte bara MATLABs) som visas på datorn. De tre symbolerna

används för att hantera fönster i Windowsmiljön. Symbolen till

vänster används för att förminska fönstret till en "ikon". Prova att klicka på den, och du ser att fönstret försvinner och att vi obehindrat kan se de fönster som tidigare var dolda bakom hjälpfönstret. Det fina i kråksången är att fönstret finns kvar i skepnad av en liten symbol "Help" på listen längst ned på datorskärmen. Genom att klicka på den symbolen återställs fönstret genast. Det här är ett bekvämt sätt att göra det enklare att hitta bland alla sina öppna fönster, de som inte används för tillfället minimerar man bara och de finns fortfarande lätt tillgängliga.

Krysset längst till höger avslutar det program som öppnat fönstret, klickar vi på det så avslutas MATLABs hjälpfunktion och vi får börja om från början och klicka på om vi vill ha mer hjälp.

Den mittersta symbolen slutligen används för att maximera ett fönsters storlek, klickar vi på den så förstoras fönstret så att det täcker hela datorskärmen. Det här kan vara bekvämt om man till exempel vill kunna läsa en hel sida i dokumentationen på skärmen utan att behöva bläddra upp och ner på skärmen. När vi är klara klickar vi bara en gång till på samma symbol och fönstret återtar sin ursprungliga storlek.

Ett annat sätt att få hjälp är att i kommandofönstret skriva help kommando, där "kommando" byts ut mot namnet på det kommando man söker hjälp om. Detta leder ofta snabbare fram till den information man söker än att söka i dokumentationen. Svårigheten är bara att man måste ha en första idé om vad det är man vill ha hjälp med så att man har något vettigt att skriva in som "kommando".

4.1.6 Avsluta Matlab

Det finns två sätt att avsluta MATLAB. Du kan antingen gå in i menyn ”File” och där välja ”exit MATLAB” eller också trycka på ”ctrl Q”, det betyder att du samtidigt trycker ner tangenten ”ctrl” i nedre vänstra hörnet av tangentbordet och tangenten ”Q”.

4.2 Börja räkna

4.2.1 Matlab som en räknedosa

(8)

Enklare matematiska operationer görs precis som på en vanlig räknedosa (med normal, dvs ej omvänd polsk notation à la HP-räknare) med den lilla skillnaden att vi trycker på return i stället för ”=” när vi vill beräkna resultatet. Pröva t ex att beräkna 2+2:

» 2 + 2 ans = 4 4.2.2 operatorer

För aritmetik har MATLAB de vanliga operatorerna:

+ Addition - Subtraktion

* Multiplikation / Division

\ Vänsterdivision – beskrivs i avsnitt XXX

^ Exponentiering, till exempel x^2 = x2

’ Komplex konjugering och transponering ( ) Paranteser för att definiera prioritetsordning

Prioritetsordningen mellan operatorerna är den normala så att när man till exempel skriver

13 * 4 + 3*2 ^3 så beräknas först, 23, därefter de bägge produkterna och sedan summan.

4.2.3 variabler

I MATLAB kan man liksom i alla högnivåspråk definiera variabler, och tilldela dessa värden. Detta har två omedelbara fördelar: dels underlättar det arbetet genom att man inte behöver upprepa inmatning av samma värde fler gånger, dels gör det instruktionerna enklare att följa och förstå – åtminstone om man väljer namn på konstanterna som är begripliga. Antag som ett exempel att en läskeblask kostar 10 pix, en varmkorv 12 och en kaffe 4. Om då Kalle köper en korv och fyra kaffe, Lisa en läskeblask och två korvar och Ludde tre korvar och två läskeblask, så kan vi räkna ut vad var och en fick betala på följande sätt (minns att varje rad måste avslutas med return för att MATLAB skall utföra kommandot):

1 Notera att MATLAB ignorerar mellanslag i alla uttryck. Det spelar alltså ingen roll om vi skriver 2+3+4*5 eller 2 + 3 + 4*5 eller 2 + 3 + 4 * 5. För att det skall bli enklare att följa uttrycken är det mellersta sättet att skriva (som ansluter till prioritetsordningen) att föredra.

» laskeblask = 10 laskeblask = 10

» korv = 12 korv = 12

» kaffe = 4 kaffe = 4

» Kalle = 2*korv + 4*kaffe Kalle =

40

» Lisa = laskeblask + korv Lisa =

22

» Ludde = 3*korv + 2 *laskeblask Ludde =

56

I exemplet ovan är laskeblask, korv, kaffe, Kalle, Lisa och Ludde alla variabler. Variabler kan alltså tilldelas värden antingen explicit (uttryckligen) genom t ex korv = 12, eller genom en beräkning som t ex Kalle = 2*korv + 4*kaffe.

Observera att man som alltid måste vara noga med syntaxen, eller programmeringsspråkets grammatik. Det går inte att skriva

» Dyrt = 3 korv

Prova! Du kommer att få ett prov på hur MATLAB vänligt, men inte särskilt diskret hjälper en tillrätta när man får syntaxen fel.

Glömmer man bort vad en läsk kostar kan vi fråga MATLAB:

» laskeblask

laskeblask = 10

(9)

En fallgrop man får akta sig för är att för variabler vars värde beräknas, som t ex Kalle ovan behåller det värde som variabeln tilldelas senaste gången den beräknas, även om en av de variabler som ingår när man beräknar variabelns värde ändras. Ett exempel:

» kola = 0.5 kola = 0.5000

» klubba = 2.50 klubba = 2.5000

» Sune = 20 * kola + 4 * klubba Sune =

20

» klubba = 5.00 klubba = 5.0000

» Sune

Sune = 20

Värdet på variabeln Sune ändras alltså inte när värdet på klubba ändras, när värdet på Sune beräknades gällde det gamla värdet på klubba och värdet på Sune förblir oförändrat så länge vi inte räknar om det med

» Sune = 20 * kola + 4 * klubba Sune =

30

Variabelnamn i MATLAB måste börja med en bokstav, följd av en godtycklig kombination av bokstäver (ej å, ä eller ö), siffror eller understrykning (–), ett variabelnamn kan alltså inte innehålla mellanslag. MATLAB ser skillnad på stor och liten bokstav, ALLA, Alla och alla är alltså tre olika variabler. Om man vill skapa variabelnamn som är sammansättningar av mer än ett ord finns två konventioner: antingen binder man ihop med ett understrykningstecken, eller också skriver man med små bokstäver, men inleder nya ord med versal. Alltså antingen lagsta_strom eller LagstaStrom. Vilket du väljer att göra är godtyckligt, men det är bra om man försöker att hålla sig till ett sätt att skriva. Det

är ju enkelt att komma ihåg att variabeln är ”lägsta ström”, men om man på vissa ställen skriver lagsta_strom och på andra LagstaStrom så kommer man att hänvisa till olika variabler på olika ställen i sin kod. Det är därför klokt att en gång för alla bestämma sig för en konvention och sedan hålla sig till den. Det kan också vara bra att undvika de svenska bokstäverna även om det program man arbetar med stöder dessa. När man skriver många program skaffar man sig vanor, och det är bra om vanorna fungerar i så många olika sammanhang som möjligt.

4.2.4 konstanter

MATLAB har ett antal inbyggda konstanter:

pi konstanten π = 3.14159265…

i roten ur -1

j samma som i

eps 2-52, den minsta relativa skillnaden mellan två rationella tal, eller uttryckt på annat sätt: det minsta tal man kan addera till 1 och få ett tal som är större än 12. realmin 2-1022, det minsta rationella talet som kan representeras på datorn,

realmax (2-eps)1023, det största rationella talet som kan representeras på datorn.

Inf Oändligheten som resultat av en väl definierad matematisk operation, t ex 10/0 NaN Icke definierat (Not a Number), resultatet av en operation där resultate inte är

definierat t ex 0/0 eller Inf - Inf ans Resultatet av det senaste kommandot

Av dessa kommer vi kanske inte att använda mer än pi (och möjligen ans) i den här kursen, men det är bra att veta att de finns, i vissa lägen kan MATLAB komma att använda dem i felmeddelanden och då är det bra att veta vad till exempel NaN står för.

Vi har här valt att kalla dessa tal för "konstanter" eftersom det är så vi betraktar och använder dem.

Rent tekniskt är de dock implementerade som inbyggda funktioner vilket har som en konsekvens att man kan definiera om dem:

» pi

pi = 3.1415

» pi = 4.75 pi = 4.7500

De är dock litet mer stabila än vanliga variabler av typ Kalle som vi själva definierar. En variabel vi har definierat kan tas bort så att MATLAB inte längre minns något om dem genom att ge commandot clear:

2 Minns att datorer använder en sträng av ettor och nollor för att representera rationella tal. De kontinuerliga talen representeras internt av en serie diskontinuerliga tal vilket är nödvändigt om man vill kunna beskriva talen med ett ändligt antal bitar. Kvoten mellan två på varandra följande tal är (1+ eps).

(10)

» clear Kalle

Gör vi samma sak med en av "konstanterna" i tabellen ovan så återställs värdet till det fördefinierade som visas i tabellen..

4.3 Miljön i MATLAB

4.3.1 Städa upp kommandofönstret: tyst input, fortsättningsrader

När man börjar komma igång litet med att använda MATLAB så tycker man ofta att kommandofönstret blir litet ostrukturerat, alla kommandon man ger upprepas slaviskt, vissa värden ges utan decimaler, andra med en lång radda nollor på slutet. Det finns ett antal kommandon som hjälper en att skräddarsy vad vi ser i kommandofönstret.

För att stänga av ekot, det vill säga för att få MATLAB att avstå från att rapportera resultatet av varje kommando vi skriver in räcker det med att avsluta raden med semikolon. Egentligen är det inte raden, utan kommandot som avslutas med semikolon. Distinktionen är viktig, eftersom användandet av semikolon gör det möjligt att skriva mer än ett kommando på varje rad. Denna finess bör användas med omdöme, driver man det för långt kan det bli nästan omöjligt att se vad man gjort, men rätt använt kan det istället göra det lättare att följa med:

» laskeblask = 10; korv = 12; kaffe = 4;

» Kalle = 2*korv + 4*kaffe Kalle =

40

ser mycket bättre ut än förra gången vi räknade ut Kalles utgifter.

Man bör försöka undvika för långa kommandon, men ibland kan man behöva skriva kommandon som inte får plats på en rad, som till exempel:

Y = ((3.5*(laskeblask+korv)–kaffe)+sin(pi–2.75*Kalle)/korv**2+(45–kaffe)**3 om vi behöver dela upp ett kommando på fler rader kan vi göra det, men för att tala om för MATLAB

att kommandot inte är slut när raden är slut, vilket ju är vad MATLAB normalt antar, så måste den rad som har en fortsättning avslutas med tre punkter omedelbart följda av return:

» Y = ((3.5*(laskeblask+korv)–kaffe)+…

sin(pi–2.75*Kalle)/korv**2+(45–kaffe)**3

är alltså ett kommando även om det sträcker sig över mer än en rad.

4.3.2 Format och avrundning

I exemplen vi sett så här långt har MATLAB genomgående skrivit ut heltal utan decimaler och decimaltal med fyra decimaler. Det senare gäller såväl i de fall där vi har definierat en variabel genom att skriva in bara en decimal som t ex 0.5, som i de fall då MATLAB visar ett tal med oändligt lång decimalutveckling som pi eller 1/3. När vi kommer till mycket stora eller mycket små tal slår MATLAB

om till att använda "scientific notation", där tal representeras som ett decimaltal multiplicerat med en lämplig tiopotens. I denna notation skrivs till exempel 1.602.10-19 som 1.602e-19.

Hur MATLAB skall formattera de tal som visas kan påverkas genom kommandot format. För att se vilka alternativ som finns kan vi gå till help fönstret och söka på

?/MATLAB/Getting¬Started/Manipulating¬Matrices/Controlling¬Command¬Window¬Input¬and¬

Output/The¬format¬Command Eller enklare genom att bara skriva

» help format

Lägg särskilt märke till kommandot format compact som tar bort alla dessa blanka rader som MATLAB spottar ur sig. I fortsättningen kommer vi att skriva exemplen på kommandon som om format compact var aktiverat.

4.3.3 Matlabs "Workspace"

Vi har nu sett hur variabler som vi definierar, till exempel laskeblask i avsnitt 4.2.3, "lever kvar".

Långt efter det att vi definierat dem kan vi använda dem i nya uttryck, och vi kan se vilka värden de har genom att skriva deras namn i kommandofönstret. Det ställe där dessa variabler lever är en del av datorminnet som MATLAB reserverar för variabler och som kallas "workspace". Under långa MATLAB

sessioner kan MATLABs workspace bli ganska tätbefolkad, man kan lätt samla på sig en stor mängd variabler. Som vi snart kommer att se kan ett variabelnamn beteckna inte bara tal, utan vektorer och matriser med hundratals element. För att vi lättare skall kunna ha översikt och kontroll över de variabler som lever i workspace finns speciella kommandon och verktyg. Det kanske tydligaste är ytterligare ett fönster som kallas just "workspace". För att öppna det går vi in i "View" menyn och bockar för "Workspace" (det gör du genom att klicka på "Workspace" i menyn). När du gjort det öppnas detta fönster som en panå i MATLABs desktop. I detta fönster ser du alla variabler som är definierade i den pågående MATLAB sessionen. Varje rad innehåller fyra kolumner, den första anger variabelns namn, nästa dess storlek. Denna ges som rader x kolumner och eftersom de variabler vi hitills definierat är tal (skalärer) så är alla variabler av storleken 1 x 1. Nästa kolumn talar om hur många bytes3 i internminnet som variabeln upptar. Slutligen visas vilken klass variabeln tillhör. I workspace-fönstret kan vi manipulera innehållet i variablerna, och också arbeta med workspace självt.

Det är till exempel möjligt att spara hela innehållet i workspace till hårddisken för att sedan läsa in det till workspace igen när vi startar nästa MATLAB session. Detta är ett sätt att inte behöva skiva in alla data (som t ex priset på en läskeblask och en varmkorv) varje gång vi vill göra en viss typ av beräkningar.

Vi kan också studera variablerna närmare genom att dubbelklicka på namnet för en av dem i workspace-fönstret. Gör vi det öppnas ett fönster med värdet på variabeln. För tal är detta fönster inte särskilt upphetsande, men om vi gör motsvarande manöver på en matris kommer vi att få se en snygg representation av matrisen där vi kan gå in och ändra enstaka element. Vi återkommer till de mer avancerade användningarna av workspace-fönstret senare (när du har tittat klart på det här fönstret stänger du det - precis som alla andra fönster i Windows - genom att klicka på X i övre högra hörnet), Ett alternativt sätt att se vad som finns i workspace är att i kommandofönstret ge kommandot whos.

Vi kan nu ocskå förstå litet bättre vad clear kommandot gör: genom att skriva clear Kalle tar vi helt enkelt bort variabeln Kalle från MATLABs workspace, vilket gör att MATLAB helt glömmer bort

3 En byte (förkortas B) är en vanlig enhet för storlek på det lagringsutrymme som en enhet upptar internt i datorn, t ex i minnet eller på hårddisken. En byte består av 8 bitar (engelska: "bits", förkortas b), dvs ett binärt tal med 8 siffror som kan anta värdena 0 eller 1.

(11)

att Kalle existerat. Du kan prova detta genom att skriva clear xxx i kommandofönstret för någon av de variabler som syns i workspace-fönstret och se vad som händer.

4.4 ”Play it again Sam”- att upprepa kommandon

I ”Kalle Ankas Julafton” finns en film som visar en husvagnstur med Kalle Anka, Musse Pigg och Långben. I en av scenerna sitter Långben och äter en majskolv. När han gör det för han munnen över majskolven, varvid det hörs ett konstigt knattrande ljud. När han kommit till slutet av majskolven hörs ett pling, varvid han flyttar huvudet till andra sidan av majskolven och proceduren börjar om. När mina barn ser det här skrattar dom, men dom har ingen aning om vad det hela anspelar på: förr i tiden fanns det skrivmaskiner!

När författaren var ung var skrivmaskiner nånting ganska häftigt, med ganska mycket möda kunde man få ett brev eller ett dokument att se jätteproffsigt ut. Kruxet var bara att skrivmaskiner var fullkomligt skoningslösa – skrev man fel var det bara att riva ut pappret och börja om (på hemma-nivå kunde man förstås backa och kryssa över med ett antal ”XXXX”, men det förtog ganska mycket av effekten). Det fanns speciella suddgummin för skrivmaskier, stenhårda skivor som antingen rev sönder pappret i småbitar eller smetade ut skriften över hela pappret. Så småningom kom ”TipEx”, en vit färg man kunde måla över sina misstag med, och sedan skriva ny text ovanpå. Det blev med ens möjligt att hyfsa till dokument om man gjorde något enstaka fel, men riktigt proffssnyggt blev det inte, och man kunde inte heller ändra hela stycken mitt i ett färdigt dokument.

De av oss som har upplevt denna period kan till fullo uppskatta vad ankomsten av små billiga datorer betytt för ordbehandlingen: ändringar blir triviala, felstavningar korrigeras enkelt (ibland till och med automatiskt), man kan återanvända gamla dokument, byta ut stycken helt godtycklig – aldrig tidigare har så mycket text kunnat produceras med så liten möda!

Det vore naturligtvis skönt att kunna få en ”räknebehandlare” som har alla dessa företräden. Har man väl skrivit in

Y = ((3.5*(a+b)–c)+sin(phi–2.75*D)/epsil**2+(455–abba**3)/(cos(4+pi)–2.75) bara för att komma på att det borde ha varit

Y = ((3.5*(a+b)–c)+sin(phi–2.75*B)/epsil**2+(455–abba**3)/(cos(4+pi)–2.75) Så kan man bli litet trött, och önska sig att MATLAB bar sig åt som en ordbehandlare. Om man sedan kommer tillbaks en vecka senare för att räkna om något på en lab-rapport man fått ”åter” på så önskar man verkligen att man kunde trolla tillbaks vad man gjorde förra veckan. MATLAB, och andra moderna beräkningsprogram, svarar upp till dessa förväntningar. Dels finns det ett sk ”historie- fönster” där man kan återkalla sina tidigare kommandon och redigera dessa innan man exekverar dem igen. Dessutom kan man spara hela sekvenser av kommandon i så kallade ”M-filer” som man sedan kan återkalla, eventuellt redigera, och köra igen.

4.4.1 Att återkalla kommandon

Det enklaste sättet att få chansen att göra om något vi gjort nyligen är att trycka på upp-pilen på tangentbordet. När vi gör det visas det senast utförda kommandot i kommandofönstret. Trycker vi på pilen en gång till kommer kommandot innan dess och så vidare. När vi knappat oss fram till det kommando vi vill göra om så är det bara att trycka på return så utförs kommandot en gång till. Oftast så återkallar man ju ett kommando för att man gjort något smärre fel som man vill korrigera, vilket är lätt gjort. När man väl klickat fram det kommando man vill göra om kan man flytta sig in i raden genom att trycka på vänster-pil, när man gör det rör sig pekare in över raden. När pekaren står till

höger om det man vill ändra kan man radera ut delar av kommandot genom att trycka på delete- knappen. När man suddat det som är fel är det bara att skriva in vad som skall stå i stället. När man är nöjd med den nya skepnaden av raden är det bara att trycka på return. Oavsett om pekaren står mitt i raden så kommer MATLAB att utföra kommandot som står på hela raden.

Man kan också ta sig in i raden genom att bara flytta pekaren till något ställe i raden och klicka. Prova genom att t ex skriva

» y = sin (2 * pi)

och sedan till exempel ändra 2 till 3 eller sin till cos.

4.4.2 Matlabs historiefönster

Ett annat sätt att se vad man gjort som är litet överskådligare är att öppna MATLABs historiefönster, gå till View och välj "View Command History". När du gör det öppnas ytterligare en panå i MATLABs desktop. Om du fortfarande har "Workspace" öppen kommer (oftast, detta kan variera litet med hur MATLAB är inställd) "Command History" och "Workspace" att dela på den vänstra panån, du kan då växla mellan dem genom att klicka på fliken som finns längst ned i denna panå. När "Command History" är aktivt så kan du i det se den senaste.

Om du dubbelklickar på en rad i det fönstret så utförs det kommandot en gång till. Du kan också göra mer avancerade operationer genom att klicka en gång på en rad och sedan högerklicka i

historiefönstret. Du får då upp en meny som ser ut ungefär som till höger. Vi återkommer till de flesta av alternativen, det vi skall använda nu är "Copy". Klicka på ett kommando i historiefönstret, högerklicka och välj "Copy". Gå därefter till kommandofönstret och högerklicka. I den meny som då dyker upp kan du välja "Paste" (klistra in). När du gjort det har du flyttat kommandot från

historiefönstret till kommandofönstret. Väl där kan du ändra i det gamla kommandot och sedan utföra det nya modifierade kommandot genom att trycka på return. Det kan tyckas vara ett omständigt sätt att skriva in ett kommando, men om vi minns

Y = ((3.5*(a+b)–c)+sin(phi–2.75*D)/epsil**2+(455–abba**3)/(cos(4+pi)–2.75) så inser vi att det kan vara mycket enklare och snabbare (och mindre känsligt för nya fel) att kopiera in kommandot från historiefönstret och ändra än att skriva in kommandot från scratch.

4.4.3 M-filer, vad är det?

Det ultimata sättet att återanvända vad man redan gjort en gång är att använda sig av så kallade M- filer. Istället för att skriva sina kommandon i MATLABs kommandofönster så skriver man in sina kommandon i en fil som sparas separat. Vi kan sedan få MATLAB att utföra

de kommandon som finns sparade i filen. Det finns i praktiken ingen gräns för hur lång en M-fil kan bli, vi kan därför spara kommandon motsvarande hela den matematiska behandlingen av en laboration i en fil, inklusive kommandon för att producera grafer som används i laborationsrapporten.

Skulle vi behöva göra om någon liten detalj, eller ändra en siffra är det bara att gå tillbaks till filen och ändra precis bara det som behövs, resten finns kvar.

M-filer är oerhört viktiga för att använda MATLAB på ett effektivt sätt. I den här kursen skall du i princip spara alla dina beräkningar i M-filer. På så sätt får du ett arkiv med små samlingar av kommandon som du kan återanvända och ändra efter behag. För att kunna använda och spara M-filer måste vi dock först kunna en del om hur data lagras på övningslabs datorer, något som vi skall titta på

Copy

Evaluate Selection Create M-file Delet Selection Delete to Selection Delete Entire History

(12)

i nästa pass. Resten av detta pass ägnar vi istället åt att lära oss litet om hur MATLAB jobbar med vektorer och matriser.

4.5 Litet om vektorer

I MATLAB definieras vektorer i stort sett som i matematiken: en ordnad följd av tal. Att vi skriver "i stort sett" beror på att en MATLAB-vektor utöver tal också kan innehålla text-strängar, vi återkommer senare till denna typ av vektorer och koncentrerar oss på vektorer och matriser som endast innehåller tal. När vi talar om vektorer i fysiken så är vi ofta inte så noga med distinktionen mellan radvektor och kolumnvektor (vi använder för det mesta bara radvektorer). I MATLAB kommer vi att göra skillnad mellan radvektorer och kolumnvektorer, men liksom i fysiken är "standard"-vektorn en radvektor.

Kolumn-vektorer skapas genom att transponera en radvektor. MATLAB betraktar vektorer som specialfall av matriser, en radvektor med n element är en (1x n) matris, en kolumnvektor är en (n x 1) matris.

4.5.1 Skapa vektorer

Det enklaste sättet att skapa en radvektor är genom direkt tilldelning, kommandot

» x = [2.3 4.5 7.3 8.2];

skapar en radvektor med fyra element. och ger dem de angivna värdena. Tecknen [ och ] kallas hakparantes, du skriver dem genom att samtidigt som du trycker ned tangenten "Alt Gr" till höger om mellanslagstangenten trycka ned 8 resp 9.

Vill vi se vilka värden vektorn har skriver vi som vanligt bara namnet på vektorn i kommandofönstret.

Ett alternativt sätt är att gå till workspace fönstret och klicka på variabeln så att "array"-fönstret öppnas. Prova! Vi kan som vanligt adressera enskilda element i vektorerna genom att ge ett index som pekar på ett av elementen i vektorn, x(1) är första elementet

Vektorer kan också tilldelas värden som beräknas

» y = 7.2;

» x = [y y/2 y+4];

» x

x =

7.2 3.6 11.2 8.2

Här ser vi hur MATLAB kan beräkna värden för enskilda vektorelement ur givna uttryck, man måste se till att inte skriva något mellanslag mellan hakparantesen och det första y-et, annars kommer MATLAB

att klaga över att det inte finns någon variabel som heter " y" definierad.

Vill vi skapa en kolumnvektor så gör vi det genom att transponera en radvektor med operatorn ' .4

» a = [ 1 2 4]

a =

4 Det finns två snarlika tecken på tangentbordet, akut accent och enkelt citationstecken. Operatorn vi skall använda är det senare tecknet, som delar tangent med * nära return-tangenten.

1 2 4

» b = a' b =

1 2 4

Alternativt kan man ge transponeringsoperatorn direkt i tilldelningssatsen: a = [ 1 2 4 ] ' markerar direkt att a skall vara en radvektor.

4.5.2 Räkna med vektorer

Vektoralgebran i MATLAB fungerar som vi är vana vid från matematiken:

» a = [1 2 5];

» b = [2 -1 3];

» 3*a

ans = 3 6 15

» a + b ans = 3 1 8

» c = a(3) - 7*b(2) ans = 12

» a + 3 ans 4 5 8

MATLAB klarar också av skalärpodukt av vektorer, under förutsättning att man ställer upp det som en matrismultiplikation, det vill säga som en multiplikation av en (1 x n) matris med en (n x 1) matris för att få en (1 x 1) matris:

(13)

» c = a * b' c = 15

En annan litet speciell egenskap är att vi kan applicera vissa standardfunktioner på en vektor och få en ny vektor:

» x = [ 0 pi/4 pi 3*pi/4 ];

» y = sin(x) y =

0 0.7071 1 0.7071 4.5.3 Elementvisa operationer

Ett begrepp som är nytt relativt matematikens vektoralgebra är de elementvisa operationerna. Detta är normala matematiska operationer som utförs på varje element i vektorn i stället för på vektorn själv.

Ett exempel är kvadrering, om a är en vektor så betecknar a2 skalärprodukten av vektorn med sig själv. Många gånger vill vi dock göra saker som att från en vektor med x-värden skapa en vektor med motsvarande x2-värden. Det vi vill göra är ju då inte att ta kvadraten av vektorn x, utan kvadraten av varje element i vektorn x och skapa en ny vektor med dessa som element. Detta gör man genom att använda elementvis exponentiering. Vi kan också utföra till exempel elementvis multiplikation mellan två vektorer. En sådan produkt är inte detsamma som skalärprodukten av vektorerna, utan en ny vektor där varje element består av produkten av motsvarande element i de två ursprungliga vektorerna.

Elementvisa operatorer har samma symbol som de vanliga föregånget av en punkt. Vi har t.ex.

» clear x;

» x = [1 2 -3 5];

» y = x.^2 y =

1 4 9 25

» x .* y ans =

1 8 -27 125

» a = [4 -1.5 2 7];

» a ./ y ans =

0.55556 -0.20833 0.27778 0.97222

» 1 ./ x ans =

1 0.5000 -0.3333 0.2000

4.6 Litet om matriser

MATLAB har en väl utvecklad uppsättning specialfunktioner för matris-algebra. Vi kommer snart att återvända till det, nu börjar vi med att lära oss att skapa matriser och göra några enkla beräkningar med dem.

4.6.1 Skapa matriser

Det enklaste (men ofta långt ifrån minst arbetskrävande) sättet att skapa en matris är att skriva in data rad för rad, med hakparantes i början och slutet:

(14)

» A = [1 2 4 1 0 3 2 -1 0]

A = 1 2 4 1 0 3 2 -1 0

(Glöm inte bort att titta i workspace hur matriser representeras!). Ett enklare sätt att skriva in samma sak är att avgränsa rader med semikolon:

» a = [1 2 4 ; 1 0 3 ; 2 -1 0];

ger exakt samma resultat. Man kan också skapa matriser ur vektorer:

» b1 = [1 2 4]; b2 = [1 0 3]; b3 = [2 -1 0];

» B = [b1 ; b2; b3 ] B =

1 2 4 1 0 3 2 -1 0

För att komma ihåg var vilka element som hamnar var i matrisen kan det vara bra att se saken litet formellt: i raden där vi skapar matrisen B skapar vi rent formellt en 3x1 matris (eller om man så vill en kolumnvektor) där varje består av ett element som i sin tur är en vektor, tredje raden blir då lika med vektorn b3 osv. Vi kan vända på steken:

» b1 = [1 ; 2 ; 4];

» b2 = [1 ; 0 ; 3];

b3 = [2 ; -1 ; 0];

» B = [b1 b2 b3 ] B =

1 1 2 2 0 -1 4 3 0

Här skapar vi formellt en 1x3 matris (en radvektor) där varje element i sin tur är en kolumnvektor. Om man tänker på det sättet så kan man nästan grafiskt se vad satsen B = [b1 b2 b3 ] ger för resultat.

4.6.2 Räkna med matriser

Normal matrisalgebra fungerar i MATLAB, dessutom har vi tillgång till de elementvisa operatorerna och vi kan också applicera en mängd standard funktioner som till exempel cos(x) också på matriser.

Några exempel:

» clear all

» a = [1 2 5 ; 2 -1 -3];

» b = [ 2 -1; 5 2; -1 0];

» a * b ans = 7 3 2 -4

» 1./a ans =

1 0.5000 0.2000 0.5000 -1 -0.3333

» b .^2 ans = 4 1 25 4 1 0

» a(1,2) + b(2,1) ans = 7

(15)

4.7 Övningsuppgifter

1.Givet vektorn x = [1 2.75 3.9 4.6], skapa (använd elementvis operation) y, där varje element yi = 2xi3 + 4xi -3

2. Konstruera tre radvektorer:

2 5 2

3 2 4

1 0 2











och skapa en matris med hjälp av dessa, vars första rad

är (2 3 1).

Använd sedan vektorerna för att skapa matrisen

3 2 4

1 0 2

2 5 2





3. Konstruera två (3 x 4) matriser A och B, samt beräkna A+B, A-B, A*B 4. Utgå från vektorn alfa = [ 0 30 60 90 ] som betecknar fyra vinklar i grader.

Skapa sedan vektorn x där elementen är samma vinklar uttryckta i radianer.

Skapa därefter vektorn s där elementen är sinus för de givna vinklarna.

Skapa slutligen vektorn c, där elementen är cosinus för de givna vinklarna. Använd inte funktionen cos, utan beräkna värdet genom formeln cosα= 1−sin2α

Använd dessa vektorer för att skapa matrisen A med fyra rader och tre kolumner, varje rad skall bestå av vinkeln, sinus för vinkeln och cosinus för vinkeln.

5 Pass 2 – Datorer, filnamn och mer beräkningar

I det här passet skall vi lära oss litet allmänt om hur datorprogram fungerar och hur de hanterar data på hårddisk och i minnet. Men framför allt skall vi lära oss att använda M-filer och spara dessa på disk.

Vi lär oss mer om hur MATLAB hanterar vektorer och matriser och börjar göra litet mer avancerade beräkningar.

5.1 Att navigera på datorn

Att hålla ordning på alla filer som skapas under ett projetkt, som till exempel en laboration eller en MATLABövning kräver litet disciplin. Det är naturligtvis extra viktigt att man tänker sig för i en miljö som den på övningslab, där många användare använder samma dator. Innan vi går igenom hur man bör arbeta gör vi först en allmän genomgång över hur program på en dator hanterar disk och minne.

5.1.1 Minne och hårddisk på en dator

Ett program som kör på en dator hanterar två typer av information, dels "instruktioner" - det vi i dagligt tal kallar programmet, som styr programmet och på lägsta nivån talar om för programmet hur det skall utföra olika kommandon, dels "data" som är vad programmet opererar på. Sett ur det här perspektivet håller ett program som MATLAB när vi till exempel skriver "2 + 2" reda på två saker: dels vad instruktionen "x + y" innebär och hur MA T L A B skall genomföra den operationen, denna information är det vi kallar instruktioner. Sedan måste programmet också hålla reda på vad "x" och "y"

är i just den aktuella beräkningen, och spara svaret någonstans, den typen av information kallas "data".

Den här informationslagringen kan ske på två ställen, antingen på hårddisken eller i datorns internminne. Det finns några skillnader i egenskap hos dessa två lagringsmedia: hårddisken är permanent, i betydelsen att så länge allting fungerar som det skall så finns all information som lagras på hårddisken kvar så länge som man inte uttryckligen raderar den. Internminnet å andra sidan är temporärt i två avseenden, dels så "överlever" ingen information i internminnet att datorn stängs av, men det är till och med så att ett program som MATLAB avslutas så raderas all information som programmet sparade i minnet. En annan skillnad mellan hårddisk och internminne är att det går mycket snabbare att komma åt data som finns i minnet (oftast talar man om internminnet som bara

"minnet") än på disken.

Med det här som bakgrund kan vi nu förstå litet bättre vad som händer när vi kör MATLAB. Eftersom MATLAB måste finnas kvar varje gång vi startar datorn så måste själva programmet finnas lagrat på hårddisken. Men eftersom det tar lång tid att hämta instruktioner som finns lagrade på hårddisken så vill man inte att programmet skall gå och hämta varje instruktion för sig från hårddisken, det skulle dels göra programmet mycket långsamt och dels skulle datorns disk stå och surra hela tiden. Ett program som startar reserverar därför ett stycke minne för instruktioner och kopierar in de mest centrala dit och läser dem direkt därifrån. Skulle MATLAB träffa på en instruktion som inte finns inkopierad till minnet så går den ut på hårddisken och läser in denna instruktion, men inte bara en enstaka instruktion, utan ett block med instruktioner som ofta används tillsammans. Ett välkonstruerat program behöver därför inte gå ut och läsa från den långsamma disken särskilt ofta, utan håller sig för det mesta till den kopia av instruktionerna som finns i minnet.5

5 När vi lärt oss det här om hur datorer fungerar kan vi föstå två saker: Dels varför vissa program ibland kan gå så sagolikt långsamt. Om minnet "börjar ta slut", det vill säga om det inte finns något ledigt minne kvar att reservera, vilket kan hända när vi kör många program samtidigt, så kan ett program inte reservera tillräckligt stora delar av minnet för att lagra så många instruktioner så att det kan köra effektivt. Istället måste programmet

(16)

Samtidigt reserverar programmet en annan del av minnet för att lagra data. Allt som finns i MATLABs workspace lever till exempel i internminnet, när vi skriver klubba = 0.5 så reserveras ett litet område i internminnet för variabel klubba, och värdet 0.5 lagras där. Kommandot clear klubba instruerar MATLAB att vi inte längre är intresserade av klubba, den delen av minnet flaggas då som ledigt och kan användas av MATLAB för att spara en ny variabel.

Eftersom instruktionerna bara är en kopia av det som finns lagrat på hårddisken så påverkas inte programmets funktion av en eventuell krasch med efterföljande omstart, det är ju bara att skapa en ny kopia av insturktionerna från hårddsiken. Data däremot flyger all sin väg. När programmet avslutas, frivilligt eller ofrivilligt, så är all information som lagrats i workspace borta. Om man nu har lagrat priserna för ett stort antal olika sorters godis i MATLABs workspace och räknar med att behöva använda den listan igen vid ett senare tillfälle så vill man naturligtvis kunna spara listan även efter det att MATLAB avslutats för den här gången. Det här går givetvis att göra, vi kan från MATLAB spara innehållet i workspace på hårddisken, vi kan också skapa separata filer med data och/eller MATLABkommandom som sparas på hårddisk och som vi sedan läser tillbaks, sk M-filer. Detta kommer att bli det sätt vi normalt arbetar med MATLAB, genom att spara allt på hårddisk är det enkelt att gå tillbaks och göra smärre korrektioner och modifieringar och framför allt: vi kommer att spara oerhört mycket arbete genom att vi kan återanvända kod-snuttar från tidigare övningar.

5.1.2 Filnamn och Sökvägar

Varje fil på en dator måste ha ett unikt namn som fungerar som en sorts adresslapp. Precis som när vi identifierar personer genom namn och en hirearki av adresser alltifrån gata med portnummer upp till städer och länder så har en datoradress flera nivåer. På den lägsta nivån talar vi om filnamn, som till exempel rapport2.text, laboration4.m osv. Varje fil måste vara placerad i en katalog (engelskans directory, på svenska kan vi också kalla det "mapp"). Katalogen kan i sin tur vara inplacerad i en annan katalog, och så vidare. Det är klokt att försöka organisera en trädstruktur av kataloger som logiskt delar upp de filer man äger i avgränsade undergrupper som i exemplet nedan, Vi ser hur det finns en textfil som heter "utkast1" i katalogen "rapport". Katalogen "rapport" ligger i sin tur i katalogen "lab1", som liger i katalogen "labbar" och så vidare. I en given katalog kan det bara finnas en fil med samma namn, vilket inte är så konstigt, hur skulle datorsystemet annars förstå till exempel vilken fil vi ville skriva ut när vi ger ett print kommando. Men precis som brevärarna inte bara kan hantera en "Sven Andersson" utan kan hålla isär Sven Anderson på Linnégatan från Sven Andersson på Kungsgatan, och Sven Andersson på Linnégatan i Göteborg från Sven Andersson på Linnégatan i Stockholm så kan datorn, om vi bara ger hela adressen, hålla isär en fil som heter "utkast1" i katalogen

"rapport" i katalogen "lab2" från en fil som heter "utkast1" i katalogen "rapport" i katalogen "lab1".

För att vara säkra på att vi och datorn förstår varandra när vi refererar till filer så måste vi reda ut två saker. Dels hur man anger att det är filen utkast1 som finns i trädet under "lab1" och inte filen med samma namn i trädet under "lab2", det vill säga hur bär vi oss åt för att skriva en fils fullständiga namn, inklusive katalogtillhörigheten (detta kallas på engelska path). Den andra saken vi måste förstå ut och titt som tätt läsa instruktioner från den långsamma disken. Det här leder till "sega" program som svarar långsamt på våra kommandon.

Vi förstår nu också varför program "krascher". I nio fall av tio (minst) beror det på att program A (ofta tillverkat av Microsoft) har skrivit till exempel data i en del av minnet som program B reserverat för sina instruktioner. I stället för instruktioner om hur programmet skall hantera "x + y" står det någonting helt annat, som programmet helt oskyldigt försöker genomföra med resultatet att allting hänger sig. Ibland är program A och B identiska, ett program kan skriva över sina egna instruktioner. Det här kallas ibland med datorjargon "minnesläcka".

är något som kallas "den aktuella katalogen" och som avgör hur datorn tolkar våra kommandon när vi bara ger namnet och ingen information om katalogtillhörigheten.

5.1.3 Fullständiga filnamn

Ett fullständigt filnamn i operativsystemet Windows börjar med namnet på hårddisken. Den dator du arbetar på kan nämligen ha mer än en hårddisk6, och det kan också vara så att du över nätverket kan ha tillgång till hårddiskar som inte fysiskt finns på just den datorn du arbetar vid, som till exempel de filer du lagrar "på ditt AFS konto". När du loggat in på ditt AFS konto (se intstruktioner på http://www.physto.se/afs/konton_windows.html) så kommer det att se ut som om de filer du lagrat där ligger på en disk på den dator du jobbar vid med namnet S. I filnamnet följs disknamnet av kolon, därefter \ ("backslash") och sedan namnen på katalogerna, separerade med backslash. Om vi till exempel antar att katalogen "Sten" i exemplet ovan ligger i en katalog "USERS" som inte har någon katalog över sig på D-disken så blir den fullständiga adressen till filen utkast1:

D:\USERS\Sten\Expkursen\labbar\lab1\rapport\utkast1 . Även kataloger kan adresseras på detta sätt, katalogen för lab1 har adressen D:\USERS\Sten\Expkursen\labbar\lab1 .

6 Rent fysiskt är det oftast så att på datorer med mer än en hårddisk så finns det egentligen inte mer än en disk, men den är uppdelad i fler avgränsade avdelningar som för datorn ser ut som om de vore helt skilda enheter.

ten

xpkursen

abbar

ab1 ab2

data rafer apport

atlab

Exempel på katalogstruktur

(17)

5.1.4 Aktuell katalog

Varje gång vi vill spara en fil från ett program så finns det ett förstahandsalternativ, en katalog där programmet vi arbetar i sparar filer om inte användaren aktivt väljer en annan katalog. Denna katalog kallas "aktuell katalog" (engelska "current directory"). Det är alltså här filer hamnar om vi inte aktivt anger en annan katalog. Exakt vilken katalog som är den aktuella kan variera från fall till fall. De flesta program har en katalog någonstans i den katalogstruktur som hör till programmet som används i standardfallet. Öppnar vi Microsoft Word och skapar ett nytt textdokument så sparars det i en katalog som hör till programmet, snarare än till dig som användare. Om vi däremot öppnar ett redan exiterande dokument genom att dubbelklicka på det, gör några ändringar och sparar det under ett nytt namn så hamnar det i den katalog där det ursprungliga dokumentet låg. Oftast bereder det oss inte någon större möda att hålla rätt på detta, när vi sparar ett dokument så öppnas ju en dialogruta där vi tydligt kan se i vilken katalog dokumentet hamnar, och vi en rullgardinsmeny kan välja en annan katalog. Men om vi till exempel sparar MATLABs workspace genom att ge kommandot save i kommandofönstret så får vi inte upp någon dialogruta utan MATLAB sparar direkt i det som är den aktuella katalogen.

I MA T L A B finns det en liten ruta högst upp i desktopen som anger vilket som är den aktuella katalogen. Om vi skriver in adressen till någon annan katalog i rutan så ändras den aktuella katalogen till den nya adress vi skrivit in., vi kan också genom att klicka på pilen till höger om textraden få upp en meny där vi kan välja att gå tillbaka till någon av de kataloger som tidigare under vår session varit

den aktuella.

5.1.5 "Current directory browser"

Det finns en panå i MATLABs desktop som används just för att navigera bland filer, den heter "Current Directory Browser", och aktiveras på samma sätt som de andra panåerna i desktopen genom att gå in i

"View" menyn och klicka på "Current Directory Browser". I den panå som då öppnas har vi många möjligheter, vi kan bland annat

• få en överblick över vilka filer som finns i den aktuella katalogen

• öppna en godtycklig fil i det program den skapades genom att dubbelklicka på ikonen för filen

• ändra aktuell katalog. Vill vi flytta oss nedåt i strukturen så dubbelklickar vi på ikonen för den katalog vi vill flytta oss till, vill vi flytta oss uppåt så dubbelklickar vi på symbolen uppe på fönstrets list. Genom att upprepa detta kan vi flytta oss godtyckligt långt upp i katalogträdet och sedan flytta oss ned genom en anna gren genom att dubbelklicka på de kataloger som syns i panån.

En detaljerad beskrivning av "Current Directory Browser" ges i hjälpsektionen:

?/MATLAB/Using¬MATLAB/Development¬Environment/Running¬MATLAB¬Functions/

Workspace, Search Path and File Operationa/File Operations/Current Directory Browser

5.1.6 Var söker MATLAB efter filer

MATLAB har ett antal kommandon som innebär att programmet skall ladda in innehållet i en fil till workspace. Man kan till exempel genom att skriva load filnamn läsa in hela innehållet i filen med namn filnamn in i MATLABs workspace, man kan också genom att bara skriva filnamn.m instruera MATLAB att läsa in och utföra de kommandon som finns sparade i filen filnamn.m För att detta skall fungera krävs givetvis att MATLAB hittar filen i fråga. Det fungerar givtevis om den fil vi anger ligger i den aktuella katalogen, men utöver det så har MATLAB en lista med kataloger där den söker efter de filer vi anger i våra kommandon. En sådan lista kallas sökväg (eng. search path). När vi skriver in ett filnamn så kommer MATLAB att först leta efter filen i den aktuella katalogen, därefter söks efter filen i alla kataloger som finns med i sökvägen, i den ordning som katalogrna står i sökvägen. Det kan alltså vara viktigt i vilken ordning katalogerna är listade i sökvägen, om det finns flera filer med samma namn. MATLAB har en meny där man kan se vilka kataloger som finns med i sökvägen. Man kan

också lägga till eller ta bort kataloger, och även ändra ordningsföljden. För att få fram den dialogruta där det sker går vi till menyn "File" och klickar på "set path". Efter att ha valt7 en av katalogerna i fönstret till höger kan vi sedan med hjälp av knapparna till vänster flytta den valda katalogen upp och ner i listan för att på så sätt ändra ordningsföljden mellan dem. Vi kan också ta bort en vald katalog och med någon av de två översta knapparna lägga till en katalog till sökvägen. Använder vi den övre knappen när vi lägger till en katalog kommer endast den katalog vi valt att läggas till sökvägen, använder vi den andra knappen lägger vi till en katalog och alla dess underkataloger till sökvägen.

7 Att "välja" i en meny som den ovan innebär att vi klickar en gång på den rad vi vill välja. Om all går som det ska visas den valda raden mot en mörk bagrund.

References

Related documents

Under observationerna har vi tydligt kunnat se att dessa båda lärare utgår från gruppen i sin undervisning, det man kommer fram till gemensamt i språkandet

Forskningen visar att det ofta är en stor fördel att få möjlighet att lära sig läsa på sitt modersmål. Man menar att färdigheterna måste ses i relation till såväl

Undersökningens huvudrubrik, När det inte är roligt att läsa och skriva, syftar på vad flera av lärarna i undersökningen säger då de lyfter fram ovilja mot läsning som

Det finns alltså flera belägg för att kompetens inom läsande och skrivande är nära relaterade, men frågan är om detta samband är gällande även när det rör sig om olika typer

Läs artikeln högt tillsammans med eleverna och låt dem sedan rita en egen bild, alternativt låt det bli en läxa där eleverna läser och ritar hemma....

Mobbning är när en eller flera individer upprepade gånger och över tid blir utsatt för negativ handling från en eller flera andra individer. Kränkningar

[r]

Kartstyrningsfunktioner som kommer från CoordCom, så kallade GIS-instruktioner, gör Ärendekartan till aktiv karta och påverkar då bara denna karta.. Observera att