I denne forelesningen skal vi se på mer datatekniske ting knyttet til lagring og programmering. Ønsker du å lagre resultatene av en MATLAB-kjøring, lage egne programfiler eller bruke gamle programmer, må du stå i riktig katalog (mappe). Hvilken katalog du står i, ser du i det lille vinduet på toppen av MATLAB-vinduet. Her kan du enten taste inn hele stien til den katalogen du vil bruke, eller du kan man�vrere deg opp og ned i filsystemet ved hjelp av knottene ved siden av vinduet. Dette er en viktig start - MATLAB er ikke spesielt flink til å velge rigtig default-katalog! For å ta vare på en MATLAB-kjøring slik at du kan redigere den etterpå (slik jeg har gjort med denne filen), starter du en "dagboksfil" ved å skrive "diary filnavn". Denne filen heter Sophus2, så jeg startet kjøring med å skrive diary Sophus2 La oss først se på hvordan vi kan lagre et bilde. Først lager vi en figur med kommandoene x=linspace(-2*pi,2*pi,500); y=x.*sin(x); plot(x,y) Vi kan nå lagre figuren ved å bruke "save as"-muligheten i menyene. Du kan velge mellom forskjellige formater. Default-formatet er MATLABs eget figurformat med fil-forlengelsen .fig. Skal du lime figuren inn i et tekstdokument, kan det være lurt å bruke et mer standard format som .eps eller .jpg. La oss nå se hvordan vi kan lage programmer i MATLAB. Det går an å programmere i selve kommandovinduet (se MATLAB-heftet), men som regel lønner det seg å lage programmene i egne filer, såkalte m-filer. Disse er både lettere å redigere og greie å lagre til senere bruk. Du kan lage m-filer i enhver teksteditor (IKKE bruk Word og lignende programmer som lagrer mer enn ren tekst!), men det greiest er å bruke MATLABs innebygde editor. Du åpner en ny m-fil ved å dra ned file-menyen og velge "M-file" under "New file". Det kommer opp et nytt vindu der du kan skrive programmet ditt. Vi skal først lage et enkelt program som subtraherer to tall. I vår nye m-fil skriver vi: function c=sub(a,b) c=a-b; (dette er hele filen!). Begynnelsen "function" er obligatorisk; den forteller MATLAB at vi lager en funksjonsfil som på bakgrunn av input-variable (her a og b), beregner noen output-variable (her c). En m-fil må alltid ha filforlengelsen .m og ligge i den katalogen som MATLAB står. Bruker du MATLAB-editoren går dette automatisk, men bruker du en annen editor, må du sørge for disse tingene selv. MATLAB-editoren sørger også automatisk for riktig navn på filen ovenfor - den blir hetende sub.m Når programmet er laget og arkivert, kan vi ta det i bruk. I kommandovinduet til MATLAB kan vi nå f.eks. skrive clear sub c=sub(7,4); c c = 3 sub(31,257) ans = -226 Legg merke til de variabeltilordningene vi lager i m-filen er lokale og ikke gjelder når vi går tilbake til kommandovinduet. Ønsker vi at output skal hete c, må vi derfor definere c=sub(7,3) i kommandovinduet, og ikke tro at dette skjer automatisk fordi vi har kommandoen c=sub(a,b) i m-filen. Vi lager nå et litt mer komplisert program for å studere Fibonacci-lignende følger, dvs. følger der x(1) og x(2) er gitt, og der vi kan beregne resten av følgen ved rekursjonsformelen x(n)=x(n-1)+x(n-2). Vi åpner en ny m-fil og skriver function x=fib(a,b,N) x(1)=a; x(2)=b; for n=3:N x(n)=x(n-1)+x(n-2); end Denne filen beregner x(1),x(2), x(3),...., x(N) når vi angir startverdiene x(1)=a, x(2)=b og antall ledd N. Legg forøvrig merke til at jeg har skrevet semikolon etter kommandoene i m-filen - det er som regel lurt for å unngå å få all verdens merkelig output når man kjører filen. For ø fø de vanlige Fibonacci-tallene (for a=b=1), skriver vi nø x=fib(1,1,20); x x = Columns 1 through 3 1 1 2 Columns 4 through 6 3 5 8 Columns 7 through 9 13 21 34 Columns 10 through 12 55 89 144 Columns 13 through 15 233 377 610 Columns 16 through 18 987 1597 2584 Columns 19 through 20 4181 6765 Vi kan også starte med andre verdier: y=fib(2,-34,25) y = Columns 1 through 3 2 -34 -32 Columns 4 through 6 -66 -98 -164 Columns 7 through 9 -262 -426 -688 Columns 10 through 12 -1114 -1802 -2916 Columns 13 through 15 -4718 -7634 -12352 Columns 16 through 18 -19986 -32338 -52324 Columns 19 through 21 -84662 -136986 -221648 Columns 22 through 24 -358634 -580282 -938916 Column 25 -1519198 Filen ovenfor har bare ett output, nemlig x. Ofte ønsker vi flere output-variable. Dette kan vi ordne med klammeparenteser []. I dette neste eksemplet viser vi dette ved ikke bare å beregne følgen av Fibonacci-tall x, men også en annen følge y som angir forholdet mellom hvert Fibonacci-tall og det foregående. Programmet ser slik ut (y(1) blir gitt en tilfeldig verdi for å få prosessen igang): function [x,y]=fib2(a,b,N) x(1)=a; x(2)=b; y(1)=1; y(2)=b/a; for n=3:N x(n)=x(n-1)+x(n-2); y(n)=x(n)/x(n-1); end For å ta vare på både x-en og y-en, er det nå lurt å gi denne kommandoen i kommandovinduet: [x,y]=fib2(1,1,20); Deretter kan vi få fatt i x og y: x x = Columns 1 through 3 1 1 2 Columns 4 through 6 3 5 8 Columns 7 through 9 13 21 34 Columns 10 through 12 55 89 144 Columns 13 through 15 233 377 610 Columns 16 through 18 987 1597 2584 Columns 19 through 20 4181 6765 y y = Columns 1 through 4 1.0000 1.0000 2.0000 1.5000 Columns 5 through 8 1.6667 1.6000 1.6250 1.6154 Columns 9 through 12 1.6190 1.6176 1.6182 1.6180 Columns 13 through 16 1.6181 1.6180 1.6180 1.6180 Columns 17 through 20 1.6180 1.6180 1.6180 1.6180 Vi ser at y ser ut til å nærme seg en grenseverdi rundt 1.6180. La oss undersøke dette med andre startverdier: [u,v]=fib2(-3,17,20); v v = Columns 1 through 4 1.0000 -5.6667 0.8235 2.2143 Columns 5 through 8 1.4516 1.6889 1.5921 1.6281 Columns 9 through 12 1.6142 1.6195 1.6175 1.6182 Columns 13 through 16 1.6180 1.6181 1.6180 1.6180 Columns 17 through 20 1.6180 1.6180 1.6180 1.6180 Vi kan også plotte v for å studere dette grafisk: plot(v) Vårt siste program beregner N-potensen til en 2-ganger-2-matrise. Her er programmet: function B=matrise(a,b,c,d,N) A=[a b;c d]; B=[1 0;0 1]; for n=1:N B=A*B; end Kommandoen B=matrise(a,b,c,d,N) vil nå produsere N-te potensen til matrisen A=[a b�c d]. Her er et par eksempler: B=matrise(2,-1,3,4,2); B = 1 -6 18 13 B=matrise(2,-1,3,4,3); B = -16 -25 75 34 B=matrise(2,-1,3,4,19); For å slå av dagboken, skriver vi til slutt diary off Ombestemmer du deg og vil skrive mer i samme dagboksfil, kan du slå den på igjen ved å skrive diary on