Examples MAT1110. Øyvind Ryan

Like dokumenter
Examples plotting. Øyvind Ryan

MAT1110: Obligatorisk oppgave 2, V Løsningsforslag

1. Finn egenverdiene og egenvektorene til matrisen A = 2 1 A =

Fasit til utvalgte oppgaver MAT1110, uka 28/4-2/5

All examples. Øyvind Ryan

Fasit MAT102 juni 2016

UNIVERSITETET I OSLO

Løsningsforslag til prøveeksamen i MAT 1110, våren 2006

MAT 1110: Obligatorisk oppgave 1, V-07: Løsningsforslag

Noen MATLAB-koder. 1 Plotte en vanlig funksjon. Fredrik Meyer. 23. april 2013

Om plotting. Knut Mørken. 31. oktober 2003

Ikke-lineære ligningssystemer

1. (a) Finn egenverdiene og egenvektorene til matrisen A =

Fasit til eksamen i emnet MAT102 - Brukerkurs i matematikk II Mandag 21.september 2015

Obligatorisk oppgave 1

Løsningsforslag. Innlevering i BYFE/EMFE 1000 Oppgavesett 1 Innleveringsfrist: 14. september klokka 14:00 Antall oppgaver: 3.

Computational comments. Øyvind Ryan

Løsningsforslag: MAT 1110 Obligatorisk oppgave 2, V-12

Oppgaver og fasit til seksjon

Alle svar skal grunngis. Alle deloppgaver har lik vekt.

Oppgave 1 (25 %) - Flervalgsoppgaver

Oppgaver til seksjon med fasit

MAT 1110: Oblig 1, V-12, Løsningsforslag

Vær OBS på at svarene på mange av oppgavene kan skrives på flere ulike måter!

Fasit eksamen i MAT102 4/6 2014

MAT 1110: Bruk av redusert trappeform

UNIVERSITETET I OSLO

Løsningsforslag MAT102 Vår 2018

Løsningsforslag. og B =

Løsningsforslag MAT102 - v Jon Eivind Vatne

Egenverdier og egenvektorer

Matematikk Øvingsoppgaver i numerikk leksjon 6 Løsningsforslag

TMA4122/TMA4130 Matematikk 4M/4N Høsten 2010

5.5 Komplekse egenverdier

Oppgave x d 1.0 for n from 1 by 1 to 200 do x d sin x end do

Løsningsforslag. og B =

TMA Kræsjkurs i Matlab. Oppgavesett 1/3

Løsningsforslag Eksamen M001 Våren 2002

Bioberegninger - notat 4: Mer om sannsynlighetsmaksimering

Oppgave Iterasjonen ser ut til å konvergere sakte mot null som er det eneste fikspunktet for sin x.

Alle svar skal grunngis. Alle deloppgaver har lik vekt.

Prøve i Matte 1000 BYFE DAFE 1000 Dato: 03. mars 2016 Hjelpemiddel: Kalkulator og formelark. Alle svar skal grunngis. Alle deloppgaver har lik vekt.

Løsningsforslag til utvalgte oppgaver i kapittel 10

Øvingsforelesning i Matlab TDT4105

TMA4110 Matematikk 3 Eksamen høsten 2018 Løsning Side 1 av 9. Løsningsforslag. Vi setter opp totalmatrisen og gausseliminerer:

MAT1120 Plenumsregningen torsdag 26/8

Matematikk Øvingsoppgaver i numerikk leksjon 5 Løsningsforslag

dg = ( g P0 u)ds = ( ) = 0

Løsningsforslag. Oppgave 1 Gitt matrisene ] [ og C = A = 4 1 B = 2 1 3

MA2501, Vårsemestre 2019, Numeriske metoder for lineære systemer

Matematikk Øvingsoppgaver i numerikk leksjon 3. Løsningsforslag

Exercises population. Øyvind Ryan

MA1201 Lineær algebra og geometri Løsningsforslag for eksamen gitt 3. desember 2007

GeoGebra for Sinus 2T

Løsningsforslag til eksamen i MAT 1100 H07

Matlab-tips til Oppgave 2

MATLAB for MAT (revidert versjon våren 2008) Klara Hveberg og Tom Lindstrøm

Matematikk Øvingsoppgaver i numerikk leksjon 7 Løsningsforslag

Løsningsforslag. Innlevering i BYFE 1000 Oppgavesett 1 Innleveringsfrist: 10. oktober klokka 14:00 Antall oppgaver: 6. Oppgave 1

7 Egenverdier og egenvektorer TMA4110 høsten 2018

MA0002 Brukerkurs i matematikk B Vår 2016

Vektorligninger. Kapittel 3. Vektorregning

Newtons metode er en iterativ metode. Det vil si, vi lager en funksjon. F x = x K f x f' x. , x 2

UNIVERSITETET I OSLO

Prøve i Matte 1000 ELFE KJFE MAFE 1000 Dato: 02. desember 2015 Hjelpemiddel: Kalkulator og formelark

Løsninger for eksamen i MAT Lineær algebra og M102 - Lineær algebra, fredag 28. mai 2004, Oppgave 1. M s = = 1 2 (cofm 2) T.

1 Oppgave 1 Skriveoppgave Manuell poengsum. 2 Oppgave 2 Code editor Manuell poengsum. 3 Oppgave 3 Skriveoppgave Manuell poengsum

All exercises. Øyvind Ryan

Finne løsninger på ligninger numerisk: Newton-Raphson metoden og Fikspunktiterasjon MAT111, høsten 2017

Lineære likningssystemer og matriser

UNIVERSITETET I OSLO

Matematikk Øvingsoppgaver i numerikk leksjon 6. Løsningsforslag

MAT Prøveeksamen 29. mai - Løsningsforslag

UNIVERSITETET I OSLO

EKSAMEN I EMNET Løsning: Mat Grunnkurs i Matematikk I Mandag 14. desember 2015 Tid: 09:00 14:00

Eksamensoppgave i TMA4115 Matematikk 3

Matematikk Øvingsoppgaver i numerikk leksjon 5 Løsningsforslag

MAT-1004 Vårsemester 2017 Prøveeksamen

a) f(x) = 3 cos(2x 1) + 12 LF: Vi benytter (lineær) kjerneregel og får f (x) = (sin(7x + 1)) (sin( x) + x) sin(7x + 1)(sin( x) + x) ( sin(x) + x) 2 =

