En kort introduktion till MATLAB med exempel och övningsuppgifter

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

Beräkningsverktyg HT07

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

Introduktion till MATLAB

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

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

Laboration: Grunderna i Matlab

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

TSBB14 Laboration: Intro till Matlab 1D

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

Introduktion till Matlab

Introduktion till Matlab

Laboration: Grunderna i MATLAB

En introduktion till MatLab

Instruktion för laboration 1

Mer om funktioner och grafik i Matlab

Matriser och Inbyggda funktioner i Matlab

MMA132: Laboration 2 Matriser i MATLAB

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

Funktioner och grafritning i Matlab

Mer om funktioner och grafik i Matlab

Linjär algebra med tillämpningar, lab 1

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

Exempel att testa. Stora problem och m-filer. Grundläggande programmering 4. Informationsteknologi. Informationsteknologi.

M0043M Integralkalkyl och Linjär Algebra, H14, Matlab, Föreläsning 1

TANA17 Matematiska beräkningar med Matlab

Matriser och Inbyggda funktioner i Matlab

TAIU07 Matematiska beräkningar med Matlab

Instruktion för laboration 1

Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat

Variabler och konstanter

At=A' % ' transponerar en matris, dvs. kastar om rader och kolonner U' % Radvektorn U ger en kolonnvektor

Laborationstillfälle 1 Lite mer om Matlab och matematik

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

TAIU07 Matematiska beräkningar med Matlab

Matlabövning 1 Funktioner och grafer i Matlab

Matlabövning 1 Funktioner och grafer i Matlab

Lägg märke till skillnaden, man ser det tydligare om man ritar kurvorna.

Beräkningsvetenskap föreläsning 2

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

Datorövning 1 Fördelningar

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan

TANA17 Matematiska beräkningar med Matlab

Laboration 2: 1 Syfte. 2 Väntevärde och varians hos en s.v. X med fördelningen F X (x) MATEMATISK STATISTIK, AK FÖR BYGG, FMS 601, HT-08

Introduktion till MATLAB Föreläsning 1

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

TAIU07 Matematiska beräkningar med MATLAB för MI. Fredrik Berntsson, Linköpings Universitet. 15 januari 2016 Sida 1 / 26

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

Matriser och vektorer i Matlab

Funktioner och grafritning i Matlab

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

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April klockan

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

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

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Hjälpmedel: MATLAB

MATLAB handbok Introduktion

Introduktion till Matlab

Introduktion till Matlab

MMA132: Laboration 1 Introduktion till MATLAB

Introduktion till Matlab

Introduktion till Matlab

Introduktion till Matlab

Matlabföreläsningen. Lite mer och lite mindre!

TEKNISKA HÖGSKOLAN Matematik Fredrik Abrahamsson. Introduktion till MATLAB

MATLAB Matrix laboratory

MATLAB. En kort praktisk introduktion. Olof Hultin FAFA Omarbetad efter original av Henrik Persson

MMA132: Laboration 1 & 2 Introduktion till MATLAB

Extramaterial till Matematik Y

Introduktion till Matlab

Användarhandledning Version 1.2

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

Beräkningsvetenskap och Matlab. Vad är MATLAB? Vad är MATLAB? Användningsområden. Vad är MATLAB? Grunderna i Matlab. Beräkningsvetenskap == Matlab?

MAPLE MIKAEL STENLUND

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Matriser. Vektorer. Forts. Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Kort om programmering i Matlab

Introduktion till Matlab

Laboration: Vektorer och matriser

Matriser och vektorer i Matlab

CTH/GU LABORATION 1 MVE /2013 Matematiska vetenskaper. Mer om grafritning

Grundläggande kommandon

Datorövning 1: Introduktion till MATLAB

Introduktion till MATLAB, med utgångspunkt från Ada

Grafik och Egna funktioner i Matlab

MATLAB övningar, del1 Inledande Matematik

2 februari 2016 Sida 1 / 23

STOCKHOLMS UNIVERSITET VT 2011 Avd. Matematisk statistik GB DATORLABORATION 1: TIDSSERIER.

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

Matriser och linjära ekvationssystem

Kort om programmering i Python

Datorövning 1: Fördelningar

