Referat fra MATLAB-forelesning 23/1-08: La oss f?rst se hvordan vi kan bruke MATLAB som kalkulator: 2+3 ans = 5 2*3 ans = 6 2^3 ans = 8 OBS: "Opph?yd i"-tasten ^kan v?re brysom i MATLAB. P? noen maskiner m? du sl? et mellomrom etter at du har brukt tasten, p? andre m? du sl? den inn to ganger etter hverandre. Desperasjonsl?sningen er ? skifte til amerikansk tastatur. Vi kan ogs? bruke MATLAB til ? regne ut funksjonsverdier: sin(4) ans = -0.7568 exp(3) ans = 20.0855 Arcusfunksjonene har en litt uvanlig forkortelse: atan(2) ans = 1.1071 V?r gamle venn pi er lett ? finne: pi ans = 3.1416 ?nsker du flere (synlige) desimaler, kan du skrive: format long pi ans = 3.14159265358979 og vil du ha bare to, skriver du format bank pi ans = 3.14 Tilbake til normalen kommer du med format short Det er greit ? definere st?rrelser: a=2.132 a = 2.1320 ?nsker du at MATLAB ikke skal vise resultatet av kommandoen, skriver du et semikolon etter: b=4.564; Vi kan n? utf?re beregninger med a og b p? denne m?ten a*b ans = 9.7304 a/b ans = 0.4671 MATLAB er sv?rt glad i matriser (programmet ble opprinnelig utviklet som et undervisningsredskap i line?r algebra). Du kan laste inn en matrise p? denne m?ten: A=[3 -1 4 5 2 7 4 2 9] A = 3 -1 4 5 2 7 4 2 9 Matriseopersjoner er n? lette ? utf?re. Her er invertering: inv(A) ans = 0.1081 0.4595 -0.4054 -0.4595 0.2973 -0.0270 0.0541 -0.2703 0.2973 S?ylevektorer er matriser med bare en s?yle: x=[1 -2 3] x = 1 -2 3 Vi kan n? multiplisere matriser og vektorer: A*x ans = 17 22 27 Vi kan ogs? definere matriser ved ? skrive semikolon mellom linjene: B=[-1 3 4;2 5 4;7 -6 3] B = -1 3 4 2 5 4 7 -6 3 N? kan vi multiplisere matrisene v?re begge veier: A*B ans = 23 -20 20 48 -17 49 63 -32 51 B*A ans = 28 15 53 47 16 79 3 -13 13 I tillegg til vanlige matriseoperasjoner kan MATLAB utf?re komponentvise operasjoner. Disse markeres med et punktum foran det vanlige kommandonavnet, f.eks .* og ./ La oss f?rste laste inn et par mindre matriser vi kan bruke kommandoene p?: A=[2 3;4 -2]; B=[4 7;-3 2]; Vi kan n? multiplisere A og B komponentvis p? denne m?ten: A.*B ans = 8 21 -12 -4 Komponentvis divisjon g?r ogs? an: A./B ans = 0.5000 0.4286 -1.3333 -1.0000 Til om med eksponensiering g?r greit: A.^B ans = 1.0e+003 * 0.0160 2.1870 0.0000 0.0040 Vi kan ogs? bruke funksjoner komponentvis: sin(A) ans = 0.9093 0.1411 -0.7568 -0.9093 La oss se p? et annet tema - hvordan vi lager lister av tall. F?lgende kommando lager en vektor best?ende av alle heltall fra 1 til 100: x=1:100 x = Columns 1 through 10 1 2 3 4 5 6 7 8 9 10 Columns 11 through 20 11 12 13 14 15 16 17 18 19 20 Columns 21 through 30 21 22 23 24 25 26 27 28 29 30 Columns 31 through 40 31 32 33 34 35 36 37 38 39 40 Columns 41 through 50 41 42 43 44 45 46 47 48 49 50 Columns 51 through 60 51 52 53 54 55 56 57 58 59 60 Columns 61 through 70 61 62 63 64 65 66 67 68 69 70 Columns 71 through 80 71 72 73 74 75 76 77 78 79 80 Columns 81 through 90 81 82 83 84 85 86 87 88 89 90 Columns 91 through 100 91 92 93 94 95 96 97 98 99 100 Vi kan operere komponentvis p? denne listen: y=x.^2 y = Columns 1 through 5 1 4 9 16 25 Columns 6 through 10 36 49 64 81 100 Columns 11 through 15 121 144 169 196 225 Columns 16 through 20 256 289 324 361 400 Columns 21 through 25 441 484 529 576 625 Columns 26 through 30 676 729 784 841 900 Columns 31 through 35 961 1024 1089 1156 1225 Columns 36 through 40 1296 1369 1444 1521 1600 Columns 41 through 45 1681 1764 1849 1936 2025 Columns 46 through 50 2116 2209 2304 2401 2500 Columns 51 through 55 2601 2704 2809 2916 3025 Columns 56 through 60 3136 3249 3364 3481 3600 Columns 61 through 65 3721 3844 3969 4096 4225 Columns 66 through 70 4356 4489 4624 4761 4900 Columns 71 through 75 5041 5184 5329 5476 5625 Columns 76 through 80 5776 5929 6084 6241 6400 Columns 81 through 85 6561 6724 6889 7056 7225 Columns 86 through 90 7396 7569 7744 7921 8100 Columns 91 through 95 8281 8464 8649 8836 9025 Columns 96 through 100 9216 9409 9604 9801 10000 Summen av de hundre f?rste kvadrattallene kan vi n? finne slik: sum(y) ans = 338350 Hvis vi ?nsker ? liste opp hvert tredje tall fra 1 til 100, skriver vi (det midterste tallet angir skrittlengden): x=1:3:100 x = Columns 1 through 10 1 4 7 10 13 16 19 22 25 28 Columns 11 through 20 31 34 37 40 43 46 49 52 55 58 Columns 21 through 30 61 64 67 70 73 76 79 82 85 88 Columns 31 through 34 91 94 97 100 Neste tema er graftegning. Plotteprogremmet i MATLAB er laget for ? trekke rette linjestykker gjennom en sekvens av punkter. Vi legger f?rst inn x-verdiene til punktene vi er interessert i: x=[1 2 4 8]; og deretter y-verdiene til de samme punktene: y=[4 -2 3 6]; Den neste kommandoen trekker n? linjestykker mellom punktene (1,1), (2,-2), (4,3) og (8,6) plot(x,y) Figuren kommer opp i et eget vindu og synes ikke i denne filen. Skriver du bare plot(y) plotter MATLAB plot(x,y) der x er defaultverdien (1,2,3,4). La oss n? se hvordan vi kan bruke plot-kommandoen til ? tegne funksjonsgrafer. Vi lager f?rst en oppdeling av den delen av x-aksen vi er interessert i: x=0:0.1:1; S? legger vi inn funksjonsuttrykket. Husk ? bruke komponentvise operasjoner! y=x.^2; N? kan vi plotte funksjonen: plot(x,y) Vil vi ha et annet vindu eller en annen oppl?sning, m? vi begynne p? nytt: x=-1:0.01:1; y=x.^2; plot(x,y) Vil vi tegne en ny graf i det samme vinduet, bruker vi kommandoen: hold on Kommandoene z=sin(x); plot(x,z) vil n? tegne en ny graf i det samme vinduet. S? lenge "hold on"-kommandoen gjelder, vil alle grafer komme opp? hverandre i det samme vinduet. For ? sl? den av skriver du: hold off Hvis vi vil plotte de to grafene p? nytt, men ha den siste i r?dt, gir vi kommandoene: plot(x,y) hold on plot(x,z,'r') Vil vi ha samme enhet p? begge aksene, skriver vi axis('equal') og figuren vil justere seg. F?r vi ser p? funksjoner av to variable, "frigj?r" vi figurvinduet: hold off F?r vi kan tegne grafen til funksjoner av to variable, m? vi definere en opppdeling av x- og y-aksen. Kommandoen "linspace" kan brukes til dette: x=linspace(0,2*pi,100); men vi kan selvf?lgelig ogs? bruke v?r gamle metode: y=0:0.01:1; N? som vi har delt opp x- og y-aksen, bruker vi denne kommandoen til ? lage et rutenett: [x,y]=meshgrid(x,y); N? kan vi definere funksjonen: z=x.*sin(x.*y); og utf?re plottet: mesh(x,y,z) Du kan bruke musa til ? snurre p? grafen, men du m? aktivisere den f?rst ved ? klikke p? "rotasjonsikonet" i bildemenyen.