Alternativ II: Dersom vi ikke liker å stirre kan vi gå forsiktigere til verks. Først ser vi på komponentlikninga i x-retning

Øvingsforelesning i Matlab TDT4105

UNIVERSITETET I OSLO

SINUS R1, kapittel 5-8

Anbefalte oppgaver - Løsningsforslag

Ikke lineære likninger

Notat 4 - ST februar 2005

LO510D Lin.Alg. m/graf. anv. Våren 2005

MAT-INF 2360: Obligatorisk oppgave 3. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 5 for-løkker

Exercises plotting. Øyvind Ryan

Oblig 2 - MAT1120. Fredrik Meyer 23. september 2009 A =

UNIVERSITETET I OSLO

Matematikk Øvingsoppgaver i numerikk leksjon 11 Eulers metode. Løsningsforslag

MATLAB for MAT Klara Hveberg og Tom Lindstrøm

n=0 n=1 n + 1 Vi får derfor at summen er lik 1/2. c)

MAT1110. Obligatorisk oppgave 1 av 2

Oppgaver til seksjon med fasit

Til enhver m n matrise A kan vi knytte et tall, rangen til A, som gir viktig informasjon.

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Transkript:

Examples MAT1110 Øyvind Ryan 19. februar 2013

Example 0.1. Vi skal tegne grafen til f (x, y) = x 3 4y 2 over rektangelet x [ 3,3], y [ 5,5]. Vi lager først en oppdeling av de to intervallene vi er interessert i, ved å skrive r=-3:0.1:3; s=-5:0.1:5; (husk semikolon etter kommandoene, ellers vil du få lange tallremser som output!) Her har vi valgt å dele opp begge intervallene i skritt med lengde 0.1, men du kan godt velge en finere eller grovere oppdeling. Det kan være lurt å prøve en skikkelig grov oppdeling (f.eks. skrittlengde 0.5) en gang slik at du virkelig ser hvordan MATLAB tegner grafer. Neste skritt er å lage et rutenett av oppdelingene våre. Dette gjør vi med kommandoen >> [x,y]=meshgrid(r,s);} Vi kan nå definere funksjonen: >> z=x.^3-4*y.^2; (husk å bruke.-versjonene av de algebraiske operasjonene!) Dermed er vi klare til selve plottingen som utføres av kommandoen >> mesh(x,y,z) Grafen kommer opp i et eget figurvindu akkurat som for todimensjonale figurer, og ser ut som et fiskegarn med knuter i plottepunktene. Ved å gå inn på menyen i grafvinduet, kan du dreie flaten i rommet (aktiver musa ved å klikke på et ikon som symboliserer dreiing). Dette er ofte nødvendig for å få et godt inntrykk av hvordan grafen ser ut! Bruker du kommandoen surf(x,y,z) istedenfor mesh(x,y,z), vil MATLAB tegne grafen med fargelegging av hvert ruteelement. Det er ofte klargjørende når grafen varierer mye. Vil du se nivåkurvene istedenfor grafen, bytter du ut med kommandoen >> contour(x,y,z) Når du bruker contour på denne måten, velger MATLAB selv hvilke nivåkurver den skal tegne. MATLAB er ikke alltid flink til å finne de mest interessante nivåkurvene, og det kan også tenkes at vi er interessert i helt konkrete nivåer, som programmet umulig kan gjette på. Derfor hender det at du må hjelpe til ved å angi konkrete nivåer: Dersom vektoren v = (v 1, v 2,..., v n ) er lagt inn, vil kommandoen 2