MATLAB. Vad är MATLAB? En kalkylator för linlär algebra. Ett programspråk liknande t.ex Java. Ett grafiskt verktyg.

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 8 december 2015 Sida 1 / 22

ATT RITA GRAFER MED KOMMANDOT "PLOT"

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

Matriser. Vektorer. Grunderna i MATLAB 2. Informationsteknologi. Informationsteknologi.

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

TANA17 Matematiska beräkningar med Matlab

Transkript:

En kort introduktion till MATLAB med exempel och övningsuppgifter Daniel Vågberg Institutionen för fysik Umeå Universitet 12 april 2013

Innehåll 1 Introduktion 3 2 Att hitta information 3 3 Grundläggande beräkningar - MATLAB som miniräknare 4 4 Script och M-ler 5 5 Funktioner 6 6 Matriser och vektorer 8 7 Vektoroperationer 11 8 Grundläggande statistik 12 9 Loopar och programöde 12 10 Figurer och diagram 13 11 Tips och saker att tänka på 15 2

1 Introduktion Här är en kort introduktion till MATLAB. Det mesta av innehållet går också att tillämpa i Octave och Freemat som är två gratisalternativ till MATLAB. Den här guiden är mycket kortfattad och förutsätter att man har programmerat i något annat språk tidigare. Tanken är att den ska gå att använda som en snabb kom-i-gång-guide för MATLAB. Eftersom det mesta redan nns förklarat i MATLABs inbyggda hjälpsystem kommer den här guiden inte att beskriva varje kommando i detalj, istället kommer det i varje avsnitt nnas en lista med användbara kommandon som läsaren själv förväntas läsa hjälpavsnittet för. Det viktiga är att man känner till namnen på de vanligaste kommandona och vet översiktligt vad de gör, detaljerna kan man alltid slå upp i hjälpen när man behöver dem. 2 Att hitta information MATLAB kommer som standard med omfattande dokumentation och hjälptexter. Det är viktigt att man snabbt lär sig att använda dessa då de kan vara mycket användbara om man inte kommer ihåg exakt hur man ska använda ett kommando eller behöver hitta information om en funktion. Följande kommandon används för att komma åt hjälpdokumentationen: help - Om man redan vet vad funktionen eller kommandot heter så kan man använda help för att direkt i MATLAB-fönstret få en kort sammanfattning av hur kommandot används. doc - Om man inte vet vad ett kommando heter eller vill ha mer detaljer om ett kommando kan man använda doc istället. Då öppnas ett separat fönster med ett sökbart hjälpsystem. demo - MATLAB har ett bibliotek av kortare exempel och guider som kan vara intressant att gå igenom om man vill se lite exempelkod för hur olika saker kan lösas. Hittar man inte lösningen i den inbyggda hjälpen så nns alltid Internet. MAT- LAB är ett populärt program och det nns massor med information på nätet, för att få bra sökresultat är det oftast bäst att söka på engelska. 2.1 Övningar 2.1 Skriv in följande kommandon i MATLAB och se vad som händer: >>help >>help sin >>doc >>doc sin >>demo matlab 3

3 Grundläggande beräkningar - MATLAB som miniräknare Det går att skriva in kommandon direkt i MATLABs kommandofönster. För enkla beräkningar fungerar det riktigt bra men för längre beräkningar är det oftast bekvämare att först skriva all kod i en l, och sedan skicka hela len till MATLAB. Mer om det längre ner. MATLABs kommandoprompt, >>, går att använda precis som en miniräknare, till exempel: >>5+3 ans = 8 >>a=5+ans a = 13 >>b=2*a b = 26 Kommandon i MATLAB är separerade av antingen en radbrytning eller ett semikolon. Om ett kommando avslutas med semikolon utförs kommandot, men resultatet skrivs inte ut på skärmen. Nedan följer ytterligare ett par enkla exempel: >>a=5; b=8; >>c=a*a c = 25 >>d=sqrt(c) d = 5 >>x=2^b x = 256 Variabler i MATLAB ligger kvar tills de tas bort med clear eller MATLAB avslutas. >>a=5; b=10; >>clear; >>c=a+b??? Undefined function or variable 'a'. Man kan också ta bort enskilda variabler med clear x, där x är namnet på variabeln. Alla vanliga (och en hel del mindre vanliga) matematiska funktioner nns naturligtvis i MATLAB och i rutan nedan listas några vanliga funktioner och konstanter som kan vara bra att känna till. Det första namnet i listan, ops, är lite speciellt, det är inte ett specikt kommando utan ger en lista över alla matematiska operatorer och specialtecken (+ / :; @ etc.) som MATLAB stödjer och hur man använder dem. Rekommenderade hjälpavsnitt: ops, clear, clc, format, pi, i (or j), eps, abs, round, oor, mod, sqrt, log, log10, exp, sin, cos, tan, asin, acos, atan, sind, cosd, tand 4

