MATLAB 6 i kursen experimentella metoder

Storlek: px
Starta visningen från sidan:

Download "MATLAB 6 i kursen experimentella metoder"

Transkript

1 MATLAB 6 i kursen experimentella metoder Sten Hellman Fysikum Stockholms Universitet Övningsuppgifter av Max Karlovini, Theresia Månsson & Jonas Strandberg 1 2

2 1 INLEDNING 7 2 VAD ÄR MATLAB? 8 3 KONVENTIONER 9 4 PASS 1- KOMMA IGÅNG De första stegen Hello World Logga in på datorn Starta Matlab Matlabs "skrivbord (desktop) Say Hello Matlabs hjälpfunktion Avsluta Matlab Börja räkna Matlab som en räknedosa operatorer variabler konstanter Miljön i MATLAB Städa upp kommandofönstret: tyst input, fortsättningsrader Format och avrundning Matlabs "Workspace" Play it again Sam - att upprepa kommandon Att återkalla kommandon Matlabs historiefönster M-filer, vad är det? Litet om vektorer Skapa vektorer Räkna med vektorer Elementvisa operationer Litet om matriser Skapa matriser Räkna med matriser Övningsuppgifter 29 5 PASS 2 DATORER, FILNAMN OCH MER BERÄKNINGAR Att navigera på datorn Minne och hårddisk på en dator Filnamn och Sökvägar Fullständiga filnamn Aktuell katalog "Current directory browser" Var söker MATLAB efter filer Var skall jag spara filer Gemensamma matlab-filer Att spara och läsa tillbaks innehållet i workspace M-filer Editorn för M-filer Att spara en m-fil på disk Läsa in och köra en m-fil Kommentarer In- och Utmatning av data till en m-fil Utskrift när m-file kör - Echo kommandot Inbyggda funktioner Vektorer Operationer på vektorer Matriser Operationer på matriser Övningsuppgifte 43 6 PASS 4 2D-GRAFIK Kurvor i två dimensioner Att växla mellan fönster, och städa i fönster plot-kommandot Styra utseendet på grafiken Koordinataxlar Text Plotta punkter med fel Histogram Kommandot bar - stapeldiagram Kommandot hist - histogram Kommadot stairs - konturdiagram Kommandot stem - stolpdiagram Utskrifter av grafik Spara grafer och flytta till andra program Lägga in bilder i Word

3 6.6 Fler Kurvor i samma graf - kommandot hold Fler grafer i samma fönster - kommandot subplot Rita i grafer Logaritm-skalor Avacerad grafik Axlar och property-editor SVAR OCH LÖSNINGAR Svar till avsnitt Övningsuppgifter SAKREGISTER 72 7 PASS 5 - LITET OM TEXT-STRÄNGAR, MER BERÄKNINGAR, ANPASSNINGAR MATLABs Workspace Browser Array Editorn Anpassa MATLABs Desktop Text-strängar Manipulera textsträngar Delsträngar Enkel statistik Polynom Hitta rötter till polynom Finn polynomuttryck för givna rötter Värden på polynom Derivator av polynom Produkter och kvoter av polynom Matrisekvationer Minsta kvadratanpassning Minsta kvadratanpasning med matrismetod Övningsuppgifter 68 8 PASS 6 - PROGRAMMERING Att programmera Formatterad in- och utmatning Slingor funktioner 69 9 PASS

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 Vad är MATLAB? 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 7 8

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 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 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 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 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 Figur 1Matlab symbolen 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 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. 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 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 Figur 2: Matlabs desktop 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 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å 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" 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 Matlab som en räknedosa 13 14

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:» operatorer För aritmetik har MATLAB de vanliga operatorerna: + Addition - Subtraktion * Multiplikation / Division \ Vänsterdivision beskrivs i avsnitt XXX ^ Exponentiering, till exempel x^2 = x 2 Komplex konjugering och transponering ( ) Paranteser för att definiera prioritetsordning Prioritetsordningen mellan operatorerna är den normala så att när man till exempel skriver 1 3 * 4 + 3*2 ^3 så beräknas först, 2 3, därefter de bägge produkterna och sedan summan 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):» laskeblask = 10» korv = 12» kaffe = 4 laskeblask = 10 korv = 12 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 1 Notera att MATLAB ignorerar mellanslag i alla uttryck. Det spelar alltså ingen roll om vi skriver 2+3+4*5 eller *5 eller * 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 =

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 = » klubba = 2.50 klubba = » Sune = 20 * kola + 4 * klubba Sune = 20» klubba = 5.00 ä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 konstanter MATLAB har ett antal inbyggda konstanter: pi konstanten π = 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 1 2. realmin , 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» Sune klubba = Sune = 20 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 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 pi = » pi = 4.75 pi = 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 Miljön i MATLAB 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 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 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 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 bytes 3 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

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 historiefö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 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å deleteknappen. 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 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 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. Copy Evaluate Selection Create M-file Delet Selection Delete to Selection Delete Entire History 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å 21 22

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 Skapa vektorer Det enklaste sättet att skapa en radvektor är genom direkt tilldelning, kommandot» x = [ ]; 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 = » b = a' b = Alternativt kan man ge transponeringsoperatorn direkt i tilldelningssatsen: a = [ ] ' markerar direkt att a skall vara en radvektor 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» a + b » c = a(3) - 7*b(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 =» a ans 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. 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: 23 24

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 = 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 a 2 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 x 2 -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 = [ ];» y = x.^2 y = » x.* y » a = [ ];» a./ y » 1./ x 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 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: 25 26

14 » A = [ ] A = (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 ; ; 2-1 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 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 ; ];» b = [ 2-1; 5 2; -1 0];» a * b 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 = 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];» 1./a» b.^ b3 = [2 ; -1 ; 0];» B = [b1 b2 b3 ]» a(1,2) + b(2,1) 7 B =

15 4.7 Övningsuppgifter 1.Givet vektorn x = [ ], skapa (använd elementvis operation) y, där varje element y i = 2x 3 i + 4x i Konstruera tre radvektorer: 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 Konstruera två (3 x 4) matriser A och B, samt beräkna A+B, A-B, A*B 4. Utgå från vektorn alfa = [ ] 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 2 cos, utan beräkna värdet genom formeln cos α = 1 sin α 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 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 MATLAB 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 29 30

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 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. ab1 abbar xpkursen Fullständiga filnamn ten data rafer apport Exempel på katalogstruktur atlab 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årddisk 6, 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å 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. ab

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 MATLAB 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 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 den aktuella "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 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 valt 7 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

18 Observera att det är nödvändigt att klicka på "Save" när vi är klara för att våra sökvägar skall sparas. Notera också att de ändringar du gör till MATLABs sökväg kommer att gälla för alla andra som också använder denna dator, precis som du kommer att kunna ha "glädje" av alla sökvägar som någon annan lagt in Var skall jag spara filer Eftersom vi arbetar på datorer som används av många personer måste vi vara noggranna med var på hårddisken vi sparar data så att vi inte lämnar efter oss en massa "skräp" som andra inte är intresserade av. Likaledes är det ju inte särskilt attraktivt att behöva återvända till exakt samma dator vid nästa arbetspass. Det finns egentligen bara två areor som inte är "allmänna", det vill säga som används av alla som använder datorn. Den ena är katalogen USERS som ligger antingen på C eller D disken på datorn. För tillfälligt sparande av personliga filer kan man skapa en underkatalog till denna katalog med sitt eget namn. Men kom ihåg att denna katalog bara kan ses på just denna dator. Använd därför den katalogen bara för temporär lagring under ett arbetspass. Filer som man vill spara för längre tid och kunna komma åt oavsett vilken dator man sitter vid skall sparas på AFS-disken, S-disken på övningslabs datorer. För att ha en rimlig chans att hitta sina sparade data bör man ha en tydlig indelning i olika kataloger som var och en hör samman med ett tydligt "delprojekt". När vi kommit igång med labbandet är det till exempel naturligt att ha en katalog som heter "Laboration 1" med underkataloger "rådata", "mfiler", "rapport" mm. Under övandet med MATLAB bör man därför skaffa sig kataloger som t.ex "pass 1" och sedan lägga dem i en katalog som kallas "MATLABövningar". Namn på katalogerna är givetvis helt fritt att välja, men det bör vara en logisk struktur där alla filer i en given katalog "hör ihop", och har namn som gör att man förstår vad det är för fil utan att behöva öppna den och titta efter. Alla filer som sparas på "allmänna" områden riskerar att raderas, antingen av misstag av någon av dina kollegor, eller också av systemansvariga när de städar upp på datorns hårddisk Gemensamma matlab-filer Under kursens gång kommer du att vid några tillfällen behöva läsa in gemensamma filer, det kan vara data som är gemensamma för alla studenter, eller exempel på hur man kan skriva kod för att lösa givna uppgifter. Sådana filer kommer att sparas på en gemensam area som du når via en ikon mitt på datorns skrivbord som heter just "gemensamma matlabfiler". Finns ikonen inte där kan du försöka att dubbelklicka på ikonen "My Computer" längst upp till vänster på datorns skrivbord. Då öppnas ett fönster där du skall kunna se den disken. I övrigt ser den gemensamma arean ut som en separat disk "G-disken" på din dator. Denna gemensamma area delas av flera kurser, filerna som hör till denna kurs kommer att ligga i en katalog med kursens namn. 5.2 Att spara och läsa tillbaks innehållet i workspace Om man sitter mitt i en komplicerad beräkning i MATLAB kan det vara väldigt besvärligt att avbryta arbetet eftersom MATLABs workspace innehåller alla variabler som är definierade och deras värden. Har vi knappat in priserna för femton olika godissorter så vill man inte gärna ha det arbetet ogjort och behöva börja om igen bara för att kompisen vill att man skall logga ut och följa med och fika. I dylika nödsituationer kan man spara hela innehållet i MATLABs workspace till en diskfil. När man sedan vill återuppta arbetet kan man läsa in filens innehåll till MATLABs workspace och enkelt fortsätta med precis samma omgivning som man hade innan man gjorde paus. Sparar man workspace i en AFS- monterad katalog som kan nås från alla datorer så kan man till och med fortsätta på vilken dator som helst. För att spara innehållet i workspace ger man helt enkelt kommandot save filnamn i kommandofönstret. Innehållet i workspace sparas då till en fil med namnet "filnamn.m" i den aktuella katalogen (matlab lägger automatiskt till ändelsen ".m"). För att läsa tillbaks innehållet i filen till workspace ger man kommandot load filnamn (utan ändelse). För att detta skall fungera måste filen "filnamn" finnas antingen i den aktuella katalogen eller i någon av de kataloger som ingår i MATLABs sökväg. Ett bättre sätt att göra dessa operationer, bättre för att det är lättare att kontrollera i vilken katalog filen hamnar, är att i "File" menyn välja "Save workspace as". I den dialogrutan som då kommer upp kan man välja både vilket namn man vill ge filen och i vilken katalog den skall sparas. Det omvända kommandot är "Import Data" i file menyn som öppnar en dialogruta där man kan ange vilken fil som skall laddas in i workspace. 5.3 M-filer Det absolut smidigaste sättet att använda MATLAB är att konsekvent jobba med så kallade "m-filer". I en m-fil kan man skriva in alla de kommandon man kan skriva i MATLABs kommandofönster och spara dessa till hårddisken. När man sedan skriver namnet på m-filen i MATLABs kommandofönster så utförs alla kommandon som står i filen och resultatet visas i MATLABs kommandofönster. Genom att utnyttja m-filer kan vi spara en otrolig mängd arbete. Vi kan till exempel skriva in alla rådata från en laboration i en m-fil, sedan steg för steg skriva in alla operationer för att göra mätvärdesbehandling på laborationen. Därefter skriver vi in de kommandon som krävs för att producera de grafer vi skall redovisa i laborationsredogörelsen. Vi kan när som helst i den här processen ta paus, spara filen till disk och fortsätta vid ett senare tillfälle. Det är också enkelt att ändra ett enstaka kommando om man har fått någon formel om bakfoten, eller om man vill ändra någon detalj i ett histogram. Det bästa man kan göra som student är att bygga upp ett förråd av små m-filer som gör avgränsade uppgifter, till exempel en anpassning till en andragradskurva eller en beräkning av chi-kvadrat. Eftersom en m-fil kan kalla en m-fil kan filer som utför klart definierade uppgifter enkelt återanvändas när liknande problem skall lösas Editorn för M-filer MATLAB har ett särskilt fönster som används för att skapa och ändra m-filer (fönstret erbjuder också ett kraftfullt "avlusningsverktyg", ett ämne som vi återkommer till senare). Du kan hitta fullständig information om MATLABs editor vid?/matlab/using MATLAB/Development Environment/Editing and Debugging M-files, här ger vi den information som behövs för att komma igång och jobba. Det finns många sätt att starta verktyget: Om vi klickar på ikonen som visar ett tomt vitt pappersark längst till vänster i verktygslisten öppnas editerings fönstret och vi kan börja skriva in våra kommandon. Startar vi editorn på det här sättet finns inget filnamn definierat för den nya m-filen, så när vi sparar filen kommer MATLAB att begära att vi anger ett namn. I menyn "File" klickar vi på "New" och sedan "M-file" för att uppnå samma resultat. I kommandofönstret skriver man "Edit" för att få upp ett fönster och en ny fil. Alternativt kan man i kommandofönstret skriva "Edit filnamn". Om det existerar en fil med det namnet någonstans inom MATLABs sökväg så öppnas denna. Om det inte finns någon fil med det 35 36