>> contour(x,y,z,v) tvinge MATLAB til å tegne nivåkurvene med verdier v 1, v 2,..., v n. Vil du bare regulere antall nivåkurver, men ikke spesifisere verdiene, kan du bruke denne kommandoen >> contour(x,y,z,n) som får MATLAB til å tegne opp n nivåkurver. Med kommandoen clabel får du MATLAB til å skrive nivået til nivåkurvene på grafen. Prøv >> clabel(contour(x,y,z,12)) MATLAB vil normalt tegne nivåkurvene i forskjellige farger. Dette er nyttig på skjermen, men kan være mindre praktisk dersom du ønsker å lime figuren inn i et svart-hvitt dokument. Skriver du >> contour(x,y,z,8, k ) får du 8 nivåkurver tegnet i svart ( k er symbolet for svart farge). Ønsker du at MATLAB skal tegne nivåkurvene og grafen i samme plot, bruker du kommandoen >> meshc(x,y,z) Det finnes mange andre kommandoer du også kan bruke (og mange flere måter å modifisere kommandoene ovenfor på!). Skriv >> help graph3d for å få en oversikt. Example 0.2. Vi skal lage en fremstilling av vektorfeltet F(x, y) = x y i + x sin(x y) j over mengden 5 x 5, 3 y 3. Vi starter med å lage rutenettet. Vi bør ikke lage oppdelingen for fin, for da blir det vanskelig å se vektorene. Vi velger en rutelengde på 0.5: x=-5:0.5:5; y=-3:0.5:3; Vi lager så et rutenett av x og y. >> [x,y]=meshgrid(x,y); 3

Nå kan vi legge inn vektorfeltet: u=x.*y; v=x.*sin(x.*y); Dermed er vi klare til å lage figuren >> quiver(x,y,u,v) MATLAB svarer med figur 3 (se ovenfor). Example 0.3. La oss bruke MATLAB til å finne en strømningslinje for vektorfeltet i eksempel 1. Vi må først legge inn x, y, u og v på samme måte som ovenfor. I dette tilfellet kan det imidlertid være lurt å bruke et rutenett som er mindre grovt, så vi starter med sekvensen x=-5:0.05:5; y=-3:0.05:3; [x,y]=meshgrid(x,y); u=x.*y; v=x.*sin(x.*y); For å lage strømningslinjen som starter i punktet (1, 1) skriver vi nå >> streamline(x,y,u,v,1,-1) Hvis du taster inn den siste kommandoen på nytt med et annet startpunkt, f.eks. >> streamline(x,y,u,v,0.5,1) tegner MATLAB en ny strømningslinje i det samme figurvinduet. Det er også instruktivt å tegne inn vektorfeltet og strømningslinjene i samme figur (prøv!). Example 0.4. Vi skal bruke MATLAB til å tegne den parametriserte flaten Vi taster da: u=-5:.1:5; v=-5:.1:5; [U,V]=meshgrid(u,v); x=u+v; y=u-v; z=u.*v; surf(x,y,z) r(u, v) = (u + v)i + (u v)j + uv k, der 5 u, v 5 4

og MATLAB tegner flaten. Example 0.5. La oss også bruke MATLAB til å tegne en kuleflate med radius 3 og sentrum i origo. For å slippe for lange variabelnavn, bruker vi u for den variabelen som i kulekoordinater vanligvis heter φ og v for den som vanligvis heter θ. Kommandoen linspace(a,b,n) gir oss en vektor med n komponenter som begynner med a og ender med b. u=linspace(0,pi,100); v=linspace(0,2*pi,); [U,V]=meshgrid(u,v); x=3*sin(u).*cos(v); y=3*sin(u).*sin(v); z=3*cos(u); surf(x,y,z) axis( equal ) Husk kommandoen >> axis( equal ) som gir samme målestokk langs alle akser uten den ser kulen ut som en ellipsoide. Example 0.6. Et dyreslag har en levealder på fire år. Det første året er dyrene unger, det andre året er de ungdommer, det tredje året er de voksne og det fjerde året er de eldre. Av ungene overlever 50% til året etter, av ungdommene overlever 80% til året etter og av de voksne overlever 20% til året etter. En ungdom gir i gjennomsnitt opphav til 0.5 unger som blir født året etter, en voksen gir i gjennomsnitt opphav til 2 unger som blir født året etter, og et eldre dyr gir i gjennomsnitt opphav til 0.1 unge som blir født året etter. Vi antar at vi starter med dyr i hver aldersklasse, og ønsker å finne ut hvordan stammen utvikler seg. La x n, y n, z n og u n være henholdsvis antall unger, ungdommer, voksne og eldre i år n. Da er x n+1 = 0.5y n + 2z n + 0.1u n y n+1 = 0.5x n z n+1 = 0.8y n u n+1 = 0.2z n I tillegg vet vi at x 1 = y 1 = z 1 = u 1 =. Det er flere måter å angripe dette problemet på. La oss først se hva som skjer når vi bruker MATLAB til å regne ut utviklingen de 50 første årene. Vi lager m- filen function [x,y,z,u]=dyrestamme(a,b,c,d,n) 5