3.1 Övningar 3.1 Skriv in och testkör kodexemplen ovan. 3.2 Kontrollräkna följande uträkningar med MATLAB: a) 2 10 /204.8 = 5 b) 125/5 = 5 c) 3 + 4i = 5 d) ( 10 cos ( π 4 )) 2 = 5 4 Script och M-ler Även om MATLAB går att använda som miniräknare blir det ofta lite klumpigt när man har svårare problem, som behöver lösas i era steg. Då är det ofta bättre om man kan skriva ner och spara sin kod i en l. MATLAB-kod sparas i ler med ländelsen.m och kallas därför ofta M-ler. En M-l är en vanlig textl som innehåller MATLAB-kommandon. MATLAB har en inbyggd editor för M-ler, men man kan även använda andra texteditorer om man föredrar det. Den inbyggda editorn startas genom att skriva >>edit Man kan också öppna en specik l genom att skriva lnamnet efter, till exempel: >>edit min_fil.m Om len min_fil.m redan nns öppnas den, annars skapas en ny l med det namnet. Man kan även öppna och skapa M-ler genom MATLABs menyer File Open... och File New. MATLAB har en aktiv katalog där den letar efter användarens ler. Filerna i katalogen visas i fönstret "Current Directory", och man kan även skriva ut katalognamnet med kommandot pwd. Filer man jobbar med måste ligga i den katalogen för att MATLAB ska hitta dem. M-ler kommer i tre varianter: script, funktioner och klasser. I det här avsnittet ska vi tala om script, medan funktioner behandlas i nästa avsnitt. Klasser används för att skriva objektorienterad kod. Dessa är mycket användbara, men vi har inte utrymme här att förklara hur de används. Script är den enklaste typen av M-ler. Kod som är skriven i en script- l körs rad för rad, precis som om du skulle ha matat in dem för hand på kommandoprompten. Alla variabler som skapas i ett MATLAB script ligger kvar i minnet efter att scriptet avslutats om man inte aktivt väljer att ta bort dem. Skapa en l min_fil.m och skriv in följande: clear all; a=5; b=2^5 %everything written after a '%' is a comment in MATLAB spara len, och test kör den genom att skriva >>min_fil 5

Kodraderna i len kommer nu att köras och värdet på b kommer att skrivas ut. Den första raden clear all, nollställer MATLAB så att programmet alltid ger samma resultat när man kör det. I det här fallet behövs det egentligen inte, men det är en bra vana att alltid börja sina script från ett rent MATLAB. Om man inte gör det kan det ligga kvar variabler och inställningar från tidigare körningar som kan påverka dina resultat. Den typen av fel kan vara mycket svåra att hitta. Om man även vill nollställa och stänga alla öppna gurer kan man dessutom skriva in close all i början av sina script. 5 Funktioner I MATLAB nns det två typer av funktioner, dels vanliga funktioner som man skriver i M-ler, och dels så kallade anonyma funktioner. Anonyma funktioner är en typ av små funktioner som man kan deniera direkt i koden med hjälp av @-operatorn, utan att skapa en separat M-l. Variabler som skapas inuti funktioner är lokala och tas automatiskt bort när funktionen avslutas. Vi börjar med att titta på de vanliga funktionerna. För att deniera en funktion skapar vi en ny M-l med samma namn som funktionen vi tänker skriva. Det är viktigt att ha samma namn på funktionen och len annars kommer MATLAB inte att hitta funktionen. Funktioner börjar med kommandot function som utgör ett funktionshuvud som beskriver vilka parametrar funktionen tar och vilka returvärden den ger tillbaka. Funktionen avslutas med end. Nedan är ett exempel på en enkel funktion som tar två inparametrar x och y och ger tillbaka ett värde a, function a=my_function(x,y) end a=x+y^2; %remember to write comments in your code för att matlab ska hitta funktionen måste den sparas i len my_function.m. Vi kan anropa funktionen genom att skriva >>q=my_function(10,5) q = 35 Funktioner i matlab kan ge era returvärden. Vi modierar den föregående funktionen så att den nu ger två returvärden function [a,b]=my_function(x,y) end a=x+y^2; b=2*a*x; Om vi anropar den på samma sätt som tidigare får vi >>q=my_function(10,5) q = 35 Vilket överaskande nog är precis samma resultat som tidigare. Om vi vill se det andra returvärdet b, måste vi anropa den på följande sätt >>[q,r]=my_function(10,5) q = 35 r = 700 6

