• No results found

Ett annat litet ¨oversk˚adligare s¨att att se vad man gjort ¨ar att ¨oppna MATLABs histo-rief¨onster, g˚a till Desktop och v¨alj ”View Command History”. N¨ar du g¨or det ¨oppnas ytterligare en pann˚a i MATLABs desktop. Om du fortfarande har ”Workspace” ¨oppen kommer (oftast, detta kan variera litet med hur MATLAB ¨ar inst¨alld) ”Command History”

och ”Workspace” att dela p˚a den v¨anstra pann˚an, du kan d˚a v¨axla mellan dem genom att klicka p˚a fliken som finns l¨angst ned i denna pann˚a. N¨ar ”Command History” ¨ar aktivt s˚a kan du i det se de senaste kommandon du utf¨ort i kommandof¨onstret.

Om du dubbelklickar p˚a en rad i det f¨onstret s˚a utf¨ors det kommandot en g˚ang till. Du kan ocks˚a g¨ora mer avancerade operationer genom att klicka en g˚ang p˚a en rad och sedan h¨ogerklicka i historief¨onstret.

Du f˚ar d˚a upp en meny som ser ut ungef¨ar som till h¨oger.

Vi ˚aterkommer till de flesta av alternativen, det vi skall anv¨anda nu ¨ar ”Copy”. Klicka p˚a ett kommando i histo-rief¨onstret, h¨ogerklicka och v¨alj ”Copy”. G˚a d¨arefter till kom-mandof¨onstret och h¨ogerklicka. I den meny som d˚a dyker upp kan du v¨alja ”Paste” (klistra in). N¨ar du gjort det har du fly-ttat kommandot fr˚an historief¨onstret till kommandof¨onstret.

V¨al d¨ar kan du ¨andra i det gamla kommandot och sedan utf¨ora det nya modifierade kom-mandot genom att trycka p˚a return. Det kan tyckas vara ett omst¨andigt s¨att 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˚a inser vi att det kan vara mycket enklare och snabbare (och mindre k¨ansligt f¨or nya fel) att kopiera in kommandot fr˚an historief¨onstret och ¨andra ¨an att skriva in kommandot fr˚an scratch.

2.4 M-filer

Det absolut smidigaste s¨attet att anv¨anda MATLAB ¨ar att konsekvent jobba med s˚a kallade

”m-filer”. I en m-fil kan man skriva in alla kommandon man kan skriva i MATLABs kom-mandof¨onster och spara dessa till h˚arddisken. N¨ar man sedan skriver namnet p˚a m-filen i MATLABs kommandof¨onster s˚a utf¨ors alla kommandon som st˚ar i filen och resultatet visas i MATLABs kommandof¨onster. Genom att utnyttja m-filer kan vi spara en otrolig m¨angd arbete. Vi kan till exempel skriva in alla r˚adata fr˚an en laboration i en m-fil, sedan steg f¨or steg skriva in alla operationer f¨or att g¨ora m¨atv¨ardesbehandling p˚a laborationen. D¨arefter skriver vi in de kommandon som kr¨avs f¨or att producera de grafer vi skall redovisa i labora-tionsredog¨orelsen. Vi kan n¨ar som helst i den h¨ar processen ta paus, spara filen till disk och forts¨atta vid ett senare tillf¨alle. Det ¨ar ocks˚a enkelt att ¨andra ett enstaka kommando om man har f˚att n˚agon formel om bakfoten, eller om man vill ¨andra n˚agon detalj i ett histogram.

Det b¨asta man kan g¨ora som student ¨ar att bygga upp ett f¨orr˚ad av sm˚a m-filer som g¨or avgr¨ansade uppgifter, till exempel en anpassning till en andragradskurva eller en ber¨akning av chi-kvadrat. Eftersom en m-fil kan kalla en m-fil kan filer som utf¨or klart definierade uppgifter enkelt ˚ateranv¨andas n¨ar liknande problem skall l¨osas.

2.4.1 Editorn f¨or M-filer