x(:,1)=[a;b;c;d] for n=1:n x(:,n+1)=[0 0.5 2 0.1; 0.5 0 0 0; 0 0.8 0 0; 0 0 0.2 0]*x(:,n); end Den neste kommandosekvensen får MATLAB til å plotte ut følgene i samme figur: [x,y,z,u]=dyrestamme(,,,,49); plot(x) hold on plot(y) plot(z) plot(u) Resultatet er figuren nedenfor der den øverste kurven gir antall unger, den nest øverste antall ungdommer, den tredje øverste antall voksne og den nederste antall eldre. Disse kurvene er ikke så lette å tolke. Det ser ut som de etter noen innledende svingninger går over i jevn vekst, og at fordelingen mellom de forskjellige aldersgruppene nærmer seg en likevekt. Men hvor kommer svingningene fra, hvor rask er veksten, og hvordan finner vi likevektsfordelingen mellom aldersgruppene?. La oss kjøre programmet en gang til med startverdier x 1 = 400, y 1 = 300, z 1 = 100, u 1 = 0. Resultatet ser du på figuren nedenfor, og i hovedtrekk ligner 6

det forbløffende på det vi fikk i stad; etter noen innledende svingninger går kurvene over i jevn vekst, og forholdet mellom aldersgruppene ligner på det vi fikk ovenfor. Vi skal nå se hvordan vi kan bruke egenverdier og egenvektorer til å forklare disse resultatene. Det første vi observerer, er at dersom vi innfører vektorene x n y n r n = z n u n så kan ligningssystemet ovenfor skrives der A er matrisen A = r n+1 = Ar n 0.5 2.1.5 0 0 0 0.8 0 0 0 0.2 0 Bruker vi denne formelen gjentatte ganger, får vi r n = A n 1 r 1 Legg merke til at siden vi kaller begynnelsesbestanden r 1 og ikke r 0, må A oppphøyes i n 1 og ikke n. Matematisk sett hadde det vært greiere å begynne med r 0 7

slik vi gjorde i forrige eksempel, men MATLAB begynner alltid nummereringer på 1, og vi har derfor valgt å holde oss til det siden vi MATLAB bruker såpass mye i dette eksemplet. La oss benytte MATLAB til å finne egenverdiene og egenvektorene til A: >> A=[0.5 2.1.5 0 0 0 0.8 0 0 0 0.2 0]; >> [u,v]=eig(a) u = Columns 1 through 3-0.8472 0.7917 0.7917-0.4151-0.2560-0.3675i -0.2560 + 0.3675i -0.3254-0.1405 + 0.3802i -0.1405-0.3802i -0.0638 0.0887-0.0231i 0.0887 + 0.0231i Column 4-0.0000 0.0006-0.0501 0.9987 v = Columns 1 through 3 1.0206 0 0 0-0.5053 + 0.7253i 0 0 0-0.5053-0.7253i 0 0 0 Column 4 0 0 8

0-0.0100 Vi har altså egenverdiene = 1.0206, λ 2 = 0.5053 + 0.7253i, λ 3 = 0.5053 0.7253i, λ 4 = 0.01 med tilhørende egenvektorer (vi bytter fortegn på den første av dem for å slippe minuser): v 1 = v 3 = 0.8472 0.4151 0.3254 0.0638, v 2 = 0.7917 0.2560 + 0.3675i 0.1405 0.3802i 0.0887 + 0.0231i 0.7917 0.2560 0.3675i 0.1405 + 0.3802i 0.0887 0.0231i, v 4 = 0 0.0006 0.0501 0.9987 Vi ser at de komplekse egenverdiene og egenvektorene er konjugerte av hverandre slik setning 4.10.4 sier. Vi ser også at egenverdiene er ordnet i avtagende rekkefølge: > λ 2 = λ 3 > λ 4. Siden egenverdiene er forskjellige, vet vi at v 1, v 2, v 3, v 4 danner en basis. Vi kan derfor skrive starttilstanden r 1 = som en lineærkombinasjon r 1 = = c 1v 1 + c 2 v 2 + c 3 v 3 + c 4 v 4 Vi skal bruke MATLAB til å finne koeffisientene c 1,c 2,c 3,c 4, men la oss først se hva som skjer når vi bruker A n 1 på ligningen ovenfor. Vi får r n = A n 1 r 1 = c 1 A n 1 v 1 + c 2 A n 1 v 2 + c 3 A n 1 v 3 + c 4 A n 1 v 4 = c 1 λ n 1 1 v 1 + c 2 λ n 1 2 v 2 + c 3 λ n 1 3 v 3 + c 4 λ n 1 4 v 4 Vi setter den største egenverdien λ1 n 1 utenfor en parentes ( ( ) n 1 ( ) n 1 ( ) n 1 ) r n = λ1 n 1 λ2 λ3 λ4 c 1 v 1 + c 2 v 2 + c 3 v 3 + c 4 v 4 9