Om vi inte uttryckligen begär att få era returvärden från funktionen kommer MATLAB alltså bara att ge oss det första värdet. På grund av det sätt MATLAB använder lnamnen för att hitta en funktion går det bara att skriva en externt tillgänglig funktion i varje M-l. Om man skriver era funktioner i en M-l, kommer alla utom den översta funktionen att bli lokala funktioner. Dessa går att använda av funktioner i den M-len, men de kommer vara osynliga för all kod utanför len. Anonyma funktioner är små minifunktioner som går att skapa inuti en annan funktion eller i ett script, de behöver inte skrivas i en egen l. De skapas med @- operatorn. Här är ett exempel på hur vi kan skapa samma funktion som tidigare, men nu utan att skriva en separat l >>your_function=@(x,y)x+y^2; Den nya funktionen anropas på samma sätt som tidigare >>q=your_function(10,5) q = 35 En sak som är bra att veta om anonyma funktioner, är att man kan använda andra variabler som konstanter när man denierar en ny funktion, >>a=10; >>our_function=@(x) a*x; Men man ska vara försiktig, för när funktionen skapas använder den det aktuella värdet på alla parametrar i funktionen, men om dessa värden sen ändras efter att funktionen skapats kommer funktionen inte att uppdateras. Se exempel nedan: >>q=our_function(2) %created with a=10 q = 20 >>a=5; >>q=our_function(2) %still uses the old value a=10 q = 20 Vi ser att funktionen inte ändras när a ändras. Rekommenderade hjälpavsnitt: function, return, function_handle 5.1 Övningar 5.1 Skapa och testkör funktionerna my_function, your_function, och our_function. 5.2 Skriv en anonym funktion som räknar ut längden på hypotenusan i en rätvinklig triangel. Längden på hypotenusan c ges av Pytagoras sats c = a2 + b 2. Jämför resultatet med den inbyggda funktionen hypot. 7

6 Matriser och vektorer Matriser är en mycket viktig del av MATLAB. Det ser man redan i namnet, som ursprungligen är en förkortning av matrix laboratory. För att jobba med matriser och vektorer använder man :-operatorn. Den används för att skapa vektorer vars element ligger jämt fördelade mellan ett start- och ett stoppvärde. Nedan följer ett par exempel på hur den används >>a=1:5 a = 1 2 3 4 5 Vi ser att den första siran är startvärdet, och den sista är slutvärdet. Om man inte vill ta steg med längden 1 kan man sätta in en valfri steglängd i mitten tex >>b=1:2.5:10 b = 1.0 3.5 6.0 8.5 notera att slutpunkten 10 inte är med i vektorn, eftersom nästa värde i vektorn skulle varit 11.0. Vektorerna ovan är radvektorer, man kan omvandla mellan rad- och kolumnvektorer med transpose eller '-operatorn >> c=a' c= 1 2 3 4 5 För att komma åt det första elementet i en vektor skriver man >>b(1) ans = 1 Vi ser att i MATLAB numreras det först elementet i en vektor som 1, och inte 0 som i C eller Python. Det sista elementet i en vektor går att komma åt på två sätt, vet vi längden på vektorn kan vi använda elementnumret direkt >>b(4) ans = 8.5 Men vi kan också komma åt samma element genom att skriva >>b(end) ans = 8.5 Det går också att använda en vektor mellan parenteserna som innehåller index till de element vi är intresserade av. Nedan ser vi hur vi kan plocka ut element 1 och 3: >>b([1,3]) ans = 1 6 Matriser är tvådimensionella-datastrukturer. Vi kan mata in en matris på liknande sätt som en vektor: 8