MATLAB har ett s¨arskilt f¨onster som anv¨ands f¨or att skapa och ¨andra m-filer. Du kan hitta fullst¨andig information om MATLABs editor vid

?/MATLAB/Desktop Tools and Development Environment/ Editing and De-bugging M-files , h¨ar ger vi den information som beh¨ovs f¨or att komma ig˚ang och jobba.

Det finns m˚anga s¨att att starta verktyget:

• Om vi klickar p˚a ikonen som visar ett tomt vitt pappersark l¨angst till v¨anster i verk-tygslisten ¨oppnas editeringsf¨onstret och vi kan b¨orja skriva in v˚ara kommandon. Startar vi editorn p˚a det h¨ar s¨attet finns inget filnamn definierat f¨or den nya m-filen, s˚a n¨ar vi sparar filen kommer MATLAB att beg¨ara att vi anger ett namn.

• I menyn ”File” klickar vi p˚a ”New” och sedan ”M-file” f¨or att uppn˚a samma resultat.

• I kommandof¨onstret skriver man ”Edit” f¨or att f˚a upp ett f¨onster och en ny fil.

• Alternativt kan man i kommandof¨onstret skriva ”Edit filnamn”. Om det existerar en fil med det namnet n˚agonstans inom MATLABs s¨okv¨ag s˚a ¨oppnas denna. Om inte s˚a presenterar MATLAB en dialogruta d¨ar vi f˚ar svara p˚a om vi vill skapa en ny fil med det namnet. Svarar vi nej s˚a ¨oppnas inget editor-f¨onster.

L˚at oss b¨orja med att s¨aga hej, ¨oppna editorn f¨or m-filer p˚a n˚agot av ovanst˚aende s¨att. Skriv sedan in raden:

disp (’Hello World’)

2.4.2 Att spara en M-fil p˚a disk

Hela po¨angen med att skapa en m-fil ¨ar ju att den skall sparas p˚a h˚arddisk. F¨or att g¨ora det g˚ar vi in i ”File” menyn och v¨aljer ”Save”. Om filen vi vill spara ¨ar nyskapad och inte har n˚agot namn s˚a kommer MATLAB att ¨oppna en dialogruta d¨ar vi kan ange filens namn och i vilken katalog den skall ligga. Har vi ¨andrat i en redan existerande fil s˚a sparas den

¨

andrade versionen med samma namn som den ursprungliga. Observera att det h¨ar inneb¨ar att den ursprungliga versionen ¨ar f¨orlorad f¨or gott. Det kan d¨arf¨or vara klokt, s¨arskilt om man vill ¨andra i en komplicerad redan fungerande fil, att ist¨allet f¨or att spara den med samma namn som tidigare spara en kopia med ett annat namn s˚a att den ursprungliga, of¨or¨andrade versionen av filen finns kvar p˚a h˚arddisken. Detta g¨or man genom att ist¨allet f¨or att ange

”Save” v¨aljer ”Save as...” under ”File”-menyn. Vi f˚ar ¨aven i det h¨ar fallet upp dialogrutan d¨ar vi kan v¨alja namn och katalog f¨or filen. N¨ar man v¨al har introducerat alla ¨andringar och f˚att dem att fungera som man ¨onskar kan man sl¨anga den gamla filen och d¨opa om den nya till det gamla namnet om man s˚a ¨onskar.

En genv¨ag f¨or att spara filen ¨ar att klicka p˚a diskett-symbolen i verktygsraden. F¨or en ny fil f˚ar vi d˚a upp dialogrutan och kan v¨alja namn och katalog, en gammal fil sparas med det gamla namnet.

Ta nu och spara din f¨orsta m-fil genom n˚agon av metoderna ovan. L¨agg filen i en l¨amplig katalog (kanske ”MATLAB/pass2” ?) p˚a din afs-area. Ge filen namnet ”hej”. Du beh¨over inte sj¨alv l¨agga till ¨andelsen ”.m” det sk¨oter MATLAB sj¨alv.