( Siden har størst tallverdi av egenverdiene, vil alle faktorene λ2 ( λ4 ) n 1 gå mot null når n går mot uendelig. Det betyr at Definerer vi kan vi derfor skrive ( ( ) n 1 ( λ2 λ3 lim c 2 v 2 + c 3 n ) n 1 v 3 + c 4 ( λ4 ) n 1 v 4 ) = 0 ( ) n 1 ( ) n 1 ( ) n 1 λ2 λ3 λ4 σ(n) = c 2 v 2 + c 3 v 3 + c 4 v 4, r n = λ n 1 ( 1 c1 v 1 + σ(n) ) ) n 1, ( λ3 ) n 1, der σ(n) 0 når n. Skriver vi ut komponentene og setter in = 1.0206, får vi x n 0.8472 y n z n = 1.0206n 1( 0.4151 ) c 1 0.3254 + σ(n) u n 0.0638 Dette betyr at når n blir stor, er veksten bestemt av den største egenverdien = 1.0206, og fordelingen mellom komponentene er bestemt av den tilhørende egenvektoren v 1. Som du ser, minner disse resultatene om det vi fikk i Eksempel 1, men vi har fått med en vekstfaktor i tillegg. La oss nå finne konstantene c 1, c 2, c 3 og c 4. Dersom vi velger den opprinnelige begynnelsestilstanden r 1 = får vi ligningen = c 1 +c 3 0.8472 0.4151 0.3254 0.0638 + c 2 0.7917 0.2560 + 0.3675i 0.1405 0.3802i 0.0887 + 0.0231i 10 0.7917 0.2560 0.3675i 0.1405 + 0.3802i 0.0887 0.0231i + c 4 0 0.0006 0.0501 0.9987 +

Innfører vi matrisen 0.8472 0.7917 0.7917 0 0.4151 0.2560 0.3675i 0.2560 + 0.3675i 0.0006 D = 0.3254 0.1405 + 0.3802i 0.1405 0.3802i 0.0501 0.0638 0.0887 0.0231i 0.0887 + 0.0231i 0.9987 kan vi bruke MATLAB til å finne vektoren c 1 c 2 c = c 3 c 4 ved å taste >> c=d\r1 Vi får c 1 = 436.59, c 2 = 107.29 49.34i, c 3 = 107.29 + 49.34i, c 4 = 193.72. Legg merke til at koeffisientene c 2 og c 3 til de komplekse egenverdiene er konjugerte. Vi har ennå ikke forklart hvor svingningene i figuren kommer fra. Det viser seg at de kommer fra de komplekse egenverdiene. Skriver vi den komplekse egenverdien λ 2 på polarform λ 2 = re iθ, ser vi at λ n 1 2 = r n 1 e i (n 1)θ = r n 1( ) cos((n 1)θ) + i sin((n 1)θ) Cosinus- og sinus-leddene får uttrykket til å svinge, men i dette tilfellet vil svingningene dø ut etter hvert fordi r < 1 og r n 1 0 når n. Example 0.7. To dyreslag, et byttedyr og et rovdyr, lever i det samme området. Dersom det ett år er x n byttedyr og y n rovdyr i området, tenker man seg at antall dyr året etter er gitt ved x n+1 = ax n bx n y n y n+1 = c y n+1 + dx n y n der a,b,c,d er positive tall. Legg merke til logikken; kryssleddene x n y n representerer møter mellom byttedyr og rovdyr, og slike møter reduserer veksten av byttedyr, men bidrar til vekst i rovdyrbestanden. Hvis vi innfører funksjonen F : R 2 R 2 ved ( xn og lar x n = y n ( x F y ) ( ax bx y = c y + dx y ), ser vi at systemet ovenfor kan skrives som x n+1 = F(x n ). 11 )

Det er ikke lett å gjette hvordan et system av denne typen vil utvikle seg i tiden, så la oss bruke MATLAB som hjelpemiddel til å se på et spesielt tilfelle. Vi velger a = 1.01,b = 3 10 5,c = 0.98,d = 10 5. Følgende m-fil regner ut utviklingen når vi starter med m byttedyr og k rovdyr og gjennomfører N iterasjoner. Vær oppmerksom på at det er en liten forskyvning i nummereringen av leddene i følgen; i teoretisk arbeid får vi ofte penest uttrykk om vi begynner iterasjonen med punkt nummer 0 (altså x 0 som ovenfor), men i programmet nedenfor har vi tatt hensyn til MATLABs forkjærlighet for å la startpunktet være nummer 1 (og ikke nummer 0). function [x,y]=byttedyr(m,k,n) x=[m]; %med disse linjene forteller vi y=[k]; %MATLAB at iterasjonen starter i punktet (m,k) for n=1:n % starter løkken som utfører iterasjonene x(n+1)=1.01*x(n)-3*10^(-5)*x(n)*y(n); y(n+1)=0.98*y(n)+10^(-5)*x(n)*y(n); end %avslutter for-løkken Dersom vi ønsker å se grafisk på utviklingen når vi starter med 1000 byttedyr og hundre rovdyr, kan vi gi kommandoene [x,y]=byttedyr(1000,100,1000); plot(x) hold on plot(y, r ) Vi får dette resultatet: Figur 1: Utviklingen av byttedyr (øverst) og rovdyr (nederst). 12