>>A=[1:4;9,9,2,9; 4:7] A = 1 2 3 4 9 9 2 9 4 5 6 7 Man använder semikolon för att byta rad i matrisen. Om vi vill komma åt ett enskilt element eller rad i matrisen kan vi skriva >>A(2,3) ans = 2 >>A(2,:) ans = 9 9 2 9 >>A(:,2) ans = 2 9 5 vi ser att ett ensamt : kan används för att välja hela raden. Vi kan även använda :-operatorn tillsammans med end för att byta riktning på en rad >>A(end:-1:1,2) ans = 5 9 2 eller för att välja ut varannat element >>A(1,1:2:end) ans= 1 3 Om vi vill veta vilka dimensioner en vektor eller en matris har kan vi använda kommandona size och length, >>size(c) ans = 5 1 >>length(c) ans = 5 >>size(a) ans = 3 4 Det nns era kommandon som hjälper en att skapa vektorer och matriser utan att man behöver specicera varje element själv för hand. Om vi vill skapa en 30 400 matris fylld med nollor kan vi skriva >>B=zeros(30,400); Notera semikolonet. Om man jobbar med stora matriser vill man oftast inte att de ska skrivas ut på skärmen i onödan. Andra användbara kommandon för att skapa matriser och vektorer är ones, rand, NaN. MATLAB är inte begränsat till vektorer och matriser utan det går även att skapa variabler med högre dimensioner. Vi kan tex skapa en fyrdimensionell datastruktur fylld med slumptal genom att använd rand, 9

>>C=rand(2,3,4,5); >>size(c) ans = 2 3 4 5 Det går att använda logiska operationer för att välja ut delar av vektorer och matriser. Vi skapar en matris B, >>B=magic(4) B = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 Antag att vi vill veta vilka element i B som är större än 10. Ett sätt att göra det är att >> C=B>10 C = 1 0 0 1 0 1 0 0 0 0 0 1 0 1 1 0 den nya matrisen C innehåller 1 om motsvarande element i B är större än 10 och 0 om det är mindre än eller lika med 10. Vi kan använda C för att få en lista av elementen i B som är större än 10, >>B(C) ans = 16 11 14 15 13 12 För att istället få en lista med vilka positioner i C som är 1 kan man använda find. Rekommenderade hjälpavsnitt: colon, size, length, transpose, zeros, ones, rand, eye, NaN, inf, linspace, logspace, nd 6.1 Övningar 6.1 Testkör exemplen ovan. Tips: skapa en M-l och skriv in all kod där. 6.2 Använd :-operatorn för att: a) Skapa en vektor k med 100 element där elementen har värde 1,2,3,... 99, 100. 10

b) Skapa en vektor m genom att välja ut vart fjärde element i k. c) Skapa en vektor n genom att byta ordningen på alla element i m så att n(1) innehåller det högsta värdet och n(end) det lägsta värdet. d) Skapa en vektor p som består av de 10 första elementen i n. 6.3 Sätt ihop två vektorer så att de tillsammans bildar en lång vektor. 6.4 Sätt ihop två vektorer med samma längd så att de tillsammans bildar en matris med två rader. 7 Vektoroperationer Antag att vi har två tal och multiplicerar ihop dem, >>a=5; b=3; >>c=a*b c = 15 Resultatet är precis vad man väntar sig. Men vad händer om vi istället vill göra samma beräkning med vektorer, säg att vi har en serie talpar sparade i vektorerna a och b och vill räkna ut ett c värde för varje rad i vektorerna. Vi testar >> a=[1:3]; b=[4:6]; >> c=a*b??? Error using ==> mtimes Inner matrix dimensions must agree. Det som händer är att MATLAB försöker göra en matris multiplikation istället för en vanlig elementvis multiplikation där varje rad hanteras separat i vektorerna. Om vi vill göra en elementvis multiplikation, måste vi använda andra operatorer. Operatorerna för att göra elementvisa operationer föregås av en punkt; för multiplikation använder man.* istället för * >> a=[1:3]; b=[4:6]; >> c=a.*b c = 4 10 18 Nu får vi det förväntade resultatet. Detta är något man måste tänka på. Om man inte vill ha matris-multiplikationer, måste man aktivt välja att få elementvisa operationer genom att använda operatorer med punkt. Operatorer som ofta behöver bytas ut mot motsvarande punkt operator är */. Plus och minus fungerar alltid som förväntat och behöver därför inga punkt-operatorer. 7.1 Övningar 7.1 Testkör exemplen ovan. 7.2 Uppdatera funktionerna my_function och your_function så att de fungerar om inparametrarna x och y är två vektorer med samma längd. 11