19 namnet så presenterar MATLAB en dialogruta där vi får svara på om vi vill skapa en ny fil med det namnet. Svarar vi nej så öppnas inget editor-fönster. Låt oss börja med att säga hej, öppna editorn för m-filer på något av ovanstående sätt. Skriv sedan in raden: disp ('Hej Världen') Att spara en m-fil på disk Hela poängen med att skapa en m-fil är ju att den skall sparas på hårddisk. För att göra det går vi in i "File" menyn och väljer "Save". Om filen vi vill spara är nyskapad och inte har något namn så kommer MATLAB att öppna en dialogruta där vi kan ange filens namn och i vilken katalog den skall ligga. Har vi ändrat i en redan existerande fil så sparas den ändrade versionen med samma namn som den ursprungliga. Observera att det här innebär att den ursprungliga versionen är förlorad för gott. Det kan därför vara klokt, särskilt om man vill ändra i en komplicerad redan fungerande fil, att istället för att spara den med samma namn som förr spara en kopia med ett annat namn så att den ursprungliga, oförändrade versionen av filen finns kvar på hårddisken. Detta gör man genom att istället för att ange "Save" väljer "Save as " under "File"-menyn. Vi får även i det här fallet upp dialogrutan där vi kan välja namn och katalog för filen. När man väl har introducerat alla ändringar och fått dem att fungera som man önskar kan man slänga den gamla filen och döpa om den nya till det gamla namnet om man så önskar. En genväg för att spara filen är att klicka på mapp-symbolen i verktygsraden. För en ny fil får vi då upp dialogrutan och kan välja namn och katalog, en gammal fil sparas med det gamla namnet. Ta nu och spara din första m-fil genom någon av metoderna ovan. Lägg filen i en lämplig katalog (kanske "MATLAB/pass2"?) på din afs-area. Ge filen namnet "hej". Du behöver inte själv lägga till ändelsen ".m" det sköter MATLAB själv Läsa in och köra en m-fil Enklaste sättet att köra en m-file är att bara skriva dess namn i kommandofönstret. Om filen finns antingen i den aktuella katalogen eller i någon katalog i sökvägen så kommer de kommandon som finns i filen att utföras. Prova: >> hej Hej Världen Du kan också köra en m-fil direkt från editor-fönstret genom att antingen klicka på symbolen till höger eller också gå till menyn "Debug" och välja "Run". Om det finns ändringar i editorfönstret som inte är sparade till hårddisk (detta markeras genom en asterisk brevid filnamnet högst upp på listen till editor-fönstret) så sparas först filen till disk innan kommandona utförs. När man håller på och jobbar med en komplicerad m-fil som till exempel när man vill få ett visst utseende på en graf och håller på och provar sig fram så är det bekvämt att köra filen från editor-fönstret på det här sättet Kommentarer. I princip är det ingen skillnad på hur MATLAB hanterar kommandon som skrivs in i kommandofönstret och kommandon som läses in via en m-fil. Det finns ändå ett antal kommandon som man knappast använder i kommandofönstret men som spelar en stor roll när vi jobbar med m-filer. Det allra viktigaste av dessa är ett av de allra viktigaste MATLAB kommandot - kommentarer. Kommentarer inleds med ett procent-tecken "%" och följs av godtycklig text. När MATLAB utför kommandon ignorerar programmet procent-tecknet och vad som följer efter det. Syftet med kommentarer är att det skall göra det enklare att titta i en m-fil och kunna följa med vad programmet gör, och hur. Detta är användbart både om man använder program skrivna av andra, men också när man ett år senare (kom ihåg att ni skall spara alla era gamla m-filer!) återvänder till filer man själv har skrivit, det kan vara nog så svårt att minnas vad man själv tänkt och gjort! Kommentarer används som en varudeklaration i början av ett program (i det här sammanhanget är en m-fil att betrakta som ett program) för att beskriva vad programmet gör, vad det heter, vem som har skrivit det och när, samt om programmet behöver någon speciell typ av indata eller levererar någon speciell typ av ut-data. för att beskriva vad de viktigaste variablerna står för vad de olika programstegen utför Det går nästan alltid att med ett snabbt ögonkast skilja ett program skrivet av en van programerare från ett skrivet av en nybörjare, även om man inte begriper ett skvatt av programmet gör. Eftersom en av skillnaderna ofta är mängden kommentarer - en duktig programmerare skriver mycket kommentarer - så kan man ibland frestas att skriva en kommentar för även triviala steg, vilket inte underlättar läsningen. Exakt hur mycket och vilka avsnitt som skall kommenteras kan vara en smaksak, men ett exempel som författaren tycker är rimligt kan vara: % % Volym.m % % Beräknar volymen för cylindrar baserat på % mätt radie och angiven höjd % Sten Hellman % Radie = [ ] Hojd = [ ] Volym = pi*radie.^2.* Hojd % % Felet i radien är konstant 0.3, felet i höjden % är 10% av mätetalet % DeltaRadie = 0.3 * ones(1,6) DeltaHojd = 0.1 * Hojd 37 38

20 DeltaVolym = Volym * sqrt( (DeltaRadie./ (2*Radie) )^2 +(DeltaHojd./ Hojd)^2) Däremot vore till exempel % % Volymen är pi * r-kvadrat * höjden % Volym = pi*radie.^2.* Hojd en överdrift som knappast gör det enklare att följa koden In- och Utmatning av data till en m-fil. En annan skillnad mellan att skriva m-filer och ge kommandon direkt i kommandofönstret är hur data matas in i MATLAB och hur de presenteras för den som kör utför ett kommando. Kommandot disp är ju till exempel oftast inte särskilt meningsfullt i kommandofönstret Att få MATLAB att skriva "Hallo World" genom att själv skriva precis samma sak i argumentet till kommandot disp är ju måttligt intressant. I en m-fil som man kör är kommandot däremot mycket nyttigt eftersom det kan användas för att skriva information i kommandofönstret som kan ange resultat av beräkningar eller ange att vi skall mata in information till MATLAB. Vi kommer snart att märka att det finns ett behov av att kunna mata in data till en körande m-fil och att skriva ut data från filen till kommandofönstret. Man kan till exempel tänka sig att m-filen i avsnitt istället för att beräkna volymen av ett antal cylindrar där vi skriver in radie och höjd i m-filen skriver en mer allmän m-fil som kan användas för att beräkna volymen av en godtycklig cylinder. En sådan m-fil behöver då ha en metod för användaren att mata in ett godtyckligt värde på radien och höjden, och en metod att mata ut resultatet från beräkningen i kommandofönstret. Vi kommer att lära oss hur det går till i avsnitt 8.2 nedan där vi går igenom så kallad formatterad in- och utmatning. Men redan innan vi lärt oss detta kan vi kommunicera med m- -filer genom att utnyttja att m-filer och kommandofönstret använder samma workspace. Om vi till exempel kör m-filen ovan för att beräkna cylindervolymer så kommer variabeln Volym som innehåller resultatet att finnas kvar i workspace. Vi kan alltså genom att skriva Volym i kommandofönstret se resultatet av beräkningen. Omvänt kan man tänka sig att ta bort raden Radie = [ ] ur m-filen och istället innan vi kör m-filen tilldela värden i kommandofönstret. Eftersom Radie då existerar i workspace kommer m-filen att fungera precis som vanligt. På det sättet går det enkelt att köra om filen med olika värden på radien, det är bara att skriva in nya värden på Radie Utskrift när m-file kör - Echo kommandot. När MATLAB kör en m-fil så skriver programmet ut varje kommando i kommandofönstret, följt av svaret på kommandot. Det här kan vara väldigt bra om vi sitter och jobbar med en m-fil som ännu inte fungerar som det var tänkt. Men för en fungerande och litet komplicerad m-fil kan det var väldigt irriterande, kommandofönstret fylls av information som man ofta inte är intresserad av. För att styra detta kan man använda kommandot echo. Skriver vi echo off stängs repetitionen av varje kommando av, skriver vi echo on så sätts den på igen. Fullständig dokumentation av kommandot får du om du skriver help echo. Att sätta echo till off innebär att vi inte behöver se varje kommando upprepas på skärmen, men fortfarande så kommer MATLAB att visa resultaten, om vi till exemple kör en m-fil med kommandot Radie = [ ] med echo on så ser vi Radie = [ ] Radie = i kommandofönstret. Har vi däremot satt echo till off så ser vi Radie = i kommandofönstret. Även för en fungerande m-fil kan det vara bra att se vilka värden de viktigaste variablerna har, men vi vill förmodligen inte se alla variabler och vilka värden de antar. För att slippa detta använder vi samma knep som när vi skrev in kommandon direkt i kommandofönstret - vi avslutar raden med semikolon. 5.4 Inbyggda funktioner Det finns ett mycket stort antal standardfunktioner inbyggda i MATLAB, man kan utgå ifrån att den funktion man vill använda också finns inbyggd och bara mycket sällan bli besviken. De vanligast förekommande är grupperade i tre sektioner, elementära funktioner, specialfunktioner och elementära matrisfunktioner. Det enklaste sättet att få reda på vilka funktioner som finns är att i kommandofönstret skriva help elfun, help specfun och help elmat. När man väl hittat den funktion man söker kan man få mer detaljerade information om den genom att skriva help funktionsnamn. Observera att MATLAB skriver funktionsnamn med versaler i hjälpdokumentationen, men att du skall använda gemener (små bokstäver) när du ger kommandot i MATLAB. 5.5 Vektorer Operationer på vektorer MATLAB har ett antal inbyggda funktioner som opererar på vektorer. Vi har redan sett ett exempel på en sådan, nämligen transponering ', som applicerad på en vektor gör om en radvektor till en kolumnvektor och vice versa. Andra funkioner är: zeros, ones, rand, randn Dessa operatorer kan användas för att skapa vektorer och matriser utan att man behöver tilldela elementen sina värden ett och ett