Vi ser at bestandene følger et bølgemønster med klare topper og bunner. Logikken er ikke så vanskelig å forstå; til å begynne med er det relativt få rovdyr, og byttedyrbestanden vokser. Dette fører til gode betingelser for rovdyrbestanden som også begynner å vokse kraftig. Til slutt gjør rovdyrene så kraftig innhogg at byttedyrbestanden begynner å avta. Etter hvert fører dette til dårligere forhold for rovdyrene, og rovdyrbestanden begynner også å avta. Dette gir etter hvert bedre forhold for byttedyrene som begynner å ta seg opp igjen osv. Example 0.8. Definer en avbildning F : R 3 R 3 ved F (x, y, z) = x 8 y 2 + z 4 + 1 x 4 + z 4 + 2 x 2 + y 2 1 Her er Jacobi-matrisen F(x, y, z) = 1 8 1 1 2 4 1 1 4 0 4 1 1 2 2 0 Gradienten til F 1 er den første linjen i matrisen, altså F 1 (x, y, z) = 1 8 i 1 2 j + 1 4 k Tilsvarende er gradientene til F 2 og F 3 gitt av de neste linjene i matrisen F 2 (x, y, z) = 1 4 i + 1 4 k og F 3 (x, y, z) = 1 2 i + 1 2 j Uansett hvilke punkter vi evaluerer gradientene i, har vi dermed Dermed er F 1 2 + F 2 2 + F 3 2 = ( ) 1 2 ( = + 1 2 ( ) 1 2 ( ) 1 2 ( ) 1 2 ( ) 1 2 ( ) 1 2 + + + 0 8 2) 2 + + + + 0 2 = 4 4 4 2 2 = 61 64 61 61 F 1 2 + F 2 2 + F 3 2 = 64 = 8 < 1 13

og F er altså en kontraksjon og har et entydig fikspunkt. For å finne (en tilnærmet verdi for) fikspunktet, starter vi en iterasjon. Følgende MATLAB-program fikspunkt.m starter med punktet x 0 = (a,b,c) og gjennomfører N iterasjoner. Vær oppmerksom på den vanlige forskyvningen i nummereringen av punktene; i MATLAB-programmet lar vi startpunktet være (x 1, y 1, z 1 ). Husk også at vi kan gjøre programmet mer effektivt ved å gi x, y og z riktig lengde fra starten av (se bemerkningen etter eksempel 1 i seksjon 5.4). function x=fikspunkt(a,b,c,n) x=[a;b;c]; % forteller MATLAB at iterasjonen starter i (a,b,c) for n=1:n % starter for-løkken som utfører iterasjonene x(:,n+1)=[1/8-1/2+1/4; 1/4 0 1/4; 1/2 1 0]*x(:,n)+[1;2;-1]; end % avslutter for-løkken For å regne ut de første 10 verdiene med startpunkt x 0 = (0,0,0), gir vi nå kommandoen >> fikspunkt(0,0,0,9) Output er: x 0 = x 1 = x 2 = x 3 = x 4 = x 5 = x 6 = x 7 = x 8 = x 9 = 0.0000 1.0000-0.1250 0.3594 0.1074 0.2322 0.1696 0.9 0.1853 0.1931 y 0 = y 1 = y 2 = y 3 = y 4 = y 5 = y 6 = y 7 = y 8 = y 9 = 0.000 2.0000 2.0000 2.3438 2.3242 2.4077 2.4025 2.4234 2.4221 2.4273 z 0 = z 1 = z 2 = z 3 = z 4 = z 5 = z 6 = z 7 = z 8 = z 9 = 0.0000-1.0000 1.5000 0.9375 1.5234 1.3779 1.5238 1.4874 1.5238 1.5147 Vi ser at følgen x n ser ut til å stabilisere seg rundt (0.2,2.4,1.5), men at det fortsatt er ganske store fluktuasjoner. Vi gir derfor kommandoen >> fikspunkt(0,0,0,19) for også å få de neste ti verdiene. De er: x 10 = x 11 = x 12 = x 13 = x 14 = x 15 = x 16 = x 17 = x 18 = x 19 = 0.1892 0.1911 0.1902 0.1906 0.1904 0.1905 0.1905 0.1905 0.1905 0.1905 y 10 = y 11 = y 12 = y 13 = y 14 = y 15 = y 16 = y 17 = y 18 = y 19 = 2.4269 2.4282 2.4282 2.4285 2.4285 2.4286 2.4285 2.4286 2.4286 2.4286 z 10 = z 11 = z 12 = z 13 = z 14 = z 15 = z 16 = z 17 = z 18 = z 19 = 1.5238 1.5215 1.5238 1.5232 1.5238 1.5237 1.5238 1.5238 1.5238 1.5238 Nå ser vi en tydelig konvergens mot et fikspunkt med (tilnærmet) verdi (0.1905, 2.4286, 1.5239). Programmet fikspunkt.m er ganske primitivt; Blant annet må vi på forhånd bestemme hvor mange iterasjoner vi ønsker. Programmet er også avhengig av funksjon og dimensjon. En implementasjon som er uavhengig av disse tingene, og som i tillegg avbryter iterasjonen når man har fått en viss nøyaktighet, eller har kjørt et visst antall iterasjoner, er vist under: 14