8 Grundläggande statistik Nedan är en lista på användbara kommandon för att räkna ut bland annat summa, medelvärde och standardavvikelse för en vektor. Rekommenderade hjälpavsnitt: min, max, sum, mean, median, std, var, nnz 9 Loopar och programöde Här ska vi visa lite exempel på hur olika kontrollstrutkurer kan användas för att styra programödet. Vi börjar med ett exempel på en vanlig if-sats: if A==5 else end disp('sant A är 5'); disp('falskt A är inte 5'); Precis som i C används dubbla likhetstecken,==, för jämförelser. Det nns även möjligheten att använda kommandot elseif om man ska göra era jämförelser. Om man ska jämföra en variabel mot många olika fall så kan switch vara ett bra alternativ. switch(a) end case {0,1} disp('a är 0 eller 1'); case 20 disp('a är 20'); otherwise disp('a är något annat') En vanlig for-loop ser ut så här i MATLAB for i=1:10 end disp(i); Om man inte på förhand vet hur många iterationer som behövs kan man använda en while-loop istället i=1; s=0; while(s<20) end s=s+i i=i+1; En varning: loopar i MATLAB är generellt mycket långsamma, och bör därför undvikas. De esta standardoperationer man vill göra med en vektor nns 12

redan som inbyggda funktioner i MATLAB, och dessa kommer med få undantag alltid vara mycket snabbare än att själv skriva kod som itererar över vektorns element. Vektoroperationer med punkt operatorer kan ofta ersätta loopar vilket ger snabbare kod. I exemplet nedan skapas två vektorer b och c med identiskt innehåll, b skapas direkt med vektoroperationer, medan c skapas element för element i en for-loop. a=1:10; b=2*a.*a; for i=1:length(a) end c(i)=2*a(i)*a(i); Om man har möjlighet att välja på dessa två metoder så ska man alltid använda metoden med minst loopar, dvs b, då den generellt är mycket snabbare. Rekommenderade hjälpavsnitt: if, for, while, switch, break, continue 9.1 Övningar 9.1 Testkör kodexemplen ovan, testa med olika värden på A. Tips: skapa en m-l och skriv in all kod där. 9.2 Skriv en funktion y=fak(x) som använder en for-loop för att beräkna fakulteten y = x!. Jämför resultatet med den inbyggda funktionen factorial. Funktionen ska även fungera om x är en vektor, och ska då beräkna fakulteten för varje värde i x. 9.3 Skriv en funktion m=maximum(x) som tar en vektor x och returnerar det största värdet i x. Använd for och if för att lösa problemet. Jämför resultatet med den inbyggda funktionen max. 10 Figurer och diagram MATLAB har många inbyggda funktioner för att visualisera data och vi hinner tyvärr inte gå igenom alla här. Men vi ska se på ett par av de viktigaste. Vi börjar med att skapa tre vektorer med data som vi kan använda i exemplen, x=[0:0.1:10]; y=x.^2; y_noise=y+2*x.*(rand(size(y))-0.5); För att göra en enkel gur skriver vi plot(x,y,'r'); Den sista parametern är frivillig och används för att välja färg på linjen, i det här fallet röd. Man kan sen lägga till rubrik och text på axlarna: 13