21 zeros(n x m) skapar en n x m matris där alla element är satta till noll. Som ett specialfall kan n eller m vara 1, i vilket fall en radvektor repektive kolumnvektor skapas. ones (n x m) skapar en n x m matris där alla element är satta till 1. rand (n x m) och randn (n x m) skapar matriser där elementen är slumpvis fördelade, rand producerar tal som är jämnt fördelade mellan 0 och 1, randn producerar slumptal som är normalfördelade kring 0 med standardavvikelse lika med 1. linspace Kommandot linspace(x1, x2, N) skapar en vektor som har N element, x1 som första element och x2 som sista element. Avståndet mellan två på varandra följande elemnt blir lika stort length(vektor) Kommandot length(vektor) returnerar längden av vektorn x, man kan spara resultatet i en variabel genom att ge kommandot längd = length(vektor). sum (vektor) beräknar summan av alla element i vektorn. "kolon" - operatorn "kolon" operatorn är en mycket användbar operator i MATLAB, både när vi arbetar med vektorer och matriser. Den förekommer i fler olika versioner, vilket i början kan göra det litet förvirrande. Den enklaste formen är a : b viket helt enkelt motsvarar serien av tal från a till b med steget 1 mellan varje tal. Vi kan definiera steget till att vara något annat tal än 1, kolon operatorn ser då ut så här: a : c : b, vilket ger oss en serie tal mallean a och b, med steget c. Några exempel: >> vektor1 = [ 2 : 6] vektor1 = >> vektor2 = [ 1 : -0.5 : -4] vektor2 = kolonoperatorn är uppenbarligen ett utmärkt verktyg för att skapa vektorer med regelbundna intervall mellan elementet. Vi kommer snart att se att när vi skall producera grafer så är det just precis sådana vektorer som vi kommer att skapa om och om igen. Något annat som blir väldigt behändigt med hjälp av kolonoperatorn är att adressera en serie element i en vektor: >> d = [ ]; >> d(2:4) 5.6 Matriser Operationer på matriser De flesta av vektorfunktionerna opererar också på matriser, men ibland med litet oväntade resultat. Dessutom finns ett antal funktioner som är specifika för matriser. Några av de viktigaste är: sum(matris) Det är lång ifrån uppenbart vad vi kan förvänta oss här. Funktionen ger inte summan av alla element i matrisen, låt oss prova oss fram: >> A = [ ; ; 7 8 9]; >> sum (A) sum (A) ger oss alltstå tydligen en radvektor vars element är summan av kolumnerna i matrisen A. Detta beteende är något som kommer att återkomma, MATLAB arbetar ofta med kolumnerna i en matris. Hur skall vi göra för att beräkna summan av raderna? Det enklaste är att anpassa sig till MATLABs preferenser, om MATLABs funktioner arbetar med kolumner och vi är intresserade av rader, låt oss transponera matrisen och sedan applicera funktionen på den transponerade matrisen. I det här fallet ger oss sum(a') en radvektor vars element är summan av kolumnerna av den transponerade matrisern, vilket ju är samma sak som summan av raderna i den ursrpungliga matrisen. Vill vi sedan få det att se litet snyggt ut så transponerar vi resultatet, som ju är en radvektor, till en kolumnvektor. Hängde ni med? Det är nog enklare att bara göra det hela än att försöka läsa den här beskrivningen, alltså: >> A' >> sum(a')

22 >> sum(a')' 6 8. Beräkna [A,B] = A B - B A och {A,B} = A B + B A givet matriserna A = B= Beräkna rymdvinkeln mellan vektorerna (1, 3, 7) och (2, 5, 9) i grader Kommandot sum(a')' ger oss en kolumnvektor där varje element är summan av raden i den ursprungliga matrisen. Gå igenom exemplet ovan och se till att du förstår alla led i operationerna! eye(n) Eye(N) producerar en N x N enhetsmatris. diag(a) Resulterar i en kolumnvektor där elementet i raden n motsvarar elementet i diagonalen av matrisen på rad n och i kolumn n. kolon operatorn Precis som för vektorer är kolonoperatorn ett bekvämt sätt att adressera delar av en matris: A(1:4,3) adresserar elementen som finns i rad 1 till och med fyra i den tredje kolumnen i matrisen A. Ett specialfall är när vi skriver : utan några omgivande siffror, operatorn resulterar då i alla element i en kolumn eller rad: A(:,3) ger alla element i tredje kolumnen av A. 5.7 Övningsuppgifte 5.Skapa genom att använda vektoroperatorer vektorerna a = (4, 2.4, 0.8, -0.8, -2.4) b = ( ) 6. Skapa en vektor med x värden: x = (1, 3, 5, 7). Skapa sedan, genom beräkningar på x-vektorn, en vektor y där varje element uppfyller y = 3x 2 + 4x för motsvarande element i x-vektorn. Skapa därefter vektorn y-prim, där varje element är lika med derivatan av ekvationen ovan, beräknad för x-värden ur vektorn x. 7.Skapa genom att enbart använda vektor och matrisoperatorer matrisen A (det går att göra på en rad) A =

23 6 Pass 4 2D-Grafik I det här passet kommer vi att koncentrera oss på att skapa grafik, histogram, plottar och annat som kan användas för att åskådliggöra experimentella resultat. Vi skall försöka avstå från frestelsen att komma med pekpinnar om hur grafik skall utformas för att vara bra, utan i stället koncentrera oss på att gå igenom tekniken, så att vi kan åstadkomma grafik som ser ut som vi avser. Efter att ha gått Medeltemperatur Kaninpopulationen på Gotland Teoretiskt värde Data Tid från start (mån) igenom det här passet skall du själv kunna producera en plot som denna och också kunna både skriva ut den och kopiera in den i ett word-dokument för att bifogas i en lab-rapport. 6.1 Kurvor i två dimensioner Att skapa enklare två-dimensionella plottar i MATLAB är relativt enkelt. En skillnad mellan MATLAB och en del andra grafikprogram är att vi inte kan instruera MATLAB att till exempel rita kurvan y=sin(x). Istället måste vi ge MATLAB en uppsättning punkter med en x-koordinat och en y-koordinat. MATLAB ritar sedan upp en mjuk kurva som förbinder punkterna. Vill vi rita upp y = sin(x) måste vi därför först själva skapa en x-vektor och sen y-vektor 8 där y=sin(x) och instruera MATLAB att rita en kurva mellan dessa bägge punkter. Låt oss börja med något enkelt som att rita grafen för y = 2x + 3. >> x = [1 8]; >> y = 2*x + 3; Augusti 1997 Anpassn. Mätdata kvot Försöksdata Norra Gotland 10 4 Kaninpopulationen på Gotland Tid från start (mån.) 8 Eftersom det MATLAB använder i plottandet är punkter, vars x- och y-koordinatar kommer från vektorerna x och y så måste vektorerna ha samma antal element Säsongen Differens temp >> plot (x,y) Att växla mellan fönster, och städa i fönster. När vi trycker på return efter att ha givit plot kommandot öppnas ett nytt fönster, MATLABs grafikfönster där plotten visas. När vi jobbar med grafik kommer vi att vilja pendla mellan många fönster. Ofta kommer vi att utföra samma lunk mellan m-fil editorns fönster där vi just ändrat någon detalj i en m-fil till kommandofönstret för att köra filen till grafikfönstret för att se hur det blev. Det finns flera metoder för att snabbt växla mellan fönster, vilken som passar bäst just för stunden beror litet på exakt vad man håller på med och hur man föredrar att jobba. Det kanske enklaste sättet är att helt enkelt lägga fönstren bredvid varandra, eller i alla fall se till inget fönster ligger helt bakom de andra. Genom att klicka och dra på kanten av ett fönster kan du flytta det vart du vill på datorns skrivbord, och genom att klicka och dra i ett aktivt fönsters nedre högra hörn kan du ändra dess storlek. Om du lägger upp de fönster du jobbar i så att det alltid sticker fram någon bit av fönstret även när det är de andra fönstren som är aktiva så kan du enkelt byta fönster bara genom att klicka med musen i det fönster du vill skall bli det aktiva. Ett annat sätt att vandra mellan fönstren är att gå in i MATLABs meny "Windows" och välja det fönster man vill göra aktivt. I windows finns det en funktion för att bläddra mellan alla fönster som är öppna på datorns skrivbord. Håll "alt"-tangenten nedtryckt och tryck på TAB tangenten. Varje gång du trycker ned TAB bläddras ett nytt fönster fram som aktivt. Befinner du dig i MATLABs kommandofönster och vill till grafikfönstret kan du skriva "figure(1)" i kommandofönstret, då blir fönstret med det namnet aktivt. Vill du tillbaks från grafikfönstret till kommandofönstret trycker du bara på return. Vill du städa upp i grafikfönstret skriver du (i kommandofönstret) clf (CLear Figure window), vill du städa upp i kommandofönstret ger du kommandot clc (CLear Command window). Du kan stänga grafikfönstret genom att ge kommandot close plot-kommandot Låt oss prova att plotta en litet mer komplicerad kurva, y = x 2. Pröva >> x = [1 4]; >> y = x.^2; >> plot(x,y) Resultatet blir inte direkt vad vi väntat oss, men egentligen är det inte så märkligt: plot kommandot ser ju bara de punkter vi vill rita en graf mellan och har ingen aning om det två punkterna (1,1) och (4,16) är två punkter på kurvan y=x 2, eller om de ligger på kurvan y = 5x-4. Mer information måste alltså till, pröva att lägga till punkten (x,y) = (2,4). Inte heller särskilt imponerande. För att kurvan skall bli jämn och fin och följa det funktionssamband vi önskar måste vi ge MATLABs plot kommando vektorer där punkterna ligger ganska tätt. Lyckligtvis går det ganska enkelt om vi bara använder oss av MATLABs vektorfunktioner. Antag till exempel att vi vill plotta y=x 2 mellan 0 och 4.5. Vi kan då antingen använda kolonoperatorn för att skaffa oss en x-vektor där elementen har värden från 0 till 4.5 med vilket avstånd vi vill, till exempel 0.1: x = (0:0.1:4.5) gör susen (när vektorerna får så här många element vill man gärna stänga av ekot genom att ge semikolon efter kommandot). Alternativt kan vi använda linspace för att skapa 50 punkter mellan 0 och 4.5: x = linspace(0,4.5,50); 45 46

24 ger oss också en användbar x-vektor. När x-vektorn är klar skapar vi en y-vektor med y = x.^2 och plottar resultatet. Prova nu att plotta några andra funktioner som polynom och sin(x) för att se att resultatet blir som du förväntar dig Styra utseendet på grafiken Det mesta av den tid man spenderar på att göra grafer tenderar att läggas på att få lay-outen att bli vad man har tänkt sig. Eftersom korrekt och tydlig lay-out är ett viktigt verktyg för att åstadkomma grafik av hög kvalitet kan det vara värt besväret att redan från början försöka lära sig de kommandon som krävs för att man skall kunna styra programmet dit man vill. bakgrundsfärg Kommandot whitebg(c) ger dig möjlighet att ändra färgschemat på din plot. Prova till exempel att ge kommandot whitebg('g') och se vad det får för resultat. Argumentet till kommandot kan vara antingen en förkortning som ovan, ett färgnamn i klartext till exempel whitebg('blue') 9. Exemple på vilka färgkoder som finns kan du se du ger kommandot help plot. Kommandot whitebg ändrar inte enbart färgen för plottens bakgrun, även färgen på den omgivande ramen, axlar och kurvor ändras på ett sätt som skall ge god kontrast och läsbarhet för hela grafen. Linjefärg, linjetyp och markörer Kommandot plot kan ges med tre argument: plot(x,y,s). Argumentet S är en textsträng som anger hur linjen som ritas skall formatteras. Det finns tre typer av information att styra, dels färgen på linjen, dels hur linjen dras (heldragen, prickad mm), och slutligen markör, eller vilken symbol som skall ritas ut i de punkter som anges av vektorerna. Skrver du help plot kan du bland annat hitta följande lista på vilka möjligheterna är: Linjefärg Markör Linjetyp y yellow. point - solid m magenta o circle : dotted c cyan x x-mark -. dashdot r red + plus -- dashed g green * star b blue s square w white d diamond k black v triangle (down) ^ triangle(up) < triangle(left) > triangle(right) p pentagram h hexagram Man kan i plot kommandot använda en godtycklig kombination av dessa (men bara ett val för varje kategori!). Prova med litet olika kombinationer för att se hur det fungerar, en gul kurva med heldragen 9 För experter kan nämnas att argumentet till whitebg också kan vara en så kallad RGB kod, vilket ger möjlighet att välja exakt den nyans man vill. linje mellan små cirklar ges t.ex av plot(x,y,'yo-'). Märk att om man ger formatkommandot för linjefärg och markör men inte någon kod för linjetyp som t.ex. plot(x,y,'bo') så ritas endast punkterna ut utan någon sammanbindande linje. Rutnät Ibland vill man lägga in ett rutnät över grafen för att underlätta avläsningen av koordinater. Detta görs med kommandot grid on. För att slå av ett rutnät använder du grid off. Ger man bara kommandot grid så växlar man mellan dessa tillstånd (engelskans toggle) man läget för rutnätet Koordinataxlar Om vi inte ger något kommando för att speciellt formattera koordinataxlarna väljer MATLAB axlar så att hela grafen lagom ryms i grafikfönstret. Många gånger vill man själv bestämma hur koordinataxlarna läggs ut, antingen för att man vill zooma in ett intressant område, eller för att man vill lägga in litet luft, plotta till exempel y=x 2 mellan -2 och 3, det ser inte snyggt ut just kring origo. För att styra detta ger vi kommandot axis([xmin xmax ymin ymax]) där xmin är minimivärdet på x-axeln och så vidare. Kommandot axis skall ges efter plot-kommandot, testa med axis ( [ ] ) på vår andragradskurva! Det kan verka en smula omständigt att axis kommandot tar sitt arguement i formen av en vektor, vilket gör att vi måste skriva in två omgångar parantestecken när vi skriver in kommandot. Rätt använt kan dock just detta faktum spara mycket arbete särskilt när vi skriver m-filer som skall producera grafik. Den enklaste varianten är att vi istället för att ange siffervärden lagrar siffrorna i en vektor och ger den som argument till axis kommandot. Prova till exempel >> stor = [ ]; >> axis(stor); >> figure(1) >> liten = [ ]; >> axis(liten); >> figure(1) Tappar vi tråden kan vi se vilken inställning som för ögonblicket gäller genom att ge kommandot axis utan argument. MATLAB skriver då ut den aktuella vektorn. Vi kan även spara en inställning genom att ge kommandot vektor = axis, där vektor är ett godtyckligt namn på en vektor i vilken de aktuella värdena sparas. Ett användningsområde för detta trick är om vi skriver en allmän m-fil för att plotta data och alltså inte i förväg vet vilka x- och y-värden som blir aktuella. Om vi ändå vill plotta kurvan med litet luft ikring kan vi använda en variant av följande sekvens: >> x = (-1.5:.05 : 1.5); >> y = sin(x); >> plot(x,y) 47 48

25 >> current=axis; >> mellanrum=0.3 >> ny(1) = current(1) - mellanrum; >> ny(2) = current(2) + mellanrum; >> ny(3) = current(3) - mellanrum; >> ny(4) = current(4) + mellanrum; >> axis(ny); >> figure(1) Axis har en hel del special-argument, för en fullständig lista skriv help axis, några av de mer användbara är: axis equal som ger lika skalindelning på x- och y-axeln. axis image ger lika skalindelning på x- och y-axeln, men krymper bildytan så att alla datapunkter precis ryms. axis square gör bildytan kvadratisk axis tight krymper bildytan så att alla datapunkter precis ryms. axis normal återställer omskalningar till standardläge axis off ritar grafen utan axlar För att skriva ut beteckningar på x- och y-axeln använder vi kommandona xlabel('text') respective ylabel('text'), där text är den sträng vi vill skriva ut som beteckning på axeln. Prova att skriva in beteckingar på bägge axlarna! Man kan påverka utformningen av etiketterna på många vis genom MATLABs s.k. "property editor". Vi kommer att återkomma till det i pass 7, men om du redan nu är nyfiken så går det att läsa mer om detta i hjälp-avsnittet?/graphics/formatting Graphics/Adding Axes Labels to a Graph Ett vanligt fel som kan leda till i det närmaste obegripligt beteende hos matlab är om man någon gång glömmer bort syntaxen för axis-kommandot och istället skriver axis = ([xmin xmax ymin ymax]). Matlab skapar då en vektor som heter axis. När vi sedan korrigerar vårt misstag och i en serie kommandon som skall leda fram till en graf skriver axis([xmin xmax ymin ymax]) så kommer inte matlab att utföra det kommando vi önskar eftersom det finns en vektor med namnet axis i workspace. Matlab antar då att det som ges inom () efter axis är ett index i den vektorn, och eftersom ett index inte kan ges på formen [xmin xmax ymin ymax] så får vi ett felmeddelande om detta. Denna situation reder vi ut genom att radera vektorn axis med kommandot clear axis Text Titel-text Ofta kommer vi att vilja lägga till text i graferna för att till exempel visa vilka parameter-värden som använts. Det första vi gör är att lägga till en titel högst upp ibildytan, med kommandot title('text'), prova med title('sinuskurvan')! Man kan även lägga till en titel ifrån MATLABs desktop, men eftersom vi koncentrerar oss på kommandon som kan utföras från en m-fil så går vi inte in på det här, vill du veta mer så kan du läsa hjälptexten under?/matlab/using Matlab/Graphics/Formatting Graphs/Adding a Title to a Graph. Även för title kommandot återkommer vi i pass 7 till hur man kan styra egenskaperna hos titeltexten mer i detalj. Fri text Vi kan ocskå lägga till text på godtyckligt ställe i grafen genom att använda kommandot text(x,y,'sträng') som skriver in texten sträng vid punkten (x,y). Prova att placera in en textsträng på rätt ställe i grafen, det kan ta ett tag innan man får koordinaterna rätt. Du ser att textsträngens nedre vänstra hörn placeras vid den koordinat som anges. Om man ger fler textkommandon i följd så försvinner inte de gamla textsträngarna. Även för fri text finns det verktyg som enkelt placerar in och formatterar text i MATLABs desktop, även dessa lämnar vi åt sitt öde, men de finns dokumenterade i?/ MATLAB/Using Matlab/Graphics/Formatting Graphs/Adding Text Annotations to a Graph. Kurvbeskrivningar Vi kommer snart att börja plotta mer än en kurva i varje graf. Det kan då vara bra att ha en beskrivning över vilken kurva som visar vilken storhet. En sådan läggs in med kommandot legend('beskrivning 1, beskrivning 2,.) där beskrivning 1 är den textsträng som beskriver den kurva som ritades med det första plot kommandot, beskrivning 2 den som ritades med det andra plot kommandot osv. 6.2 Plotta punkter med fel Om du gjort en serie mätningar av en variabel y som funktion av x, och y-värdena har ett fel dy så vill man ofta visa mätserien i en plot med felstaplar angivna. För detta kan vi använda kommandot errobar(x,y,dy). Prova till exempel:»x =[ ];»y =[ ];»dy = [ ];»plot(x,y)»errorbar(x,y,dy) Normalt vill vi inte ha någon linje som förbinder punkterna, det blir tydligare att bara plotta punkterna med till exempel en ring. Prova t.ex. errorbar(x,y,dy,'o'), kommandot errorbar accepterar samma parametrar för att styra linjefärg mm som plot gör. Man kan också plotta assymetriska fel genom att ge två vektorer med fel, den första ger då felet i positiv riktining, den andra felet i negativ riktning, ett fullständigt kommando blir i det fallet errobar(x,y,dyplus,dyminus,'sträng'). Vill vi rita felstapla i både x- och y-riktning kan vi inte använda inbyggda funktioner. Vi får istället själva först beräkna x- och y-koordinater för felstaplarna och använda kommandot line för att rita linjer i grafen. Detta är inte så svårt, vi kommer senare att titta på det som en övning i att programmera

26 6.3 Histogram Förutom kurvor och punkter med felstaplar kommer vi ofta vilja producera stapelhistogram. Det finns flera varianter att välja på som producerar litet olika typer av grafer. För att kunna pröva oss fram skapar vi först en vektor med data som vi vill stoppa in i histogrammet: x = rand(1,20); ger oss en vektor med 20 tal, vart och ett slumpvis draget mellan 0 och Kommandot bar - stapeldiagram Kommandot bar(x) ger oss ett stapeldiagram med de 20 talen. Vi kan själva styra bredden av staplarna genom ett andra argument, prova bar(x,0.2) och bar(x, 1.4)! Som ett tredje argument accepterar bar-kommandot en textsträng som anger vilken färg staplarna skall ha, här använder vi samma kod som för plot-kommandot Kommandot hist - histogram Oftast vill vi nog inte bara plotta värdet för våra 20 tal. Vanligare är att vi vill visa ett histogram som visar till exempel hur många av talen som ligger mellan 0.0 och 0.2 och så vidare. För att göra detta ger vi kommandot hist(x). Om vi inte anger annat delas data upp i 10 binnar, men vi kan ange hur många binnar vi vill visa i ett andra argument till exempel hist(x,5). Tänker vi efter litet inser vi att kommandot hist egentligen utför två ganska olika uppgifter: I det första steget delas data in i binnar (10 binnar eller det antal som vi anger) som sträcker sig mellan det minsta och högsta värdet. I det andra steget plottas sedan stapeldiagrammet i grafen. Ibland kommer vi att vilja använda bara det första steget för att sedan själva plotta data - eller använda dem i beräkningar. Det här går bra att göra, om vi ger kommandot som antal = hist(x,8) så skapas vektorn antal som vars element anger hur många av elementen i x som faller inom vart och ett av 8 intervall mellan det lägsta och högsta värdet som förekommer i x. Vi kan även skapa en vektor med mittpunkterna i varje interval genom kommandot [antal mitt] = hist(x,8). Vektorn antal innehåller då frekvensen och vektorn mitt interval-mitten för de 8 intervallen. De vektorerna kan sedan till exempel användas för att plotta punkter istället för histogram med plot(mitt, antal). När du prövade hist(x,8) fick du antagligen ganska konstiga värden på intervallbredden (och en smal glipa i histogrammets vänsterkant). Detta beror på att hist-kommandot beräknar intrevallbredden genom att dela avståndet mellan högsta x-värdet och lägsta x-värdet med 8, istället för att beräkna intervallbredden som (1-0)/8 vilket hade varit mer naturligt för den här typen av data. För att kunna rätta till sådana skönhetsfläckar kan vi istället för antalet binnar ange var vi vill ha klassmitten i anropet till hist. Vi kan till exempel sätta mycenter = [0.2 : 0.2 : 0.8] följt av hist(x,mycenter). Ett mer allmänt sätt att skapa ett histogram från minvalue till maxvalue med binvidd vidd är att skapa mycenter genom kommandot mycenter = [minvalue+vidd/2 : vidd : maxvalue-vidd/2] följt av hist(x,mycenter) Kommadot stairs - konturdiagram. Kommandot stairs(x) drar en öppen kontur över elementen i vektorn x. Vi kan ange vid vilket värde det horisontella strecket skall börja med en andra vektor startx: prova startx=(0.05:0.05:1) följt av stairs(x,startx). Vi kan ange linjetyp som en sträng som vi skickar med som tredje argument på samma sätt som för plot-kommandot. Använt direkt på vår datavektor är stairs ett alternativ till bar-kommadot, men vill vi rita ett histogram med den här tekniken går det också bra, vi måste bara först skapa vektorn antal med hjälp av histkommandot som ovan, och sedan ge stairs(antal). Ett annat nyttigt knep om vi vill att stairs skall dra en linje från nollvärdet upp till första värdet är att lägga till ett element som vi sätter lika med noll först i den vektor vi ger som argument för stairs. På motsvarande sätt kan vi ibland vilja lägga till ett noll-element sist i en vektor för att få ner grafen till noll Kommandot stem - stolpdiagram. Diskreta variabler, som till exempel antal studenter med vissa poäng på tentan kan man rita med kommandot stem. Prova dig fram med hjälp av help stem. 6.4 Utskrifter av grafik Det enklaste sättet att skriva ut en graf på en printer är att ge kommandot print. Filen kommer då att skrivas ut på default printern 10 för datorn. Om du vill ha möjlighet att välja en annan printer så kan man öppna dialogrutan för utskrift genom att ge tillägget (engelska option) -v efter kommandot. Man kan också använda kommandot print för att "skriva ut till hårddisken", det vill säga skapa en PostScript fil som innehåller vår plot. Detta görs genom att skriva önskat filnamn efter printkommandot. Filen hamnar då i den aktuella katalogen med det namn som ges i print-kommandot. Det finns en mängd tillägg till print-kommandot som kan användas för att bestämma hur denna fil skall formatteras, skriv help print för att få en översikt. Vissa av tilläggen kan kombineras med varandra, men skriver då helt enkelt in fler tillägg (alla med sitt inledande - tecken) efter varandra. Men det är inte alla kombinationer som är möjliga samtidigt, MATLAB kommer i så fall att generera ett felmeddelande. Även de kombinationer som är tillåtna kan ibland ge överraskande resultat. Kommandot print filnamn -v kunde man förvänta sig att det öppnar en dialogruta som tillåter en att spara en fil på valfritt ställe på hårddisken. Men i stället tar tilläget över det faktum att vi har gett ett filnamn i kommandot och vad som händer är i stället att en print-dialogruta öppnas. Det kan alltså finnas anledning att pröva sig fram om man vill använda print på ett mer avancerat sätt. 6.5 Spara grafer och flytta till andra program Ofta kommer vi att behöva kopiera in en graf vi har producerat i MATLAB i en rapport. Använder vi till exempel Microsoft Word som ordbehandlingsprogram kan vi välja två vägar: Om vi i MATLAB väljer det fönster som innehåller grafen så kan vi i menyn "Edit" välja "Copy". Går vi sedan till vårt ordbehandlingsprogram så kan vi klistra in bilden där vi placerat markören genom att (i ordbehandlingsprogrammet) gå till menyn Edit och välja Paste (eller på svenska Redigera och Klistra in). Bilden kopieras då in i ordbehandlingsprogrammet. Alternativt kan vi i MATLAB när grafikfönstret är aktivt gå in i menyn "File" och välja "Save as ". Vi får då upp en dialogruta där vi kan välja katalog och filnamn, men också filformat samt format för preview. För det mesta fungerar "EPS Level 2 Color" som filformat och "bitmap" för preview bra. Den första metoden är givetvis snabbast, men den andra har mycket som talar för sig. Framför allt givetvis om man inte använder MS Word eller motsvarande program för ordbearbetning utan i stället jobbar med ett så kallat "markup language" som till exempel LaTex (ett mycket vanligt system för att producera vetenskapliga texter). I sådana program fungerar helt enkelt inte metod ett, man kan inte 10 Se help printopt för att se hur du kan ändra viken printer som används

27 klipa in grafik direkt i texten. I stället måste den inkluderas genom att man läser in en fil i epsformat 11. Men även om man jobbar med word så kan det vara en fördel att ha all grafik sparad i separate filer så att man vid behov kan läsa in dem igen i word-dokumentet, man kan ju av misstag förstöra bilden eller man kan ibland vilja använda samma bild på fler ställen Lägga in bilder i Word När vi vill använda bilder i Word placerar vi pekaren där vi vill ha bilden. För att läsa in bilden så går vi in i "Redigera" och väljer "Klistra in" om vi använder den första metoden går vi in i "Infoga" och väljer "Bildobjet" och sedan "Från fil" om vi använder den andra metoden. Vi får då upp en dialogruta där vi kan välja vilken fil vi vill inkludera. När grafen väl kommit in i vårt dokument blir den ett objekt som vi kan välja. Klickar vi en gång på bilden så kommer det fram åtta små fyrkanter runt grafen. Dessa kan användas för att ändra bildens storlek genom att placera pekaren i en av rutorna, hålla musknappen nertryckt och dra åt det håll vi vill flytta grafens kant. Om vi använder rutorna i något av hörnen för detta så ändras bredd och höjd proportioneligt. Man skall bara i undantagsfall ändra en grafs storlek genom att ändra bredd eller höjd separat eftersom både siffror och text då blir mer eller mindre distorderade. Om man vill flytta bilden i texten så kan man dra den genom att flytta pekaren så att den ligger på bilden, hålla musknappen nere och dra. När vi väl placerat in bilden där vi vill ha den så kommer den att flyta runt litet när vi introducerar mer text. Vill man "låsa fast bilden" så att den inte flyttar sig nedåt sidan om vi skriver in mer text så klickar men en gång på bilden så att den markeras. Sedan går man in i "Format" väljer "Bild" och får upp en dialogruta. Klicka på fliken "Placering" och markera boxen "Lås fästpunkten" och avmarkera "Låt bilden följa texten". Grafens placering fryses då så att även om vi skirver in mer text ovanför bilden så ligger den kvar, det är texten som flyter runt. Med standardinställningar kommer det att vara "textfritt" på bägge sidor om grafen. Ibland när man visar en liten bild, som här, så kan man vilja låta texten fylla upp utrymmet vid sidan om bilden. Detta kan vi ordna genoma att igen gå in i formatteringsrutan, klicka "Layout" och sedan på fliken "Figursättning". I den övre raden klickar vi på den vänstra bilden "Rektangulärt". I den andra raden väljer vi hur vi vill att texten skall läggas ut runt bilden. Som framgår tydligt av det här exemplet är det oftast inte så snyggt att lägga texten på bägge sidor om bilden,, dels eftersom textraderna ofta blir för korta för att brytas på ett vettigt sätt, dels för att det kan vara svårt att följa 1 en rad tvärs över 0.8 grafen när man läser. Oftast är det därför bättre att flytta 0.6 bilden till ena sidan och ha texten löpa bara på en sida. 6.6 Fler Kurvor i samma graf - kommandot hold. 0 Det är ganska vanligt att vi vill rita mer än en kurva i -0.2 samma graf. För att undvika att M ATLAB hela tiden suddar den gamla plotten när vi ger ett nytt plotkommando -0.8 så kan vi använda kommandot hold on. Prova till exempel:»x=(-2*pi:0.05:2*pi);»y=sin(x); eps står för "Encapsulated Post Script" ett utvidgat PostScript format som tagits fram just för att använda för grafik-filer som skall inkluderas i text-filer.»plot(x,y)»hold on»z=cos(x);»plot(x,z,'r') Det är nu vi kan börja få användning för legend-kommandot, prova:»legend('sinus x','cosinus x') En svårighet med hold-kommandot är att det inte går att ge kommandot axis efter att hold on är givet. Det gäller alltså att formattera axlarna innan man ger hold on. Det här betyder att komplicerade grafer, som allt annat i MATLAB, måste göras via m-filer eftersom man säkert kommer att behöva gå in och ändra många detaljer i graferna innan man får det helt rätt. När man vill börja på ny kula så ger man kommandot hold off. Notera att det som fryses är grafikfönstret i sig, vilket inte är specifikt för just plot-kommandot. Vi kan alltså överlagra allt som man kan visa i grafikfönstret, till exempel histogram, kurvor och mätpunkter med felstaplar i samma fönster. 6.7 Fler grafer i samma fönster - kommandot subplot För att rita mer än en graf i samma fönster kan vi avända oss av kommandot subplot som delar in grafikfönstret i ett antal rader och kolumner (max 9 rader och 9 kolumner) och låter oss adressera en sådan "miniruta" med våra grafikkommandon.. Kommandot har syntaxen subplot(antalrader, AntalKolumner, Rutnummer). Rutnumreringen görs löpande med övre vänstra hörnet som nummer 1 och hörnet längst ned till höger som nummer AntalRader x AntalKolumner, se figuren härintill. Så snart vi har gett 2,3,1 2,3,2 2,3,3 kommandot subplot(x,y,z) så kommer de följande grafikkommandona att hänföra sig till enbart den lilla rutan. De 2,3,4 2,3,5 2,3,6 andra rutorn förblir tomma tills vi ger ett nytt subplotkommando vartefter alla kommandon hänför sig till det nya del-fönstret. I det läget är det ganska krångligt att "komma tillbaka" till ett del-fönster vi tidigare ritat i. Kommandon som title xlabel mm måste alltså ges innan vi med ett nytt subplot kommando tar oss vidare till nästa delfönster. Ytterligare ett skäl till att jobba med m-filer och inte direkt i kommandofönstret - det här blir nästan aldrig rätt första gången! Så länge vi inte definierar delfönster som överlappar så behöver vi inte ge alla delfönster samma storek, vi kan till exempel görs som i exemplet: x=(-2*pi:0.05:2*pi); y=sin(x); subplot(2,2,1) plot(x,y) title('sinus x') subplot(2,2,2) 53 54

28 z=cos(x); plot(x,z) title('cosinus x') subplot(2,1,2) diff =y-z; plot(x,diff); deltay= 0.08 * y; % felet i y-led plot(x,y,'ob') axis([min(x)-0.5 max(x)+0.5 min(y)-0.5 max(y)+0.5]); %frilägger punkterna hold on title('sinus - cosinus') % plotta först felet i x-led 6.8 Rita i grafer Ibland vill vi kunna rita i grafer, som till exempel när vi vill rita ut felstaplar i både x och y. För detta använder vi kommandot line(x,y) där x och y är vektorer med samma dimension. Kommandot ritar linjer mellan punkterna med koordinater ( x(i), y(i) ). Prova»x=[ ]»y=[ ]»line(x,y)»axis([ ]) % för att inte linjen skall överlappa bildkanten. Om grafikfönstret är tomt innan vi kallar line så kommer MATLAB att skapa ett fönster där de linjer vi ritar upp nätt och jämnt får plats. Vill vi frilägga strecken får vi använda axis kommandot. Normalt ritar man dock i ett fönster där det redan finns en graf, så detta brukar inte vara ett problem. kommandot line accepterar också matriser som argument, om x och y är 2xn matriser så behandlar line varje kolumn som ett punktpar. Detkan vara enlare att skriva in koordinatparen i en nx2 matris och sedan transponera i line-kommandot: x=[1 1 ; 2 2 ;3 3.5] y = [2.5 2 ; 2 1.5; 1.5 1] line(x',y') Kommandot line kan användas för att rita felstaplar i x- och y-led: x = [ ]; y = [ ]; deltax = 0.2*ones(1,3); % felet i x-led xline(1,1) = x(1)-deltax(1); xline(2,1) = x(1)+deltax(1); yline(1,1) = y(1); yline(2,1) = y(1); xline(1,2) = x(2)-deltax(2); xline(2,2) = x(2)+deltax(2); yline(1,2) = y(2); yline(2,2) = y(2); xline(1,3) = x(3)-deltax(3); xline(2,3) = x(3)+deltax(3); yline(1,3) = y(3); yline(2,3) = y(3); line(xline, yline) Konstruktionen xline(1,1) = x(1)-deltax(1); xline(2,1) = x(1)+deltax(1); yline(1,1) = y(1); 55 56

29 yline(2,1) = y(1); tillsammans med användandet av matriser i line-kommandot gör det enkelt att generalisera tilldelningen av värden till en slinga, som vi kommer att läsa mer om i avsnitt 8.3. Använder vi en sådan behöver vi inte upprepa koden för varje punkt utan kan istället skriva: for i=1:max end xline(1,i) = x(i)-deltax(i); xline(2,i) = x(i)+deltax(i); yline(1,i) = y(i); yline(2,i) = y(i); I slingan (koden mellan for och end) kommer alla värden mellan 1 och max att användas. Har vi organiserat våra data i vektorer så kan vi alltså spara in mycket kod genom att använda en slinga istället för att upprepa denna kodsekvens en gång för varje värde på i. Genom att ha felen i vektorer som har samma dimension som vektorn som håller mätpunkterna kan man också enkelt behandla fel som är olika stora i de olika punkterna. Pröva nu att introducera koden för att rita felstaplar i y-led. Vill man finlira så kan man också definiera en variabel epsilon som sätts till ett sådant värde att felstrecken inte går igenom ringen kring data punkten utan stannar vid ringen. Varje felstapel får då ritas som två separata streck, det vänstra mellan (x - deltax) och (x-epsilon), det högra mellan (x + epsilon) och (x + deltax). 6.9 Logaritm-skalor För att plotta med logskalor på en eller bägge axlar finns tre kommandon att tillgå: semilogy, semilogx och loglog som fungerar exakt som plot kommandot bortsett från att logaritmisk skala (bas 10) används frespektive för x-axeln, y-axeln och bägge axlarna Övningsuppgifter 7 Pass 5 - Litet om text-strängar, mer beräkningar, anpassningar 7.1 MATLABs Workspace Browser En MATLAB-session resulterar oftast i en workspace fylld av temporära variabler som det till slut kan bli ganska besvärligt att hålla reda på. MATLAB har ett verktyg -Workspace Browser - som enkelt ger en god överblick av vilka variabler som finns i workspace, vilka värden de har för tillfället och som dessutom ger oss möjlighet att manipulera dessa variabler. Vi startar Workspace Browser antingen genom att skriva workspace i kommandofönstrer, eller genom att gå in i meny "View" i MATLABs desktop och klicka för "workspace" som då kommer upp som en pany i desktopen. Workspace Browsern öppnar då sitt fönster där vi kan se alla variabler som finns i MATLABs workspace, vi ser namnet på variabeln, vilka dimensioner (rad x kolumn) den har,hur stort lagringsutrymme som går åt för att spara variabeln och vilken typ av variabel det är. Om man tycker att någon av dessa kolumner är helt ointressant kan man i menyn "Workspace View Options" under "View" styra utseendet av detta fönster. I wokr space browsern kan vi utföra ett antal operationer: Spara workspace eller variabler. Om vi trycker på "spara-ikonen", den som ser ut som en liten diskett så sparas hela innehållet i workspace i en fil som vi senare kan läsa in. Alternativt kan vi i "File" menyn välja "Save As". Detta sätt att spara är nödvändigt om vi redan har sparat workspace men vill spara en annan kopia under annat namn. Trycker vi på ikonen används det gamla namnet om det är definierat. Vi kan också välja att spara enskilda variabler. För att göra detta väljer vi variablerna genom att klicka på dem i browserfönstret Vill du välja mer än en och dessa följer efter varandra i listan så klickar du först på den första och sedan klickar du på den sista variabeln samtidigt som du håller nere skift-tangenten. Då väljs alla variabler mellan den första och sista. Vill du välja ett antal variabler som inte ligger bredvid varandra i listan så håller du nere kontroll-tangenten samtidigt som du klickar. När du valt alla variabler du vill spara så "högerklickar" (klickar med den högra musknappen) någonstans i fönstret. I den menyn som då kommer upp väljer du "Save selection as" och väljer sedan en katalog och filnamn där variablerna sparas. Läsa in variabler som tidigare sparats från en fil in i din workspace. Klicka antingen på mapp-ikonen på verktygslisten eller högerklicka i fönstret och välj "Import Data"

30 Rensa bort variabler från workspace gör du genom att först välja dem på samma sätt som när du vill spara variabler och sedan antingen Klicka på soptunnesymbolen i verktyslisten Välja "Delete" i "Edit" menyn Högerklicka i fönstret och sedan välja "Delete Selection" Array Editorn Vi kan gå in och studera en variabel i detalj genom att öppna ett fönster som kallas "Array Editor". Om du vill undersöka en enda variabel så kan du öppna den i "Array Editorn" genom att dubbelklicka den i "Workspace Browser"-fönstret. Vill du arbeta med fler än en variabel får du välja dessa som ovan och sedan klicka på symbolen till höger om disketten på verktygslisten. I det fönster som öppnas kan du se vilket värde varje element i variabeln har, men du kan också gå in och ändra godtyckliga värden. Det gör du genom att klicka i motsvarande ruta, skriva in det nya värdet och trycka på "Return". Du kan också ändra variabelns dimensioner (rad x kolumn) genom att på motsvarande vis ändra värdena i motsvarande ruta på verktygslisten. Där kan du också ändra med vilken numerisk precision värdena visas. Mer information om möjligheterna i detta fönster får du i hjälpavsnittet?/matlab/using MATLAB/Development Environment/Workspace, Search Path, and File Operati ons/matlab Workspace/Viewing and Editing Workspace Variables. 7.2 Anpassa MATLABs Desktop Vartefter vi börjar använda fler och fler av MATLABs fönster så kan vi vilja ställa in MATLABs desktop så att vad vi ser på skärmen är det vi tycker är mest bekvämt att jobba med. Vilka fönster som skall finnas öppna väljer vi i menyn "View", de fönster som är förbockade i nedre delen av menyn kommer att öppnas. Storleken på desktop, eller andra fönster, kan vi reglerea genom att högerklicak i fönstret. I menyn som då kommer upp kan vi välja "size" och därefter peka på fönstrets nedre högra hörn, det område som är räfflat. Om vi trycker ned musknappen där och håller den nedtryckt medan vi drar musen så kommer fönstrets storlek att ändras, det hörn vi klickat på "följer med" medan det motstående hörnet ligger still. Vi kan sedan växla mellan denna storlek och full skärm genom att trycka på den mittersta av det tre symbolerna som finns längst upp till höger. Trycker du på den vänstra av de tre symbolerna så förminskas fönstret till en liten ikon längst ned på skärmen. Du kan gonom att klicka på ikonen få upp fönstret igen. Klickar du på symbolen längst till höger som ser ut som ett kryss så stängs fönstret. Förutom ett kryss för själva desktop så finns det ett kryss för varje fönster i desktop, du kan alltså välja om du skall stänga hela desktopen eller ett enskilt fönster i denna. Om du vill ändra på den relativa storleken på de olika panåer som visas i MATLABs desktop så går det att göra genom att föra pekaren till gränsen mellan de olika panåerna och trycka ned musknappen. Pekaren förvandlas då till en dubbelpil. Om du då drar pekaren så följer gränsen mellan panåer med, du kan på så sätt göra en del av MATLABs desktop större på bekostnad av andra panåer. Det går att flytta runt de olika fönstren inom MATLABs desktop. Det gör man genom att klicka på ett fönsters titel-list (högst upp) och hålla musknappen nedtryckt. Om du nu flyttar pekaren så kommer en ram runt fönstret att röra sig med pekaren, och när den kommer till ett ställe i desktop där den kan förankras så kommer den att "snäppa till". Om du då släpper upp musknappen så har fönstret flyttat till den nya platsen. Prova! Ett fönster som ligger i desktopen (är "dockat") kan flyttas ut från denna till att bli ett fritt fönster, som så ofta så finns det fler sätt att göra detta på, du kan antingen klicka på pil-symbolen som syns här till höger, du kan också dra fönstret som när du vill flytta det inom desktopen, men inte släppa musknappen förrän fönstret är utanför desktopen. Slutligen kan du, om fönstret är det aktiva, gå in i "View" menyn och välja "Undock". Vill man istället "docka" ett fönster som flyter fritt till MATLABs desktop gör man det fönstret aktivt och väljer sedan "Dock" i "View" menyn. Som vi redan sett exempel på så kan flera fönster dela samma del av MATLABs desktop, i det läget finns det små flikar med respektive fönsters namn på i underkant av det fönster. Genom att klicka på den fliken kan man växla mellan de fönster som delar på den delpanån. Om man vill gruppera fönster inom desktop så klickar man med musknappen på ett av fönstrens titellister, drar den på det andra fönstrets titellist och släpper musknappen när konturen överlappar och flikarna dyker upp i underkant. Det finns ett antal standardkonfigurationer för desktop, du kan välja bland dessa genom att gå in i "View" menyn och välja "Desktop Layout". Mer komplett information MATLABs desktop får du i?/development Environment/Using the Desktop 7.3 Text-strängar Vi har hitills endast sett den enklaste formen av en text-sträng: a = 'Detta är en textsnutt'. Det finns många kommandon som kan användas för att omvandla numeriska variabler till strängar och utföra andra operationer på strängvariabler. Här kommer vi bara att gå in på några få av dessa som utför litet enklare manipulationer av strängar. I nästa avsnitt skall vi lära oss hur vi formatterar in- och utmatning, vill du lära dig mer om stränghantering kan du läsa avsnittet?/using MATLAB/Programming and Data Types/Caracter Arrays i hjälpavsnittet Manipulera textsträngar Det är möjligt att lägga ihop två text-strängar till en längre sträng, men kanske inte riktigt som man först kan tro. Tag till exempel a = 'detta är ' och b = 'en textsträng'. Lägger vi dem bredvid varandra som i kommandot c = 'detta är ' 'en textsträng' händer något intressant, prova! Det här illustrerar en annan sak vi kan behöva tänka på: eftersom enkelt citationstecken utgör start- och sluttecken för en sträng så måste vi göra något särskilt för att kunna skriva ut det tecknet i en text-sträng. Detta "något särskilt" är att vi skriver två tecken efter varandra. Prova att skriva ut strängen 'För att skriva ut '' måste man dubblera'. För att kunna sätta ihop två strängar till en längre sträng, konkatenera (engelska concatenate) måste vi använda en syntax där det på något sätt framgår att de två citationstecknen som följer på varandra inte betyder att vi vill skriva ut det tecknet, det gör vi genom att omsluta de strängar som skall läggas ihop med hakparanteser: c = ['detta är ' 'en textsträng'] fungerar, liksom c = [a b] Delsträngar Vad vi inte berörde tidigare var att internt så lagras varje text-sträng som en vektor på vilken vi kan operera med som vi gör med numeriska vektorer 12 vi kan på vanligt sätt adressera delar av dem:»a = 'Detta är en textsnutt' a = Detta är en textsnutt 12 I sjäva verket lagras text-strängen som en numerisk vektor - varje tecken som finns på tangentbordet har en standardiserad numeriska kod - ASCII kod, a=97, A=65. Functionen abs('sträng') ger ASCII koden för strängen om du är nyfiken

31 »length(a) 21»a(7:11) är en En nyttig funktion när vi manipulerar delsträngar är k=findstr(s1,s2). Detta kommandot söker efter den kortare av strängarna S1 och S2 i den längre och returnerar en vektor k som innehåller index för alla förekomster av den kortare strängen. Antag att S = 'En ensam enörning' så ger kommandot k = findst('en',s) resultatet Notera att 1 inte ingår i svaret, findstr är känslig för versal/konsonant (detta kallas på engelska case sensitive). I följande exempel anväder vi findstr för att hitta ett filnamn i en textsträng. Vi vet att filnamnet kommer efter ordet "namnet" och avslutas med ".m"»a='den angivna filen har namnet resistor4.m, vilket är sökbart';»hitta1=findstr(a,'namnet ');»hitta2=findstr(a,'.m');»filnamn=a((hitta1+length('namnet ')):(hitta2+1)) filnamn = resistor4.m Att hitta filnamnet i en sträng som skrivs in för hand i programmet är väl inte så intressant men metoden i exemplet kan användas för att leta reda på till exempel ett filnamn som kan ha getts i en inmatningsrad från en användare. Detta namn kan sedan användas när vi i en m-fil sparar data till hårddisken 7.4 Enkel statistik MATLAB är i allmänhet mycket bra på att hantera matriser och vektorer. Det lönar sig att försöka att konsekvent utnyttja det när vi behandlar data. Antag till exempel att vi gjort en serie mätningar(3.6, 5.4, 2.8, 8.3, 3.7, 4.2, 6.1, 4.1, 3.8, 2.3) och vill beräkna medelvärde och standardavvikelse för dessa. Vi an då naturligtvis göra detta genom att tilldela 10 olika variabler dessa värden: x1 = 3.6, x2=5.4, x3=8.3.. och sedan beräkna <x> = (x1 + x2 + x3 +..+x10)/10, och sedan fortsätta på motsvarande sätt för standardavvikelsen. Men det är mycket enklare att istället fylla en vektor med mätdata och sedan operera på vektorn:»medel = sum(x)/length(x)»diff = x - medel»diff2 = diff.^2»sigma = sqrt(sum(diff2)/(length(x)-1)) Ännu enklare är givetvis att använda de inbyggda funktionerna mean(x) och std(x), men innan ni gör det måste ni en gång ha kodat detta för hand! 7.5 Polynom MATLAB har några inbyggda funktioner för att hantera polynom, för en fullständig beskrivning hänvisas du till?/matlab/using MATLAB/Mathematics/Polynomials and Interpolation. Vi går här igenom några av de viktigaste funktionerna Hitta rötter till polynom. Givet ett polynom som till exempel y = 3x 2-7x + 4, så beräknas rötterna (nollställena) till polynomet med funktonen roots(p) där p är en vektor med koefficienterna för varjet term i fallande ordning. Notera att om någon koefficient är noll så måste detta explcit anges med en nolla på rätt ställe i vektorn p.» p = [3-7 4];» roots(p) Finn polynomuttryck för givna rötter Om vi omvänt har ett antal nollställen i en vektor n så ger oss funktionen poly(n) det polynom som har dessa rötter:» n =[ ];» poly(n) vilket alltså uttyds som polynomet x 4-10x x x Värden på polynom Värdet för ett polynom med koefficientvektor p i punkten x ges av polyval(p,x):»m =[ ];»polyval(m,4.2) 61 62

32 Derivator av polynom Att derivera ett polynom är naturligtvis inte särskilt svårt att göra utan MATLABs hjälp. Det kan dock ibland när man skriver generella program vara behändigt att ha en funktion till hands för detta, i MATLAB heter den polyder(n) Produkter och kvoter av polynom MATLAB beräknar gladeligen produkter av två polynom med funktionen conv(a,b), samt kvoten mellan två polynom med funktionen deconv(a,b). För mer information använder du hjälpfunktionen. 7.6 Matrisekvationer Vi har många gånger i detta kompendium tjatat om hur bra MATLAB är för matrisberäkningar. Nu skall vi titta litet närmare på detta fält. Vi börjar med några enkla exempel. Inversen A -1 till matrisen A är en matris så att A -1 * A = 1. I linjär algebar har vi lärt oss metoder för att beräkna inversen till 3 4 matriser som A =. MATLAB-användare kan slöa litet och istället använda sig av kommandot 2 1 inv:»format short»a=[3 4 ;-2 1];»B=inv(A) B = »B*A % testa om det fungerar! Om ni provar ovanstående beräkningar i formatet short g så förstår ni varför jag valde att byta format: eftersom den numeriska precisionen hos datorn är begränsad till ett visst antal decimaler så blir svaret oftast inte riktigt exakt 1 när man kontrollräknar. För att slippa veta att elementet i nedre högra hörnet skiljer sig från 0 i 17:e decimalen kan format short vara att föredra. Många fysikaliska fenomen kan beskrivas i matrisformalism som att en matris som representerar en operation appliceras på ett initialtillstånd och resulterar i ett sluttillstånd, vi kan skriva det som en matrismultiplikation: S = O * I. Vi kommer då ofta att söka värden på den operator O som resulterar i sluttillståndet S givet ett initialtillstånd I. Det här kan låta väldigt abstrakt, och många gånger är det väl också på det viset. Men beräkningsmässigt handlar det om att vi känner matrisen I och S (ofta kolumnvektorer) så söker vi matrisen O som satisfierar ekvationen ovan. Detta problem löser vi genom att multiplicera med lämpliga inverser - från rätt håll: S * I -1 = O * I * I -1 = O. Pröva att finna 3 4 vilken matris som löser ekvationen givet I = S= och Minsta kvadratanpassning Vi har sett att om antar att en uppsättning mätpunkter (xi, yi) uppfyller sambandet y = a + bx så kan vi med hjälp av maximum likelihood principen finna att den bästa (i meningen att summan av de kvadratiska avvikelserna minimieras) uppskattningen av parametrarna a och b ges av: a = 2 wx wy wx wxy = w wx ( 2 wx ) 2. b = w wxy wx wy.där w i = 1 2 σ i Dessa ekvationer är relativt enkla att lösa med hjälp av MATLAB. Låt oss exemplifiera genom att lösa en variation på uppgift 8.13 i Taylor, där vi skall anpassa mätdata givna i tabellen till uttrycket s = s 0 + vt. Tid (s) Postition (cm) Osäkerhet i position (cm) Felet i tiden är negligerbart. För att utföra anpassningen måste vi beräkna ett antal termer av typen Σwx vilket är relativt enkelt med MATLABs vektoroperationer och elementvisa operatorer. Summan är ju uppbyggd så att först skall varje element i w multipliceras med motsvarande element i x, därefter skall dessa produkter summeras. Vektoroperationen wx = w.* x utför den första av dessa operationer och skapar en ny vektor där elementen är produkten av motsvarande element i w och x vektorerna. Vi kan sedan enkelt summera dessa genom att applicera vektoroperatorn sum på denna vektor. Vi får alltså något i stil med % linfit.m % performs least stquares fit to y = a + bx % Sten Hellman tid=[ ]; position=[ ]; DeltaPos = [ ]; och 63 64

33 x=tid; y=position; sigma=delatpos; w = 1./ sigma.^2; xy = x.* y; x2 = x.^2; wx = w.*x; wy = w.*y; wx2 = w.*x2; wxy = w.*xy; sumwx = sum(wx); sumwy = sum(wy); sumwxy = sum(wxy); sumwx2 = sum(wx2); delta = sum(w)*sumwx2 - sumwx^2; a = (sumwx2*sumwy - sumwx*sumwxy) / delta b = (sum(w)*sumwxy - sumwx * sumwy) / delta Man kan givetvis hoppa över steget där vi går ifrån t.ex. "tid" till "x", har har jag valt att ha med det steget för att göra det hela tydligare. Vi kommer senare se hur vi skall skriva den del av koden som gör själva anpassningen som en allmän funktion som i stort sett ser ut som den del av koden som kommer efter de kommandon där vi byter variabelnamn. Det blir då naturligt att funktionen internt arbetar med variablerna x,y,w, och att den m-fil som kallar funktionen gör det med de variablenamn som är de som används i problemformuleringen. Eftersom det hela finns sparat i en m-fil kan vi enkelt verifiera att vi reproducerar de resultat som anges i facit i boken om vi sätter alla vikter till 1, dvs sätter alla fel till 1. När vi ändå är igång är det lämpligt att plotta den kurva vi får ur anpassningen och data i samma graf: plot(xfit,yfit,'b-'); hold on current = axis; delta = 0.5; new = [current(1)-delta current(2)+delta current(3)-delta current(4)+delta]; axis(new); errorbar(x,y,sigma,'or'); Lägg märke hur den här delen av koden är skriven så att vi får en graf med en linje som är lagom lång för att omfatta de mätta punkterna och med lagom med luft mellan data och kanten av grafen utan att vi gör några antaganden om vare sig vilka värden mätdata antar eller om hur många punkter som är mätta. Det är en god vana att försöka skriva sin kod på det viset. Just anpassning till en rät linje är ju ett exempel på en uppgift som vi skall lösa många gånger i olika sammanhang. Det är därför bra att ha en m-fil som löser den uppgiften under så allmänna förutsättningar som möjligt. 7.8 Minsta kvadratanpasning med matrismetod En minsta kvadratanpassning av mätdata till ett andragradspolynom y = a + bx + cx 2 kan göras om vi formulerar sambandet mellan variabelvärden x i, mätta värden y i som en matrisoperation Y = X A: L 2 2 y1 1 x1 x1 σ 1 a 2 y 2 1 x2 x 1 2 = b 2 y3 1 x3 x3 Vi definierar dessutom en viktmatris: V L 2 = σ 2 c M L M M M 2 σ 3 M M M O Minsta-kvadratmetoden ger då en uppskattning av parametervektorn som ges av A=(x T V -1 X) -1 *(X T V -1 Y), vi får även en uppskattning av felen i parametervärdena som ges av A=(x T V -1 X) -1. Antag till exempel att vi med försumbart fel i x har mätt följande y-värden x y samt att felet i y-mätningen är 0.1. För att finna det anpassade värdet på koefficientern sätter vi in våra värden i matrisformalismen och löser enligt receptet ovan. Vi har xmin = min(x) - 1; xmax = max(x) + 1; xfit = (xmin: xmax); yfit = a + b*xfit; 65 66

34 Y = X = V ,, = kodat i MATLAB blir detta: definierar i slutet av "for-raden", i det här fallet alltså med i=1,2 och 3. Mer om fördelarna med att använda for-slingor i nästa kapitel. 7.9 Övningsuppgifter 1. Komplettera m-filen som visas i avsnitt 7.7så att även felen i de anpassade parametrarna a och b beräknas som i problem 8.19 i Taylor. x=[1 ; 2 ; 3 ; 4 ; 5; 6]; y=[7.9 ; 26.1 ; 58.0 ; ; ; 238.0]; X=[ones(6,1) x x.^2]; sigma = 0.1 ; vminus1 = eye(6) * 1/sigma^2 ; A=inv(X' * vminus1 * X) * (X' * vminus1 * y) DeltaA=inv(X' * vminus1 * X) for i=1:3 Deltapar(i) = sqrt(deltaa(i,i)); end Deltapar' Det finns några teknikaliteter att begrunda i detta exempel. Först måste vi tänka på att inte frestas att inludera ett minustecken i namnet på covariansmatrisen. MATLAB tolkar V-1 som en instruktion att subtrahera enhetsmatrisen från V. Giltiga operatorer kan inte vara en del av variabelnamn! Sedan kan vi se hur vi i satsen där vi tilldelar värden till matrisen X har använt den genväg som MATLAB öppnar för oss och byggt en matris genom att kombinera kolumnvektorer. Eftersom vektorn x redan existerar så är det mycket enklare att skapa kolumnvektorn med en rad ettor och kolumnvektorn med kvadraten på elmenten i x och sedan bygga matrisen från dem än att bygga en matris genom att placera ut elementen ett och ett. Slutligen har vi här smugit in en for-slinga (eng. for-loop) när vi beräknar värdet för parametranna Deltapar; for i=1:3 Deltapar(i) = sqrt(deltaa(i,i)); end I nästa kapitel skall vi på allvar börja använda for-slingan, just nu nöjer vi oss med att konstatera att de kommandon som står mellan for och end upprepas en gång för varje värde på variabeln i som vi 67 68

35 8 Pass 6 - Programmering 8.1 Att programmera 8.2 Formatterad in- och utmatning 9 Pass Avacerad grafik Axlar och property-editor 8.3 Slingor 8.4 funktioner 69 70

36 10 Svar och lösningar 11 Sakregister 10.1 Svar till avsnitt 4 % D H % á 34 ( (CLear Figure window á 42 A abs á 64 AFS konto á 28 Aktuell katalog á 28 ans á 14 Array Editor á 55 ASCII kod á 64 avrundning á 16 avsluta MATLAB á 11 axis á 44 B backslash á 28 bakgrundsfärg á 43 bar á 47 bilder i Word á 50 C case sensitive á 58 Citationstecken skriva ut á Se clc á 42 clear á 15 CLear Command window á 42 clf á 42 close á 42 Command History á 19 compact á 16 concatenate á 57 conv á 59 current directory á 28 Current directory browser á 29 decimalkomma á 6 deconv á 59 Delsträngar á 57 Derivator av polynom á 59 desktop á 7 Anpassa desktop á 55 Desktop Layout á 56 diag á 40 disp á 8 Dock á 56 dockade fönster á 56 E Echo á 36 Edit á 33 editor á 32 Elementvisa operationer á 22 elfun á 37 elmat á 37 EPS á 49 errorbar á 47 eye á 40 F favourites á 9 felstaplar á 47 Filnamn á 27 findstr á 57 Fler grafer i samma fönster á 51 Format á 16 fortsättningsrader á 15 Fri text á 46 fullständigt filnamn á 28 G G-disken á 31 Gemensamma matlab-filer á 31 Grafik á 40 grafikfönster á Se help á 11 hist á 47 Histogram á 47 historiefönster á 19 hold á 51 hårddisk á 25 I Import Data á 32 Inbyggda funktioner á 37 Inf á 14 inv á 59 Invers matrisinvers á 59 K kolon á 38 kolonoperatorn á 40 kolumnvektor á 20 Kommentarer á 34 konkatenera á 57 konstanter á 14 konturdiagram á 48 Koordinataxlar á 44 Kurvbeskrivningar á 46 L legend á 47 length á 37 line á 52 Linjefärg á 43 linjetyp á 43 linspace á 37 load á 29, 32 M markörer á 43 Matlabs hjälpfunktion á 9 Matrisekvationer á 59 matriser á 23 mean á

37 medelvärde á 58 mellanslag á 64 M-filer á 20, 32 miniruta á 51 Minne á 25 minnesläcka á 64 Minsta kvadratanpasning matrismetod á 62 Minsta kvadratanpassning á 60 N NaN á 14 O ones á 37 Operationer på matriser á 38 Operationer på vektorer á 37 operatorer á 12 P path á 28 plot á 42 poly á 59 polyder á 59 Polynom á 58 kvoter mellan á 59 produkt av á 59 värden på á 59 polynomuttryck för givna rötter á 59 polyval á 59 print á 49 Prioritetsordning á 12 procent-tecken á 34 R radvektor á 20 rand á 37 randn á 37 realmax á 14 realmin á 14 rita i grafer á 52 roots á 58 Run á 34 Rutnät á 44 rötter till polynom á 58 S save á 31, 33 Save workspace as á 32 scientific notation á 16 search path á 30 semikolon á 15 skalärpodukt á 22 skrivbord á 7 spara filer á 30 Spara grafer á 49 specfun á 37 stairs á 48 standardavvikelse á 58 standardfunktioner á 37 stapeldiagram á 47 stapelhistogram á 47 Starta Matlab á 7 std á 58 stem á 49 stolpdiagram á 49 subplot á 51 sum á 38, 39 syntax highlightning á 10 Sökväg á 27, 30 T Text á 46 Text-strängar á Se tiopotens á 16 Titel á 46 title á 46 transponera á 21 två-dimensionella plottar á Se U Undock á 56 upprepa kommandon á 18 USERS á 30 Utskrifter av grafik á 49 V Variabelnamn á 14 variabler á 12 vektorer á 20 whitebg á 43 whos á 17 Workspace á 16 läsa in variabler á 55 rensa bort variabler á 55 Workspace Browser á 54 spara workspace á 54 växla mellan fönster á 41 X xlabel á 45 Y ylabel á 45 Z zeros á 37 zooma á 44 Å återkalla kommandon á 18 73

MATLAB 6 i kursen experimentella metoder Sten Hellman

MATLAB 6 i kursen experimentella metoder Sten Hellman Utkast 1.1 21.08 03-03-10 MATLAB 6 i kursen experimentella metoder Sten Hellman Introduktion till MicroSoft Word av Jonas Strandberg Övningsuppgifter av Max Karlovini, Teresia Månsson & Jonas Strandberg

Läs mer

MATLAB 7 i kursen experimentella metoder

MATLAB 7 i kursen experimentella metoder MATLAB 7 i kursen experimentella metoder av Sten Hellman med Introduktion till Microsoft Word av Jonas Strandberg Övningsuppgifter av Sten Hellman, Max Karlovini, Teresia Månson & Jonas Strandberg ii 3:a

Läs mer

Laboration: Grunderna i Matlab

Laboration: Grunderna i Matlab Laboration: Grunderna i Matlab Att arbeta i kommandofönstret och enkel grafik Den här delen av laborationen handlar om hur man arbetar med kommandon direkt i Matlabs kommandofönster. Det kan liknas vid

Läs mer

Introduktion till Matlab

Introduktion till Matlab Introduktion till Matlab Inledande matematik, I1, ht10 1 Inledning Detta är en koncis beskrivning av de viktigaste delarna av Matlab. Till en början är det enkla beräkningar och grafik som intresserar

Läs mer

Introduktion till Matlab

Introduktion till Matlab Introduktion till Matlab Analys och Linjär Algebra, del A, K1/Kf1/Bt1, ht10 1 Inledning Ni kommer använda Matlab i nästan alla kurser i utbildningen. I matematikkurserna kommer vi ha studio-övningar nästan

Läs mer

ComsolScript 3.2 i kursen experimentella metoder

ComsolScript 3.2 i kursen experimentella metoder ComsolScript 3.2 i kursen experimentella metoder av Sten Hellman Övningsuppgifter av Sten Hellman, Max Karlovini, Teresia Månson & Jonas Strandberg ii 1:a upplagan, Stockholm 2065. c Sten Hellman, Stockholms

Läs mer

ComsolScript 1.2 i kursen experimentella metoder

ComsolScript 1.2 i kursen experimentella metoder ComsolScript 1.2 i kursen experimentella metoder av Sten Hellman Övningsuppgifter av Elin Bergeås, Sten Hellman, Max Karlovini, Teresia Månson, Jonas Strandberg & Linda Östman ii 3:e upplagan, Stockholm

Läs mer

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln Matlab-föreläsning (4), 10 september, 015 Innehåll m-filer (script) - fortsättning från föreläsning 1 In- och utmatning Sekvenser, vektorer och matriser Upprepning med for-slingor (inledning) Matlab-script

Läs mer

Laboration: Grunderna i MATLAB

Laboration: Grunderna i MATLAB Laboration: Grunderna i MATLAB 25 augusti 2005 Grunderna i MATLAB Vad är MATLAB? MATLAB är ett interaktivt program för vetenskapliga beräkningar. Som användare ger du enkla kommandon och MATLAB levererar

Läs mer

Instruktion för laboration 1

Instruktion för laboration 1 STOCKHOLMS UNIVERSITET MATEMATISKA INSTITUTIONEN Avd. för matematisk statistik MD, ANL, TB (rev. JM, OE) SANNOLIKHETSTEORI I Instruktion för laboration 1 De skriftliga laborationsrapporterna skall vara

Läs mer

Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x

Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x Mathematica Första kapitlet kommer att handla om Mathematica det matematiska verktyg, som vi ska lära oss hantera under denna kurs. Indata När du arbetar med Mathematica ger du indata i form av kommandon

Läs mer

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och... Allt du behöver veta om MATLAB: Industristandard för numeriska beräkningar och simulationer. Används som ett steg i utvecklingen (rapid prototyping) Har ett syntax Ett teleskopord för «matrix laboratory»

Läs mer

Linjär algebra med tillämpningar, lab 1

Linjär algebra med tillämpningar, lab 1 Linjär algebra med tillämpningar, lab 1 Innehåll Per Jönsson Fakulteten för Teknik och Samhälle, 2013 Uppgifterna i denna laboration täcker kapitel 1-3 i läroboken. Läs igenom motsvarande kapitel. Sitt

Läs mer

Kom igång med. Windows 8. www.datautb.se DATAUTB MORIN AB

Kom igång med. Windows 8. www.datautb.se DATAUTB MORIN AB Kom igång med Windows 8 www.datautb.se DATAUTB MORIN AB Innehållsförteckning Grunderna i Windows.... 1 Miljön i Windows 8... 2 Startskärmen... 2 Zooma... 2 Snabbknappar... 3 Sök... 4 Dela... 4 Start...

Läs mer

Introduktion till Matlab

Introduktion till Matlab CTH/GU STUDIO 1 LMA515b - 2016/2017 Matematiska vetenskaper 1 Inledning Introduktion till Matlab Matlab är både en interaktiv matematikmiljö och ett programspråk, som används på många tekniska högskolor

Läs mer

Introduktion till Matlab

Introduktion till Matlab CTH/GU LABORATION 1 MVE011-2012/2013 Matematiska vetenskaper 1 Inledning Introduktion till Matlab Matlab är både en interaktiv matematikmiljö och ett programspråk, som används på de flesta tekniska högskolor

Läs mer

Introduktion till MATLAB

Introduktion till MATLAB 29 augusti 2017 Introduktion till MATLAB 1 Inledning MATLAB är ett interaktivt program för numeriska beräkningar med matriser. Med enkla kommandon kan man till exempel utföra matrismultiplikation, beräkna

Läs mer

Skapa mapp. * Gör så här: Det finns många sätt att skapa mappar, men det enklaste sättet brukar vara följande.

Skapa mapp. * Gör så här: Det finns många sätt att skapa mappar, men det enklaste sättet brukar vara följande. Ideell IT-förening där äldre lär äldre Skapa mapp Det finns många sätt att skapa mappar, men det enklaste sättet brukar vara följande. * Gör så här: 1. Se till att du befinner dig på den plats i datorn

Läs mer

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner KPP053, HT2016 MATLAB, Föreläsning 1 Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner MATLAB Väletablerat Mycket omfattande program GNU OCTAVE Öppen

Läs mer

Matlabövning 1 Funktioner och grafer i Matlab

Matlabövning 1 Funktioner och grafer i Matlab Matlabövning 1 Funktioner och grafer i Matlab I den här övningen ska vi titta på hur man konstruerar funktioner i Matlab och hur man kan rita funktionsgrafer. Läs först igenom PM:et. Gå sedan igenom exemplen

Läs mer

Instruktion för laboration 1

Instruktion för laboration 1 STOCKHOLMS UNIVERSITET MATEMATISKA INSTITUTIONEN Avd. för matematisk statistik ANL/TB SANNOLIKHETSTEORI I, HT07. Instruktion för laboration 1 De skrifliga laborationsrapporterna skall vara skrivna så att

Läs mer

Laboration 1 Introduktion till Visual Basic 6.0

Laboration 1 Introduktion till Visual Basic 6.0 Laboration 1 Introduktion till Visual Basic 6.0 Förberedelse Förbered dig genom att läsa föreläsningsanteckningar och de kapitel som gåtts igenom på föreläsningarna. Läs även igenom laborationen i förväg.

Läs mer

Introduktion till Matlab

Introduktion till Matlab CTH/GU LABORATION 1 TMV216/MMGD20-2017/2018 Matematiska vetenskaper 1 Inledning Introduktion till Matlab Matlab är både en interaktiv matematikmiljö och ett programspråk, som används på många tekniska

Läs mer

Steg 1 Minnen, mappar, filer Windows 8

Steg 1 Minnen, mappar, filer Windows 8 Steg 1 Minnen, mappar, filer Windows 8 Feb -14 Liljedalsdata.se Liljedalsdata Steg 1 W8 Sida 1 Inledning Välkommen till denna kurs. Att jobba med datorer är ofta som att jobba med matematik. Det nya bygger

Läs mer

Matriser och Inbyggda funktioner i Matlab

Matriser och Inbyggda funktioner i Matlab Matematiska vetenskaper 2010/2011 Matriser och Inbyggda funktioner i Matlab 1 Inledning Vi skall denna vecka se på matriser och funktioner som är inbyggda i Matlab, dels (elementära) matematiska funktioner

Läs mer

Introduktion till Matlab

Introduktion till Matlab CTH/GU LABORATION 1 TMV157-2014/2015 Matematiska vetenskaper 1 Inledning Introduktion till Matlab Matlab är både en interaktiv matematikmiljö och ett programspråk, som används på många tekniska högskolor

Läs mer

Kom igång. Readyonet Lathund för enkelt admin. Logga in Skriv in adressen till din webbsida följt av /login. Exempel: www.minsajt.

Kom igång. Readyonet Lathund för enkelt admin. Logga in Skriv in adressen till din webbsida följt av /login. Exempel: www.minsajt. Kom igång Logga in Skriv in adressen till din webbsida följt av /login. Exempel: www.minsajt.se/login Nu dyker en ruta upp på skärmen. Fyll i ditt användarnamn och lösenord och klicka på "logga in". Nu

Läs mer

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26 TAIU07 Föreläsning 2 Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26 Matriselement och Index För att manipulera

Läs mer

Steg 1 Minnen, mappar, filer Windows 7

Steg 1 Minnen, mappar, filer Windows 7 Steg 1 Minnen, mappar, filer Windows 7 Maj -13 Liljedalsdata.se Liljedalsdata Steg 1 Sida 1 Inledning Välkommen till denna kurs. Att jobba med datorer är ofta som att jobba med matematik. Det nya bygger

Läs mer

Matlabövning 1 Funktioner och grafer i Matlab

Matlabövning 1 Funktioner och grafer i Matlab Matlabövning 1 Funktioner och grafer i Matlab I den här övningen ska vi titta på hur man konstruerar funktioner i Matlab och hur man kan rita funktionsgrafer. Läs först igenom hela PM:et. Gå sedan igenom

Läs mer

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv Datorlära 6 Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv 1 Arbeta med Strängar Strängar skapas med text inom citattecken, enkla eller dubbla.!>> str=

Läs mer

MMA132: Laboration 2 Matriser i MATLAB

MMA132: Laboration 2 Matriser i MATLAB MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen

Läs mer

Introduktion till Matlab Föreläsning 1. Ingenjörsvetenskap

Introduktion till Matlab Föreläsning 1. Ingenjörsvetenskap Introduktion till Matlab Föreläsning 1 Ingenjörsvetenskap [email protected] 1 Dagens agenda MATLAB- vad ska det vara bra för? Arrayer, matriser och vektorer Manipulation av arrayer Kompakta arrayoperationer

Läs mer

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32) Programmeringsteknik och Matlab Övning Dagens program Övningsgrupp 2 (Sal Q22/E2) Johannes Hjorth [email protected] Rum 458 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d2

Läs mer

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Att förstå variabler Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Vad är en variabel? En variabel är en plats att lagra information. Precis

Läs mer

Operativsystem - Windows 7

Operativsystem - Windows 7 Uppgift 5 B Operativsystem - Windows 7 Skapa mappar och undermappar Det finns olika sätt att skapa nya mappar på. Alternativ. Högerklicka på en tom yta. Håll muspekaren över Nytt. Klicka på Mapp Alternativ.

Läs mer

Microsoft Office Excel, Grundkurs 1. Introduktion

Microsoft Office Excel, Grundkurs 1. Introduktion Dokumentation - Kursmaterial Innehåll 1. Introduktion 1.1. Programfönster 1.2. Inskrift och redigering 1.3. Cellformat 1.4. Arbeta med formler Kursövning E1.xlsx Egna Övningar E1E.xlsx - OnePRO IT, Bengt

Läs mer

Steg 1 Minnen, mappar, filer Windows 10

Steg 1 Minnen, mappar, filer Windows 10 Steg 1 Minnen, mappar, filer Windows 10 Sep -18 Liljedalsdata.se Liljedalsdata Steg 1 Sida 1 Inledning Välkommen till denna kurs. Operativsystem, Program/Appar, webbsidor och instruktioner inom IT-branchen

Läs mer

SF1900 Sannolikhetsteori och statistik, HT 2017 Laboration 1 för CINEK2

SF1900 Sannolikhetsteori och statistik, HT 2017 Laboration 1 för CINEK2 Matematisk Statistik SF1900 Sannolikhetsteori och statistik, HT 2017 Laboration 1 för CINEK2 1 Introduktion Denna laboration är inte poänggivande utan är till för den som vill bekanta sig med MATLAB. Fokusera

Läs mer

MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc.

MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc. Introduktion till MATLAB Martin Nilsson Avdelningen för teknisk databehandling Institutionen för informationsteknologi Uppsala universitet MATLAB the Matrix Laboratory utvecklat av MathWorks, Inc. Matematisk

Läs mer

Mer om funktioner och grafik i Matlab

Mer om funktioner och grafik i Matlab CTH/GU 2/22 Matematiska vetenskaper Inledning Mer om funktioner och grafik i Matlab Först skall vi se lite på funktioner som redan finns i Matlab, (elementära) matematiska funktioner som sinus och cosinus

Läs mer

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer Datorlära 1 Introduktion till datasystemet, epost konto, afs hemkonto Introduktion till datorer och datasalar Open Office Calculator Beräkningar med Open Office Calc Diagram med OO Calc Datorlära 2 Utforma

Läs mer

Laboration 1: Linjär algebra

Laboration 1: Linjär algebra MALMÖ HÖGSKOLA Centrum för teknikstudier MA119A VT 2010, Yuanji Cheng Viktigt information om labb Vid laborationen gäller följande: 1. Labben görs i grupp av två studenter, och redovisningsuppgifterna

Läs mer

Introduktion till Word och Excel

Introduktion till Word och Excel Introduktion till Word och Excel HT 2006 Detta dokument baseras på Introduktion till datoranvändning för ingenjörsprogrammen skrivet av Stefan Pålsson 2005. Omarbetningen av detta dokument är gjord av

Läs mer

Grundkurs 1 IKT Filhantering

Grundkurs 1 IKT Filhantering Filhantering Dan Haldin Ålands lyceum I N N E H Å L L S F Ö R T E C K N I N G Innehållsförteckning... 2 Filhantering med Windows... 3 Skapa Mappar... 4 Spara rätt... 5 Öppna sparade filer... 7 Flytta och

Läs mer

Extramaterial till Matematik Y

Extramaterial till Matematik Y LIBER PROGRAMMERING OCH DIGITAL KOMPETENS Extramaterial till Matematik Y NIVÅ ETT Taluppfattning och tals användning ELEV Det finns många olika programmeringsspråk. Ett av dem är Python, som du ska få

Läs mer

Introduktion till Matlab

Introduktion till Matlab CTH/GU 2015/2016 Matematiska vetenskaper Introduktion till Matlab 1 Inledning Matlab är både en interaktiv matematikmiljö och ett programspråk, som används på många tekniska högskolor och universitet runt

Läs mer

Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8)

Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8) Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8) I detta exempel kommer du att lära dig Att skapa en ny presentation från början Att skapa en enkel knapp Att använda händelseinställningar, events

Läs mer

När man vill definiera en matris i MATLAB kan man skriva på flera olika sätt.

När man vill definiera en matris i MATLAB kan man skriva på flera olika sätt. "!$#"%'&)(*,&.-0/ 177 Syftet med denna övning är att ge en introduktion till hur man arbetar med programsystemet MATLAB så att du kan använda det i andra kurser. Det blir således inga matematiska djupdykningar,

Läs mer

Kapitel 1 Komma igång... 3

Kapitel 1 Komma igång... 3 2014.02.21 1 Kapitel Innehåll... Sida Kapitel 1 Komma igång... 3 Välkommen... 3 Är DDS-CAD Arkitekt installerat?... 5 Operativmiljön Windows... 5 Begrepp... 5 Starta DDS-CAD Arkitekt... 6 Starta ett nytt

Läs mer

Inledning till OpenOffice Calculator Datorlära 2 FK2005

Inledning till OpenOffice Calculator Datorlära 2 FK2005 Inledning till OpenOffice Calculator Datorlära 2 FK2005 Mål Lära sig att skapa och använda ett räkneblad med OpenOffice Calculator Beräkna medelvärde och standardavvikelsen med räknebladet Producera en

Läs mer

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 27 oktober 2015 Sida 1 / 31

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 27 oktober 2015 Sida 1 / 31 TANA17 Matematiska beräkningar med MATLAB för M, DPU Fredrik Berntsson, Linköpings Universitet 27 oktober 2015 Sida 1 / 31 TANA17 Kursmål och Innehåll Målet med kursen är att Ge grundläggande färdighet

Läs mer

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg Introduktion till programmering D0009E Föreläsning 1: Programmets väg 1 Vad är en dator? En maskin vars beteende styrs av de innehållet (bitmönster) som finns lagrade i datorns minne (inte helt olikt förra

Läs mer

Introduktion till programmering och Python Grundkurs i programmering med Python

Introduktion till programmering och Python Grundkurs i programmering med Python Introduktion till programmering och Python Hösten 2009 Dagens lektion Vad är programmering? Vad är en dator? Filer Att tala med datorer En första titt på Python 2 Vad är programmering? 3 VAD ÄR PROGRAMMERING?

Läs mer

Extramaterial till Matematik Y

Extramaterial till Matematik Y LIBER PROGRAMMERING OCH DIGITAL KOMPETENS Extramaterial till Matematik Y NIVÅ TVÅ Taluppfattning och tals användning ELEV Det finns många olika programmeringsspråk. I den här uppgiften ska du få bekanta

Läs mer

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 2 november 2015 Sida 1 / 23

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 2 november 2015 Sida 1 / 23 TANA17 Matematiska beräkningar med MATLAB för M, DPU Fredrik Berntsson, Linköpings Universitet 2 november 2015 Sida 1 / 23 Föreläsning 2 Index. Kolon-notation. Vektoroperationer. Summor och medelvärden.

Läs mer

Komma igång med 3L Pro 2014. Komma igång med 3L. Copyright VITEC FASTIGHETSSYSTEM AB

Komma igång med 3L Pro 2014. Komma igång med 3L. Copyright VITEC FASTIGHETSSYSTEM AB Komma igång med 3L Innehåll LOGGA IN I 3L... 3 Verktyg och kortkommandon... 6 Övriga tangenter... 9 RAPPORTUTSKRIFT I 3L... 10 Instruktioner för att skriva till fil:... 11 Logga in i 3L Ikonen för 3L Pro

Läs mer

A. Datorn från grunden

A. Datorn från grunden A-1 A. Vad är en dator? En dator är en apparat som du kan utföra en mängd olika uppgifter med t.ex: Skriva och läsa e-post, lyssna på musik, titta på film, spela spel. De olika uppgifterna utförs av program

Läs mer

DN1212/numpm Numeriska metoder och grundläggande programmering Laboration 1 Introduktion

DN1212/numpm Numeriska metoder och grundläggande programmering Laboration 1 Introduktion Staffan Romberger 2008-10-31 DN1212/numpm Numeriska metoder och grundläggande programmering Laboration 1 Introduktion Efter den här laborationen ska du kunna hantera vektorer och matriser, villkorssatser

Läs mer

Matriser och Inbyggda funktioner i Matlab

Matriser och Inbyggda funktioner i Matlab CTH/GU STUDIO 1 TMV036a - 2012/2013 Matematiska vetenskaper Matriser och Inbyggda funktioner i Matlab Analys och Linjär Algebra, del A, K1/Kf1/Bt1 Moore: 2.3, 3.1-3.4, 3..1-3.., 4.1, 7.4 1 Inledning Nu

Läs mer

IT-körkort för språklärare. Modul 9: Rätta skrivuppgifter

IT-körkort för språklärare. Modul 9: Rätta skrivuppgifter IT-körkort för språklärare Modul 9: Rätta skrivuppgifter Innehåll I. Rätta uppgifter i Word... 3 Markera fel med färger snabbt och enkelt... 3 Använd Words rättningsverktyg skriv kommentarer... 4 Gör ändringar

Läs mer

Datorövning 1 Calc i OpenOffice 1

Datorövning 1 Calc i OpenOffice 1 Datorövning 1 Calc i OpenOffice 1 1 OpenOffice Calc Till förmån för de som följer kursen Fysikexperiment för lärare skall vi här gå igenom några få exempel på hur OO Calc (motsvarar MS Excel) kan användas

Läs mer

MATLAB övningar, del1 Inledande Matematik

MATLAB övningar, del1 Inledande Matematik MATLAB övningar, del1 Inledande Matematik Övningarna på de två första sidorna är avsedda att ge Dig en bild av hur miljön ser ut när Du arbetar med MATLAB. På de följande sidorna följer uppgifter som behandlar

Läs mer

KURSMÅL WINDOWS STARTA KURSEN

KURSMÅL WINDOWS STARTA KURSEN KURSMÅL WINDOWS Detta är en introduktionskurs för dig som är nybörjare. Du kommer att få bekanta dig med datorns viktigaste delar och lära dig grunderna i operativsystemet Windows, vilket är en förutsättning

Läs mer

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Inledning Starta Microsoft Visual Studio 2005. Välj create Project Välj VB + Vindows Application och välj ett nytt

Läs mer

FC-kurs Röbäcks skolområde, åk 5-6

FC-kurs Röbäcks skolområde, åk 5-6 FC-kurs Röbäcks skolområde, åk 5-6 En kortfattad manual för följande funktioner: 1. Hur det ser ut i FC (repetition) 2. Hur man skickar och läser mail i FC (repetition) 3. Att skicka och ta emot en bilaga

Läs mer

Department of Physics Umeå University 27 augusti Matlab för Nybörjare. Charlie Pelland

Department of Physics Umeå University 27 augusti Matlab för Nybörjare. Charlie Pelland Matlab för Nybörjare Charlie Pelland Introduktion till Matlab Matlab (matrix laboratory) är ett datorprogram och ett programspråk som används av ingenjörer runt om i världen. Ni kommer att använda er av

Läs mer

Snabbguide till First Class

Snabbguide till First Class Snabbguide till First Class Guide till First Class Grundläggande funktioner Logga in i First Class För att logga in i First Class dubbelklickar du på skrivbordsikonen First Class, eller väljer First Class

Läs mer

Institutionen för matematik och datavetenskap Karlstads universitet. GeoGebra. ett digitalt verktyg för framtidens matematikundervisning

Institutionen för matematik och datavetenskap Karlstads universitet. GeoGebra. ett digitalt verktyg för framtidens matematikundervisning Karlstads GeoGebrainstitut Institutionen för matematik och datavetenskap Karlstads universitet Mats Brunström Maria Fahlgren GeoGebra ett digitalt verktyg för framtidens matematikundervisning Invigning

Läs mer

Guide till att använda Audacity för uttalsövningar

Guide till att använda Audacity för uttalsövningar Guide till att använda Audacity för uttalsövningar Victoria Johansson Humlabbet, SOL-center, Lund [email protected] 28 mars 2006 1 Inledning Audacity är ett program som kan användas för att spela in

Läs mer

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift ) 2008-03-12.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Du skall skriva ett program som läser igenom en textfil som heter FIL.TXT och skriver ut alla rader där det står ett decimaltal först på raden. Decimaltal

Läs mer

SF1672, Linjär Algebra med Matlab för F1 Lab0

SF1672, Linjär Algebra med Matlab för F1 Lab0 SF1672, Linjär Algebra med Matlab för F1 Lab0 Denna labb är tänkt att öva datorhantering och öva inledande Matlab. Eftersom förkunskaperna varierar finns en hel del uppgifter så att alla kan få något att

Läs mer

3. Hämta och infoga bilder

3. Hämta och infoga bilder Sida 1 av 8 Lektion 1: sida 4 av 4 «Sida 3 av 4 Till kursens framsida 3. Hämta och infoga bilder Nu vet vi ju hur man sätter in text i sin sida. Men hur gör man med bilder? Det är inte svårt alls! Det

Läs mer

Beräkningsvetenskap föreläsning 2

Beräkningsvetenskap föreläsning 2 Beräkningsvetenskap föreläsning 2 19/01 2010 - Per Wahlund if-satser if x > 0 y = 2 + log(x); else y = -1 If-satsen skall alltid ha ett villkor, samt en då det som skall hända är skrivet. Mellan dessa

Läs mer

Dok nr OSF/AV-15:003, ver E Inloggning till Treserva via extern dator

Dok nr OSF/AV-15:003, ver E Inloggning till Treserva via extern dator Inloggning till Treserva via extern dator Innehåll 1 Inloggningsalternativ... 2 1.1 Inloggning via SMS... 2 1.2 Inloggning via E-legitimation... 4 2 Utloggning... 5 3 Helskärmsläge... 6 4 Bläddra mellan

Läs mer

Programutveckling med Java Development Kit. (JDK 1.1.x) och Programmers File Editor (PFE 7.02)

Programutveckling med Java Development Kit. (JDK 1.1.x) och Programmers File Editor (PFE 7.02) UMEÅ UNIVERSITET Institutionen för datavetenskap Thomas Johansson Oktober 1998 Programutveckling med Java Development Kit (JDK 1.1.x) och Programmers File Editor (PFE 7.02) Umeå universitet 901 87 Umeå.

Läs mer

Funktioner och grafritning i Matlab

Funktioner och grafritning i Matlab CTH/GU LABORATION 3 MVE11-212/213 Matematiska vetenskaper 1 Inledning Funktioner och grafritning i Matlab Först skall vi se lite på (elementära) matematiska funktioner i Matlab, som sinus och cosinus.

Läs mer

Word Grunderna 1. Om du kan det allra enklaste i Word, hoppa över uppgifterna A-E.

Word Grunderna 1. Om du kan det allra enklaste i Word, hoppa över uppgifterna A-E. Word Grunderna 1 Om du kan det allra enklaste i Word, hoppa över uppgifterna A-E. A Starta programmet Word. Titta på skärmen efter en bild som det finns ett W på. Tryck med musknappen snabbt två gånger

Läs mer

BLI VÄN MED DIN DATOR ENHETER MAPPAR FILER

BLI VÄN MED DIN DATOR ENHETER MAPPAR FILER BLI VÄN MED DIN DATOR ENHETER MAPPAR FILER Innehållsförteckning ENHETER...2 MAPPAR...2 VISNINGSLÄGEN...3 SORTERING...4 MAPPAR OCH FILER...5 FILNAMN...6 FILTILLÄGG...6 FILHANTERING KOPIERA FLYTTA BYTA NAMN

Läs mer

Skärmtangentbordet som är enkelt att använda både med mus, touchskärmar och interaktiva whiteboards

Skärmtangentbordet som är enkelt att använda både med mus, touchskärmar och interaktiva whiteboards Skärmtangentbordet som är enkelt att använda både med mus, touchskärmar och interaktiva whiteboards Tel: 031-769 00 60 [email protected] www.frolundadata.se Introduktion WizKeys är flexibelt och kostnadseffektivt

Läs mer

Programmets startmeny ser ut så här. För att få fram menyerna Avsluta, Inställningar och Användare måste du föra markören upp till det blåa fältet.

Programmets startmeny ser ut så här. För att få fram menyerna Avsluta, Inställningar och Användare måste du föra markören upp till det blåa fältet. Programmets startmeny ser ut så här. För att få fram menyerna Avsluta, Inställningar och Användare måste du föra markören upp till det blåa fältet. Då du klickar på Användare öppnas denna bläddringslista.

Läs mer

2009-08-20. Manual för Typo3 version 4.2

2009-08-20. Manual för Typo3 version 4.2 2009-08-20 Manual för Typo3 version 4.2 1 2 Innehåll: 1. Allmänt 4 2. Grunderna i Typo3 5 2.1 Knappar 5 2.2 Inloggning 5 2.3 Den inledande vyn 6 2.4 Sidträdet 7 3. Sidor 8 3.1 Skapa en ny sida 8 3.1.1

Läs mer

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Tentamen i TDP004 Objektorienterad Programmering Praktisk del Tentamen i TDP004 Objektorienterad Programmering Praktisk del Datum: 2011-04-28 Tid: 08-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 281456 Jourhavande kommer att besöka skrivsalarna ungefär

Läs mer

Inloggning till Treserva via extern dator

Inloggning till Treserva via extern dator Inloggning till Treserva via extern dator Innehåll 1 Inloggningsalternativ... 2 1.1 Inloggning via SMS... 2 1.2 Inloggning via E-legitimation... 4 2 Utloggning... 5 3 Helskärmsläge... 6 4 Bläddra mellan

Läs mer

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016 Emacs Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016 Historia 2/21 Utvecklas konstant, från 70-talet Är en generellt texteditor (INTE ordbehandlare) som fokuserar på texten, inte utseendet

Läs mer