function x=fikspunkt(f,x0) % Iterasjonene starter i x0 x=x0; epsilon=0.0000001; N=30; n=0; while norm(f(x)-x) > epsilon & n<=n x=f(x); n=n+1; end Leggmerke til at funksjonen returnerer kun siste iterasjon, den kaster bort de forrige iterasjonene. I mange tilfeller er dette greit, siden vi ofte bare er interessert i hva iterasjonene konvergerer mot. Definerer vi nå en anonym funksjon for funksjonen over så kan vi finne fikspunktet ved hjelp av følgende kode: fikspunkt(@(x)[x(1)/8-x(2)/2+x(3)/4+1;... x(1)/4+x(3)/4+2;... x(1)/2+x(2)-1],... [0;0;0]); Legg merke til de tre punktumene på slutten av hver linje, som brukes for å fortelle MATLAB at et uttrykk fortsetter på neste linje. Vi vil anvende dette flere ganger senere i boka, spesielt når en funksjon tar mange parametre, hver med lange navn eller uttrykk. Bruk av punktum på denne måten kan gjøre koden mer leselig, og forhindrer unøvendlig lange linjer. Splitter vi opp koden over flere linjer uten bruk av punktum vil MATLAB gi oss en feilmelding. Vi innledet med å si at dette er et ganske dårlig eksempel. Grunnen er at vi kunne ha funnet fikspunktet direkte ved å løse ligningssystemet F(x, y, z) = (x, y, z) ved regning. Dette er et lineært ligningssystem som er lett å løse med metodene i forrige kapittel. Metoden ovenfor har imidlertid også sine fordeler; vi har vist at fikspunktet er tiltrekkende (dvs. at iterasjoner av F alltid konvergerer). Det viser seg også at når man får store lineære ligningssystemer med tusenvis av ligninger og ukjente, så er det ofte raskere å løse dem ved en eller annen form for iterasjon enn ved radoperasjoner. Example 0.9. Vi skal bruke Newtons metode til å finne en løsning av ligningssystemet x 2 y + 1 = 0 e x + y = 0 15

Sagt på en annen måte skal vi finne et nullpunkt for funksjonen ( x 2 ) y + 1 F(x, y) = e x + y Denne funksjonen har Jacobi-determinant ( F 2x y x 2 ) (x, y) = e x 1 Lar vi x 0 = ( x0 y 0 ) ( x1, x 1 = y 1 ) ( x2, x 2 = y 2 ),... være en følge som fremkommer når vi bruker Newtons metode på F, ser vi at iterasjonsformelen x n+1 = x n F (x n ) 1 F(x n ) kan skrives ( xn+1 y n+1 ) ( xn = y n ) ( 2xn y n xn 2 e x n 1 ) 1 ( x 2 n y n + 1 e x n + y n ) For å regne ut punktene i følgen skriver vi et lite MATLAB-program. Legg ( ) xn merke til at variablen u alltid inneholder det siste punktet x n = vi har regnet ut, mens variablene x og y lagrer hele listen av x- og y-koordinater. Legg også merke til at vi bruker kommandoen A\v istedenfor A 1 v for å spare regnearbeid (dette er mer effektivt enn å tvinge MATLAB til å regne ut A 1 ). function x=newtonfler(a,b,n) x=zeros(2,n); % sørger for at x har "riktig" lengde x(:,1)=[a;b]; % setter koordinatene til startpunktet for n=1:n A=[2*x(1,n)*x(2,n) x(1,n)^2;exp(x(1,n)) 1]; %setter A lik Jacobi-matrisen v=[x(1,n)^2*x(2,n)+1;exp(x(1,n))+x(2,n)]; %setter v lik funksjonsverdien x(:,n+1)=x(:,n)-a\v; % Utfører iterasjonen end For å kjøre programmet med startpunkt ( 0.7, 2.5), gir vi kommandoen >> [x,y]=newtonfler(-.7,-2.5,20); Vi kan få ut x- og y-verdiene ved å skrive henholdsvis >> x og >> y. Tabellen nedenfor viser de første verdiene: y n 16

