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