• No results found

program. Man kan komma runt detta genom att skapa en m-fil, setmypath.m som s¨atter alla de s¨okv¨agar man vill ha. Denna fil kan du sedan exekvera varje g˚ang du startar Octave.

Exempel p˚a hur denna fil kan se ut:

% setmypath.m

% S¨atter s¨okv¨agen till dina filer.

% S¨att s¨okv¨agarna

path(’Z:\expmet\funktionsfiler’,path);

path(’Z:\expmet\labb1’,path);

path(’Z:\expmet\labb2’,path);

path(’Z:\expmet\datorovningar’,path);

%Skriv ut s¨okv¨agarna p˚a sk¨armen path

Byt ut funktionsfiler, labb1, etc mot namnen p˚a dina kataloger. Spara filen i din toppkat-alog (allts˚a precis under abcd1234 ). S¨att s¨okv¨agen till dina filer genom att skriva i Octaves prompt:

cd Z:\

setmypath

Notera att n¨ar du startar Octave genom att klicka p˚a ikonen pa skrivbordet sa kommer du inte att automatiskt att befinna dig i din toppkatalog. F¨or att orientera dig skriv i Octaves kommandof¨onster:

> pwd

ans = C:\Octave\3.2.4 gcc-4.4.0\bin

F¨or att komma till din toppkatalog skriver du, precis som ovan angivits: cd Z:\

4.3 M-filer

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

”m-filer”. I en m-fil kan man skriva in alla kommandon man kan skriva i Octaves kom-mandof¨onster och spara dessa till h˚arddisken. N¨ar man sedan skriver namnet p˚a m-filen i Octaves kommandof¨onster s˚a utf¨ors alla kommandon som st˚ar i filen och resultatet visas i Octaves kommandof¨onster. Genom att utnyttja m-filer kan vi spara en otrolig m¨angd ar-bete. 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 inneh˚alla kod-avsnitt som kallar en annan m-fil kan filer som utf¨or klart definierade uppgifter enkelt ˚ateranv¨andas n¨ar liknande problem skall l¨osas.

34 KAPITEL 4. KOMMA IG˚ANG MED OCTAVE 4.3.1 Editera m-filer

Det finns inget som s¨ager att du m˚aste skapa de m-filer du kommer att anv¨anda inne i Octave. I princip kan du starta vilken editor som helst, till exempel Emacs, Notepad++

etc., och i den skapa en m-fil som du sedan sparar p˚a disk, i text-format. Du kan sedan k¨ora den inifr˚an Octave, f¨orutsatt att filen sparas n˚agonstans i Octaves s¨okv¨ag. Oftast ¨ar det naturligtvis enklast att starta editeringen inifr˚an Octave. Detta kan g¨oras genom att i kommandof¨onstret skriva edit. N¨ar du g¨or detta s˚a ¨oppnas editorn Notepad++ i ett annat f¨onster i vilket du kan b¨orja skapa din m-fil.

4.3.2 Notepad++

Notepad++ fungerar p˚a ungef¨ar samma s¨att som de flesta andra editorer. I “Edit”-menyn har du tillg˚ang till kommandona “cut”, “copy” and “paste” som har de vanliga funktionerna av att klippa ut, kopiera och klistra in. Du kan ocks˚a s¨oka och byta ut text. I menyn “File”

kan du sedan v¨alja mellan

• New - ¨oppnar ett nytt tomt Notepad-f¨onster

• Open - ¨oppnar en redan existerande fil i ett nytt Notepad-f¨onster.

• Close - st¨anger Notepad-f¨onstret.

• Save - sparar inneh˚allet i Notepad-f¨onstret till en fil p˚a disken.

• Save As - sparar inneh˚allet i Notepad-f¨onstret till en nyd¨opt fil p˚a disken.

• Save all -sparar alla ¨oppna Notepad-flikar i varsin fil.

• Print - skriver ut inneh˚allet i Notepad-f¨onstret.

F¨or att t ex skapa en fil som s¨ager hej till oss n¨ar vi k¨or den skriver vi edit. Du f˚ar d˚a upp ett nytt f¨onster med titeln “Untitled”.

Du kan nu b¨orja skriva in din Octave-kod i f¨onstret, skriv t ex greetings = ‘Hello World’;

disp(greetings)

och spara sedan filen som Hej.m. p˚a l¨ampligt st¨alle.

4.3.3 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, oavsett vilken editor vi arbetar i, in i ”File” menyn och v¨aljer ”Save”. Om filen vi vill spara ¨ar nyskapad och inte har n˚agot namn s˚a kommer editorn 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.

4.3. M-FILER 35 4.3.4 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¨agen (se avsnitt 2.2.3)3 s˚a kommer de kommandon som finns i filen att utf¨oras. Prova:

>Hej

Hello World

4.3.5 Kommentarer

I princip ¨ar det ingen skillnad p˚a hur Octave 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 kommentarer.

Kommentarer inleds med ett procenttecken ”%” och f¨oljs av godtycklig text. N¨ar Octave utf¨or kommandon ignorerar programmet procenttecknet och vad som f¨oljer efter det. Syftet med kommentarer ¨ar att 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:

3Om det finns fler filer med samma namn i olika kataloger som finns i s¨okv¨agen s˚a v¨aljer Octave 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.

36 KAPITEL 4. KOMMA IG˚ANG MED OCTAVE

%---% 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.

Ett annat anv¨andningsomr˚ade f¨or kommentarer ¨ar att man vid fels¨okning genom att kom-mentera kan f˚a programmet att “hoppa ¨over” delar av koden. Man kan helt enkelt kom-mentera bort olika delar av ett program som inte fungerar tills felet f¨orsvinner. D˚a vet man i alla fall i vilket avsnitt felet finns.

4.3.6 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 Octave 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 Octave att skriva ”Hello 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 Octave. 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 10.2 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

4.3. M-FILER 37 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 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.

4.3.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 programmet skriver ut ‘pause’ i kommandof¨onstret. 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.

4.3.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 4.3.5 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 Octaves workspace. N¨asta g˚ang vi f¨ors¨oker k¨ora programmet med samma namn kommer Octave 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.

Det ¨ar ocks˚a viktigt n¨ar du namnger din filer att inte anv¨anda mellanslag i filnamnet. Ex-empel p˚a hur ett filnamn b¨or och inte b¨or se ut ser du nedan:

volym a.m - S˚a h¨ar f˚ar filen inte namnges!

volym a.m - S˚a h¨ar b¨or filen namnges!

38 KAPITEL 4. KOMMA IG˚ANG MED OCTAVE