2.4.3 L¨asa in och k¨ora en m-fil

Enklaste s¨attet att k¨ora en m-fil ¨ar att bara skriva dess namn i kommandof¨onstret. Om filen finns antingen i den aktuella katalogen eller i n˚agon katalog i s¨okv¨agen2 (mer om “s¨okv¨ag”

2Om det finns fler filer med samma namn i olika kataloger som finns i s¨okv¨agen s˚a v¨aljer Matlab den som kommer f¨orst. Om resultatet inte blir vad man t¨ankt sig kan det bero p˚a att det finns en namne till den fil vi egentligen vill k¨ora, och att den hamnar f¨ore i k¨on.

2.4. M-FILER 17 kommer i avsnitt ?? s˚a kommer de kommandon som finns i filen att utf¨oras. Prova:

hej

Hello World

Du kan ocks˚a k¨ora en m-fil direkt fr˚an editor-f¨onstret genom att antingen klicka p˚a symbolen till h¨oger eller ocks˚a g˚a till menyn ”Debug” och v¨alja ”Run”. Om det finns ¨andringar i editor-f¨onstret som inte ¨ar sparade till h˚arddisk

s˚a sparas f¨orst filen till disk innan kommandona utf¨ors. N¨ar man h˚aller p˚a och jobbar med en komplicerad m-fil som till exempel n¨ar man vill f˚a ett visst utseende p˚a en graf och h˚aller p˚a och provar sig fram s˚a ¨ar det bekv¨amt att k¨ora filen fr˚an editor-f¨onstret p˚a det h¨ar s¨attet.

2.4.4 Kommentarer

I princip ¨ar det ingen skillnad p˚a hur MATLAB hanterar kommandon som skrivs in i kom-mandof¨onstret och kommandon som l¨ases in via en m-fil. Det finns ¨and˚a ett antal komman-don som man knappast anv¨ander i kommandof¨onstret men som spelar en stor roll n¨ar vi jobbar med m-filer. Viktigast av dessa ¨ar ett av de allra viktigaste MATLAB kommandot -kommentarer.

Kommentarer inleds med ett procenttecken ”%” och f¨oljs av godtycklig text. N¨ar MATLAB utf¨or kommandon ignorerar programmet procenttecknet och vad som f¨oljer efter det. Syftet med kommentarer ¨ar att det skall g¨ora det enklare att titta i en m-fil och kunna f¨olja med vad programmet g¨or, och hur. Detta ¨ar anv¨andbart b˚ade om man anv¨ander program skrivna av andra, men ocks˚a n¨ar man ett ˚ar senare (kom ih˚ag att ni skall spara alla era gamla m-filer!)

˚aterv¨ander till filer man sj¨alv har skrivit, det kan vara nog s˚a sv˚art att minnas vad man sj¨alv t¨ankt och gjort! Kommentarer anv¨ands

1. som en varudeklaration i b¨orjan av ett program (i det h¨ar sammanhanget ¨ar en m-fil att betrakta som ett program) f¨or att beskriva vad programmet g¨or, vad det heter, vem som har skrivit det och n¨ar, samt om programmet beh¨over n˚agon speciell typ av indata eller levererar n˚agon speciell typ av ut-data.

2. f¨or att beskriva vad de viktigaste variablerna st˚ar f¨or 3. vad de olika programstegen utf¨or

Det g˚ar n¨astan alltid att med ett snabbt ¨ogonkast skilja ett program skrivet av en van pro-grammerare fr˚an ett skrivet av en nyb¨orjare, ¨aven om man inte begriper ett skvatt av vad programmet g¨or. Eftersom en av skillnaderna ofta ¨ar m¨angden kommentarer - en duktig programmerare skriver mycket kommentarer - s˚a kan man ibland frestas att skriva en kom-mentar ¨aven f¨or triviala steg, vilket inte underl¨attar l¨asningen. Exakt hur mycket och vilka avsnitt som skall kommenteras kan vara en smaksak, men ett exempel som f¨orfattaren tycker

¨

ar rimligt kan vara:

%---% Volume.m

%

% Beraknar volymen for cylindrar baserat pa

% matt radie och angiven hojd

% Sten Hellman 2002-03-03

%---Radie = [10.2 14.5 17.6 25.3 30.6 43.5]

Hojd = [12.5 22.4 44.5 47.6 54.4 88.4]

Volym = pi*Radie.\^2 .* Hojd

%

% Felet i radien ar konstant 0.3, felet i hojden

% ar 10% av matetalet

%

DeltaRadie = 0.3 * ones(1,6) DeltaHojd = 0.1 * Hojd

DeltaVolym = Volym * sqrt( (DeltaRadie ./ ...

(2*Radie) ).\^2 +(DeltaHojd ./ Hojd).\^2) D¨aremot vore till exempel

%

% Volymen ar pi * r-kvadrat * hojden

%

Volym = pi*Radie.\^2 .* Hojd\

en ¨overdrift som knappast g¨or det enklare att f¨olja koden.

2.4.5 In- och utmatning av data till M-filer

En annan skillnad mellan att skriva m-filer och ge kommandon direkt i kommandof¨onstret

¨

ar hur data matas in i MATLAB och hur de presenteras f¨or den som utf¨or ett kommando.

Kommandot disp ¨ar ju till exempel oftast inte s¨arskilt meningsfullt i kommandof¨onstret. Att f˚a MATLAB att skriva ”Hallo World” genom att sj¨alv skriva precis samma sak i argumentet till kommandot disp ¨ar ju m˚attligt intressant. I en m-fil som man k¨or ¨ar kommandot d¨aremot mycket nyttigt eftersom det kan anv¨andas f¨or att skriva information i kommandof¨onstret som kan ange resultat av ber¨akningar eller ange att vi skall mata in information till MATLAB.

Vi kommer snart att m¨arka att det finns ett behov av att kunna mata in data till en k¨orande m-fil och att skriva ut data fr˚an filen till kommandof¨onstret. Man kan till exempel t¨anka sig att m-filen i f¨oreg˚aende avsnitt ist¨allet f¨or att ber¨akna volymen av ett antal cylindrar d¨ar vi skriver in radie och h¨ojd i m-filen skriver en mer allm¨an m-fil som kan anv¨andas f¨or att ber¨akna volymen av en godtycklig cylinder. En s˚adan m-fil beh¨over d˚a ha en metod f¨or anv¨andaren att mata in ett godtyckligt v¨arde p˚a radien och h¨ojden, och en metod att mata ut resultatet fr˚an ber¨akningen i kommandof¨onstret. Vi kommer att l¨ara oss hur det g˚ar till i avsnitt 8.2 nedan d¨ar vi g˚ar igenom s˚a kallad formaterad in- och utmatning. Men redan innan vi l¨art oss detta kan vi kommunicera med m-filer genom att utnyttja att m-filer och kommandof¨onstret anv¨ander samma workspace. Om vi till exempel k¨or m-filen ovan f¨or att ber¨akna cylindervolymer s˚a kommer variabeln Volym som inneh˚aller resultatet att finnas kvar i workspace. Vi kan allts˚a genom att skriva Volym i kommandof¨onstret se resultatet av ber¨akningen. Omv¨ant kan man t¨anka sig att ta bort raden

Radie = [10.2 14.5 17.6 25.3 30.6 43.5]

ur m-filen och ist¨allet innan vi k¨or m-filen tilldela v¨arden i kommandof¨onstret. Eftersom Radie d˚a existerar i workspace kommer m-filen att fungera precis som vanligt. P˚a det s¨attet

2.4. M-FILER 19 g˚ar det enkelt att k¨ora om filen med olika v¨arden p˚a radien, det ¨ar bara att skriva in nya v¨arden p˚a Radie.

2.4.6 Utskrift n¨ar M-filen k¨or - Echo kommandot

N¨ar MATLAB k¨or en m-fil s˚a skriver programmet ut varje kommando i kommandof¨onstret, f¨oljt av svaret p˚a kommandot. Det h¨ar kan vara v¨aldigt bra om vi sitter och jobbar med en m-fil som ¨annu inte fungerar som det var t¨ankt. Men f¨or en fungerande och litet komplicerad m-fil kan det vara v¨aldigt irriterande, kommandof¨onstret fylls av information som man ofta inte ¨ar intresserad av. F¨or att styra detta kan man anv¨anda kommandot echo. Skriver vi echo off st¨angs repetitionen av varje kommando av, skriver vi echo on s˚a s¨atts den p˚a igen. Fullst¨andig dokumentation av kommandot f˚ar du om du skriver help echo.

Att s¨atta echo till off inneb¨ar att vi inte beh¨over se varje kommando upprepas p˚a sk¨armen, men fortfarande s˚a kommer MATLAB att visa resultaten, om vi till exempel k¨or en m-fil med kommandot Radie = [10.2 14.5 17.6 25.3 30.6 43.5] med echo on s˚a ser vi

Radie = [10.2 14.5 17.6 25.3 30.6 43.5]

Radie =

10.2 14.5 17.6 25.3 30.6 43.5

i kommandof¨onstret. Har vi d¨aremot satt echo till off s˚a ser vi

Radie = 10.2 14.5 17.6 25.3 30.6 43.5

i kommandof¨onstret. ¨Aven f¨or en fungerande m-fil kan det vara bra att se vilka v¨arden de viktigaste variablerna har, men vi vill f¨ormodligen inte se alla variabler och vilka v¨arden de antar. F¨or att slippa eko av dessa “oviktiga variabler” anv¨ander vi samma knep som n¨ar vi skrev in kommandon direkt i kommandof¨onstret - vi avslutar raden med semikolon.

2.4.7 Paus i utskriften

Ibland vill man att en m-fil som k¨or skall stanna upp s˚a att man hinner se delresultat.

Speciellt om man visar fler plottar i samma figurf¨onster och vill hinna titta p˚a en plot innan programmet skriver ¨over den med n¨asta. D˚a kan vi anv¨anda kommandot pause. Ger vi kommandot utan argument i en m-fil s˚a g¨or exekveringen av filen halt n¨ar den kommer till pause-kommandot och pekaren visas som ett stort “P”. Programmet forts¨atter att k¨ora n¨ar vi trycker ned en godtycklig tangent. Vi kan ocks˚a ge kommandot med ett sifferargument, programmet g¨or d˚a en paus i det antal sekunder som ges i argumentet.

2.4.8 Namngivning av M-filer

En viktig detalj att t¨anka p˚a ¨ar att en m-fil inte skall ha samma namn som en variabel som f¨orekommer i filen. Det ¨ar l¨att h¨ant att man ger b˚ade filen och den viktigaste variabeln ett namn - samma namn - som anknyter till den uppgift programmet skall l¨osa. Det h¨ar kan leda till mycket f¨orvirrning. Antag till exempel att vi i avsnitt 2.4.4 hade kallat m-filen volym. F¨orsta g˚angen vi k¨or filen g˚ar allt v¨al, men om vi d¨arefter ¨andrar n˚agon liten detalj i programmet och f¨ors¨oker k¨ora om s˚a ser vi antagligen inte alls det vi f¨orv¨antar oss.

Orsaken ¨ar att programmet sj¨alv skriver in vektorn volym i MATLABS workspace. N¨asta g˚ang vi f¨ors¨oker k¨ora programmet med samma namn kommer matlab inte att tolka volym som en referens till programmet, utan till vektorn och som respons p˚a kommandot kommer den att skriva ut inneh˚allet i vektorn. Om ni n˚agon g˚ang sitter och f¨ors¨oker ¨andra i en m-fil men f¨or¨andringarna inte sl˚ar igenom kan det d¨arf¨or vara id´e att kontrollera om det finns en variabel med samma namn som m-filen.