title('average velocity of imaginary magical creatures'); xlabel('time [s]'); ylabel('velocity [m/s]'); Om man har mätdata som innehåller brus ska man inte rita det med heldragen linje som kommandot plot gör. Har man data med brus är det bättre att bara rita ut datapunkterna utan linje, det går tex att göra med kommandot scatter. Standardinställningen i MATLAB är att nollställa guren mellan varje gång man ritar, så om man gör två anrop till plot eller scatter kommer guren att nollställas emellan, och man kommer bara se resultatet av det sista kommandot. För att undvika det kan man använda kommandot hold on som förhindrar att MATLAB tömmer guren innan den ritar något nytt. Nu ska vi testa scatter och eftersom vi även vill behålla resultatet från det tidigare plot-kommandot använder vi hold on hold on; scatter(x,y_noise); För att göra guren tydligare är det bra om man beskriver vad de olika kurvorna betyder: legend('theory','experiment','location','nw') Om man sen vill tömma guren kan man antingen använda hold off som gör att den skrivs över nästa gång man ritar eller clf som tömmer den omedelbart. Om man behöver rita era olika gurer samtidigt kan man använda figure för att öppna er gurfönster, eller kommandot subplot för att rita era små gurer i samma fönster. Koden nedan öppnar två nya fönster och ritar en kurva i varje, siran efter figure väljer vilket gurfönster som är aktivt. Det tredje argumentet till plot väljer färg och linjetyp och sätter en beskrivande text i hörnet. figure(2); plot(x,sin(x),"ro-;sin(x);"); figure(3); plot(x,tan(x),"g-;tan(x);"); Man kan stänga alla öppna gurfönster med kommandot close all. När man är nöjd med sin gur kan man spara den genom att välja File Save as... i gurfönstrets meny. Det går att välja era olika format, det kan vara bra att spara i både MATLABs eget format.g (så att man kan redigera guren senare) och i ett vanligt bildformat som går att använda i ordbehandlingsprogram när man till exempel skriver labbrapport. Man kan också spara en gur utan att använda menyerna med kommandot print. Rekommenderade hjälpavsnitt: plot, scatter, hold, clf, gure, close, xlabel, ylabel, title, legend, axis, semilogx, semilogy, loglog, subplot, print 14

10.1 Övningar 10.1 Testkör kodexemplen ovan. Tips: Skapa en m-l och skriv in all kod där. 10.2 Använd hold och plot för att rita två kurvor i samma gur. 10.3 Använd subplot och plot för att rita två gurer i samma fönster. 10.4 Använd figure och plot för att rita två kurvor i varsitt fönster. 10.5 Rita upp funktionen y=exp(x) i intervallet 10 < x < 10. Använd först linjära axlar (plot) och sedan logaritmisk y-axel (semilogy) 10.6 Spara en av gurerna ovan både som en g-l och som en pdf-l. Stäng gur fönstret. Testa sedan att öppna g-len igen i MATLAB. 11 Tips och saker att tänka på Använd den inbyggda hjälpen, help och doc kan lösa många problem. Börja alla script med clear all; eller clear all; close all;. Man slipper många konstiga buggar om man nollställer alla variabler i början av sin kod. MATLAB utför beräkningar med yttal. Det betyder att man ofta får små avrundningsfel i resultaten och att till exempel beräkningar som borde bli exakt 0 inte alltid blir det, >>sin(pi) ans = 1.2246e-16 Detta är helt normalt och något man måste tänka på när man skriver sina program. Skärkilt viktigt är det om man gör jämförelser i tex if-satser med ==-operatorn eftersom resultatet kanske inte blir exakt det man förväntar sig. Vectorindex i matlab börjar från 1, och inte 0 som i många andra språk. För att få snabb kod undvik onödiga loopar och försöka att arbeta med hela vektorer istället för att arbeta med enskilda element ett och ett. Om man vill veta hur lång tid en bit kod tar att köra kan man använda kommandona tic och toc. Man kan även använda kommandot profile för att få mer detaljerad information om vad som tar tid i programmet. Om man har gjort beräkningar och vill spara resultatet till ett senare tillfälle, går det att spara matriser och vektorer i ler med save, dessa kan sedan laddas in igen med load. Undvik att skriva kod i onödan. Om det nns en färdig funktion som gör det du vill, använd den. Funktioner som man skriver själv blir nästan alltid långsammare än de inbyggda funktionerna. Om man vill kommetera bort era rader samtidigt i MATLAB, kan man markera koden i editorn, högerklicka och välja Comment. 15