x 0 = x 1 = x 2 = x 3 = x 4 = x 5 = x 6 = x 7 = x 8 = x 9 = x 10 = -0.7000-0.9323-2.7167-2.4802 1.9425 1.0409 0.5810 0.7475 0.7056 0.7035 0.7035 y 0 = y 1 = y 2 = y 3 = y 4 = y 5 = y 6 = y 7 = y 8 = y 9 = y 10 = -2.5000-0.3812 0.3088-0.0817-0.4540-0.6865-1.5295-2.0855-2.0233-2.0208-2.0207 Følgen ser altså ut til å konvergere mot et nullpunkt med koordinater tilnærmet lik (0.7035, 2.0207) (de neste tallene i utskriften bekrefter dette inntrykket). For å få bedre oversikt hvordan følgen oppfører seg, kan vi plotte den med kommandoen >> plot(x,y). Figur 1: Konvergens av Newtons metode Resultatet ser du i figur 1. Legg merke til at de siste skrittene er så små at du ikke kan se dem på figuren. Example 0.10. Vi skal tegne grafen til f (x, y) = x 3 4y 2 over rektangelet x [ 3,3], y [ 5,5]. Vi lager først en oppdeling av de to intervallene vi er interessert i, ved å skrive r=-3:0.1:3; s=-5:0.1:5; (husk semikolon etter kommandoene, ellers vil du få lange tallremser som output!) Her har vi valgt å dele opp begge intervallene i skritt med lengde 0.1, men du kan godt velge en finere eller grovere oppdeling. Det kan være lurt å prøve en skikkelig grov oppdeling (f.eks. skrittlengde 0.5) en gang slik at du virkelig ser hvordan MATLAB tegner grafer. Neste skritt er å lage et rutenett av oppdelingene våre. Dette gjør vi med kommandoen >> [x,y]=meshgrid(r,s);} Vi kan nå definere funksjonen: >> z=x.^3-4*y.^2; 17

(husk å bruke.-versjonene av de algebraiske operasjonene!) Dermed er vi klare til selve plottingen som utføres av kommandoen >> mesh(x,y,z) Grafen kommer opp i et eget figurvindu akkurat som for todimensjonale figurer, og ser ut som et fiskegarn med knuter i plottepunktene. Ved å gå inn på menyen i grafvinduet, kan du dreie flaten i rommet (aktiver musa ved å klikke på et ikon som symboliserer dreiing). Dette er ofte nødvendig for å få et godt inntrykk av hvordan grafen ser ut! Bruker du kommandoen surf(x,y,z) istedenfor mesh(x,y,z), vil MATLAB tegne grafen med fargelegging av hvert ruteelement. Det er ofte klargjørende når grafen varierer mye. Vil du se nivåkurvene istedenfor grafen, bytter du ut med kommandoen >> contour(x,y,z) Når du bruker contour på denne måten, velger MATLAB selv hvilke nivåkurver den skal tegne. MATLAB er ikke alltid flink til å finne de mest interessante nivåkurvene, og det kan også tenkes at vi er interessert i helt konkrete nivåer, som programmet umulig kan gjette på. Derfor hender det at du må hjelpe til ved å angi konkrete nivåer: Dersom vektoren v = (v 1, v 2,..., v n ) er lagt inn, vil kommandoen >> contour(x,y,z,v) tvinge MATLAB til å tegne nivåkurvene med verdier v 1, v 2,..., v n. Vil du bare regulere antall nivåkurver, men ikke spesifisere verdiene, kan du bruke denne kommandoen >> contour(x,y,z,n) som får MATLAB til å tegne opp n nivåkurver. Med kommandoen clabel får du MATLAB til å skrive nivået til nivåkurvene på grafen. Prøv >> clabel(contour(x,y,z,12)) MATLAB vil normalt tegne nivåkurvene i forskjellige farger. Dette er nyttig på skjermen, men kan være mindre praktisk dersom du ønsker å lime figuren inn i et svart-hvitt dokument. Skriver du >> contour(x,y,z,8, k ) får du 8 nivåkurver tegnet i svart ( k er symbolet for svart farge). Ønsker du at MATLAB skal tegne nivåkurvene og grafen i samme plot, bruker du kommandoen 18

>> meshc(x,y,z) Det finnes mange andre kommandoer du også kan bruke (og mange flere måter å modifisere kommandoene ovenfor på!). Skriv >> help graph3d for å få en oversikt. Example 0.11. Vi skal løse ligningssystemet Den utvidede matrisen er B = 2x y + 3z + u + v = 2 3x + y z + 2u v = 3 x 2y + 4z + u + 2v = 4 2 1 3 1 1 2 3 1 1 2 1 3 1 2 4 1 2 4 og putter vi denne inn i MATLAB og bruker rref, får vi >> B=[2-1 3 1 1 2 3 1-1 2-1 3-1 -2 4 1 2 4]; >> C=rref(B) C = 1.0000 0 0.4000 0 0-0.5000 0 1.0000-2.0 0-1.0000-0.5000 0 0 0 1.0000 0 2.5000 Den reduserte trappeformen er altså C = 1 0 0.4 0 0 0.5 0 1 2.2 0 1 0.5 0 0 0 1 0 2.5 Vi ser at pivotsøylene er søyle 1, 2 og 4, og at de frie variablene er z (som korresponderer til søyle 3) og v (som korresponderer til søyle 5). Vi kan derfor velge z 19

og v fritt og løse for de andre variablene. Det er lettest å gjøre dette hvis vi først skriver opp ligningssystemet til C : Vi ser at løsningene er gitt ved der z og v kan velges fritt. x + 0.4z = 0.5 y 2.2z v = 0.5 u = 2.5 x = 0.5 0.4z y = 0.5 + 2.2z + v z = z u = 2.5 v = v 20