TMV151/181 Matematisk analys i en variabel M/Td, 2013 MATLAB NUMERISK LÖSNING AV ORDINÄRA DIFFERENTIALEKVATIONER

Relevanta dokument
Ordinära differentialekvationer (ODE) 1 1

Laboration 2 Ordinära differentialekvationer

System av ordinära differentialekvationer

Ordinära differentialekvationer

Ordinära differentialekvationer,

Föreläsningen ger en introduktion till differentialekvationer och behandlar stoff från delkapitel 18.1, 18.3 och 7.9 i Adams. 18.

Matematisk analys för ingenjörer Matlabövning 3 Numerisk lösning av differentialekvationer

Matlab övningsuppgifter

LAB 4. ORDINÄRA DIFFERENTIALEKVATIONER. 1 Inledning. 2 Eulers metod och Runge-Kuttas metod

Laboration 4. Numerisk behandling av integraler och begynnelsevärdesproblem

Laboration 4. Numerisk behandling av integraler och begynnelsevärdesproblem

Tentamen, del 2 Lösningar DN1240 Numeriska metoder gk II F och CL

TMV225 Inledande Matematik M

Ordinära differentialekvationer,

ODE av andra ordningen, och system av ODE

Laboration 1, M0039M, VT16

Ordinära differentialekvationer fortsättning

LÖSNINGSFÖRSLAG TILL TENTAMEN 2 SF1664

Lösningsanvisningar till vissa av de icke obligatoriska workout-uppgifterna i Beräkningsvetenskap II

Sammanfattning (Nummedelen)

Teorifrågor. 6. Beräkna konditionstalet för en diagonalmatris med diagonalelementen 2/k, k = 1,2,...,20.

Numeriska metoder, grundkurs II. Dagens program. Gyllenesnittminimering, exempel Gyllenesnittetminimering. Övningsgrupp 1

TENTAMEN I GRUNDKURS I NUMERISKA METODER - DEL 20

R AKNE OVNING VECKA 1 David Heintz, 31 oktober 2002

MMA132: Laboration 2 Matriser i MATLAB

f(x + h) f(x) h f(x) f(x h) h

Teknisk beräkningsvetenskap I 5DV154

Laboration 1 i SF1544: Öva på Matlab och konstruera en optimal balk Avsikten med denna laboration är att:

LÖSNINGSFÖRSLAG TILL TENTAMEN 2 SF1664

Repetitionsfrågor: 5DV154 Tema 4: Förbränningsstrategier för raketer modellerade som begynnelsevärdesproblem

TAIU07 Matematiska beräkningar med Matlab

LABORATION 2. Trapetsregeln, MATLAB-funktioner, ekvationer, numerisk derivering

Laboration 6. Ordinära differentialekvationer och glesa system

Numeriska metoder för ODE: Teori

Anteckningar i Matematisk analys i en variabel

Teknisk Beräkningsvetenskap I Tema 3: Styvhetsmodellering av mjuk mark med icke-linjära ekvationer

Newtons metod och arsenik på lekplatser

Laboration 2 M0039M, VT2016

Om existens och entydighet av lösningar till ordinära differentialekvationer

LABORATION cos (3x 2 ) dx I =

Omtentamen i DV & TDV

Laboration 3 Numerisk Analys

DIFFERENTIALEKVATIONER. INLEDNING OCH GRUNDBEGREPP

0.31 = f(x 2 ) = b 1 + b 2 (x 3 x 1 ) + b 3 (x 3 x 1 )(x 3 x 2 ) = ( ) + b 3 ( )(

Lösningsanvisningar till de icke obligatoriska workoutuppgifterna

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Envariabelanalys 5B1147 MATLAB-laboration Derivator

Matematisk analys för ingenjörer Matlabövning 2 Numerisk ekvationslösning och integration

Linjära system av differentialekvationer

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

TATA42: Föreläsning 7 Differentialekvationer av första ordningen och integralekvationer

6. Temperaturen u(x) i positionen x av en stav uppfyller värmeledningsekvationen. u (x) + u(x) = f(x), 0 x 2, u(0) = 0 u(2) = 1,

FMNF15 HT18: Beräkningsprogrammering Numerisk Analys, Matematikcentrum

Tentamen i Beräkningsvetenskap I (nya versionen), 5.0 hp, Del A

d dx xy ( ) = y 2 x, som uppfyller villkoret y(1) = 1. x, 0 x<1, y(0) = 0. Bestäm även y( 2)., y(0) = 0 har entydig lösning.

DIFFERENTIALEKVATIONER. INLEDNING OCH GRUNDBEGREPP

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Tentamen, del 2 DN1240 Numeriska metoder gk II för F

SF1633, Differentialekvationer I Tentamen, torsdagen den 7 januari Lösningsförslag. Del I

TANA17 Matematiska beräkningar med Matlab

Omtentamen i DV & TDV

TMA226 datorlaboration

Denna föreläsning. DN1212 Numeriska metoder och grundläggande programmering FN Differentialekvationer. Repetition av FN5 (GNM kap 6.

Veckans teman. Repetition av ordinära differentialekvationer ZC 1, 2.1-3, 4.1-6, 7.4-6, 8.1-3

Euler-Mac Laurins summationsformel och Bernoulliska polynom

Kurs DN1215, Laboration 3 (Del 1): Randvärdesproblem för ordinära differentialekvationer

Konvergens för iterativa metoder

Linjärisering, Jacobimatris och Newtons metod.

Tentamen i Beräkningsvetenskap I/KF, 5.0 hp,

Newtons metod. 1 Inledning. 2 Newtons metod. CTH/GU LABORATION 6 MVE /2013 Matematiska vetenskaper

) + γy = 0, y(0) = 1,

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Inlämningsuppgift 4 NUM131

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April klockan

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Newtons metod. 1 Inledning. CTH/GU LABORATION 3 MVE /2014 Matematiska vetenskaper

Två gränsfall en fallstudie

DATORLABORATION FÖR KURSEN ENVARIABELANALYS 2

4 Numerisk integration och av differentialekvationer

TANA17 Matematiska beräkningar med Matlab

Attila Szabo Niclas Larson Gunilla Viklund Mikael Marklund Daniel Dufåker. GeoGebraexempel

Egenvärdesproblem för matriser och differentialekvationer

Linjärisering och Newtons metod

Exempel ode45 parametrar Miniprojekt 1 Rapport. Problemlösning. Anastasia Kruchinina. Uppsala Universitet. Januari 2016

Tentamen del 2 SF1511, , kl , Numeriska metoder och grundläggande programmering

SF1625 Envariabelanalys Lösningsförslag till tentamen DEL A

SF1545 Laboration 1 (2015): Optimalt sparande

Tentamen i Beräkningsvetenskap II, 5.0 hp,

TENTAMEN I GRUNDKURS I NUMERISKA METODER - DEL 2

DIFFERENTIALEKVATIONER. INLEDNING OCH GRUNDBEGREPP

MMA132: Laboration 1 Introduktion till MATLAB

Tentamen i Beräkningsvetenskap II, 5.0 hp,

DIFFERENTIALEKVATIONER. INLEDNING OCH GRUNDBEGREPP

Datorövningar i funktionalanalys och harmonisk analys

Tentamen i Beräkningsvetenskap II, 5.0 hp,

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28

TATA42: Föreläsning 3 Restterm på Lagranges form

2 februari 2016 Sida 1 / 23

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Bose-Einsteinkondensation. Lars Gislén, Malin Sjödahl, Patrik Sahlin

Transkript:

TMV151/181 Matematisk analys i en variabel M/Td, 2013 MATLAB NUMERISK LÖSNING AV ORDINÄRA DIFFERENTIALEKVATIONER Beskrivning och mål. Den här laborationen syftar till att ge en grundläggande förståelse för numerisk approximation av ordinära differentialekvationer samt kännedom om de viktigaste färdiga ODE-lösarna i Matlab. Efter genomförd laboration skall du kunna beskriva hur enkla approximationsmetoder så som framåt-euler, bakåt-euler och mittpuktsmetoden fungerar. Kunna skriva om högre ordningens differentialekvationer som system av första ordningens och definiera dessa i funktionsfiler som Matlabs ODE-lösare kan hantera. kunna skriva program som använder sig av dessa för att approximera lösningen till en differentialekvation. förstå och gärna skriva while-loopar. kunna diskutera begreppet effektivitet hos ett program i termer av tid, minne och antal operationer med handledaren. känna till och kunna använda några av Matlabs inbyggda ODE-lösare. kunna förstå viktiga delar av hjälptexten i dessa. därifrån dra slutsatser om vilken funktion du lämpligen bör använda på den aktuella differentialekvationen. Arbeta gärna två och två och diskutera er fram till lösningar. Se till att båda har förstått vad ni gör. Spara alla filer på bådas användarkonton och kommentera programmen på egen hand efter laborationstillfället för att repetera. Det kan vara lämpligt att den som har minst programmeringsvana sitter vid tangentbordet, eller att ni turas om. Ta för vana att alltid plotta de erhållna lösningar. Det är viktigt att inte bara veta hur man löser differentialekvationer utan också hur man tolkar lösningarna. Laborationen är uppdelad i fyra olika delar. I avsnitt 1 skall du programmera lösare som hittar primitiva funktioner. I avsnitt 2 skriver du om dessa lösare så att de kan lösa första ordningens skalära ekvationer och i avsnitt 3 lär du dig att skriva om högre ordningens ordinära differentialekvationer som ett system av första ordningens ekvationer. Du skall dessutom modifiera lösarna ytterligare så att de klarar av att lösa dessa system. När det är gjort passar vi på att lösa även andra system, som inte kommer från högre ordningens ekvationer. Det görs i avsnitt 4. Upplägget siktar egentligen mot att skriva några olika lösare för första ordningens system. Vi når dit i uppgift 3.3. Lösarna som skrivits då kan användas för att lösa alla andra differentialekvationer i den här laborationen och hur du tar dig dit är din sak men vi hoppas att upplägget här skall vara en bra guide genom de svårigheter detta innebär. (1) 1. Primitiva funktioner Det enklaste tänkbara begynnelsevärdesproblemet u (t) = f(t), t (0,T], u(0) = u 0 har en lösning som är en primitiv funktion F(x)+C till f(x) där C väljes så att begynnelsevärdet är uppfyllt. Vi kan approximera det genom att dela upp intervallet [0, T] i delintervall med ändpunkter Date: 2013 11 13, Fredrik Lindgren, Matematiska vetenskaper, Chalmers tekniska högskola. 1

2 MATLAB NUMERISK LÖSNING AV ORDINÄRA DIFFERENTIALEKVATIONER i 0 = t 0 < t 1 <...t N 1 < t N = T approximera derivatan i punkt t n 1 enligt formeln u(t n ) u(t n 1 ) t n t n 1 u (t n 1 ) = f(t n 1 ) Här kan vi lösa ut u(t n ) och får med k = t n t n 1 att (2) u(t n ) = u(t n 1 ) + kf(t n 1 ). Eftersom vi vet u(t 0 ) kan vi räkna ut u(t 1 ) och sedan u(t 2 ) och så vidare. Metoden ovan, då man använder f(t n 1 ) i högerledet kallas för Eulers framåtmetod, Euler framåt, Eulers explicita metod eller bara Eulers metod. 1.1. Eulers framåtmetod. Skriv en funktionsfil med namnet minprim1.m som tar emot ett funktionshandtag f, en vektor I med ett intervalls början och slut (två värden) samt en variabel X 0 med ett begynnelsevärde och en variabel N med antal delintervall. Det ska lösa differentialekvationen (1) med Eulers framåtmetod. Du ska alltså färdigställa följande program: function [t,u]=minprim(?,?,?,?) %Vi börjar testa antalet inargument och tillåter användaren %att inte bry sig om hur många delintervall det ska vara. NrIn==nargin; %Returnerar antalet inargument som användaren angett. if NrIn==? %Gör ingenting elseif NrIn=? N=100; else error( Wrong number of input arguments! ) U=zeros(1,N+1); %Programmet blir snabbare om vi skapar en %vektor som har rätt storlek innan vi börjar %loopa. k=? %steglängden. t=? %Vektor med alla t_n U(1)=U0; for j=2:? U(?)=U(?)+k*f(?); Använd programmet för att lösa differentialekvationerna nedan. Använd olika antal steg. Jämför med den analytiska lösningen. (a) u (x) = x 2, x [0,2], u(0) = 3, (b) u (x) = x 2, x [1,4], u(1) = 3, (c) u (x) = cos(2x), u(0) = 0, x [0,π], (d) u (x) = e x2, x [0,10], π u(0) = 2,

MATLAB NUMERISK LÖSNING AV ORDINÄRA DIFFERENTIALEKVATIONER 3 (Jämför problemet ovan med föregåe laboration: vilket värde konvergerar u(x) mot då x?) (e) u (x) = 1/x, x [1,10], u(1) = 0, 1.2. Matlabs färdiga lösare. Lös samma problem med Matlabs ode45.m som är standardlösaren i Matlab. För att det ska gå måste du skriva om funktionsfilerna som definierar f en liten, liten smula. Läs hjälptexten till ode45! 1.3. Eulers bakåtmetod. Om man istället gör approximationen u(t n ) u(t n 1 ) t n t n 1 u (t n ) = f(t n ) och löser ut u(t n ) får man en annan approximationsmetod som har fått namnet Euler bakåt eller Eulers implicita metod. Härled motsvarigheten till (2) för denna metod och skriv en funktion minprim2.m så att den använder denna metod istället. Testa på problemen (a)-(e) ovan! (3) Betrakta differentialekvationen 2. Första ordningens differentialekvationer u (t) + u(t) = t 2, t (0,T], u(0) = u 0. Den går inte att lösa med ditt program som det är. Men om vi använder Euler framåt så krävs bara en liten, liten ändring för att det ska fungera. Vi skriver om första raden i (3) så att u (t) = t 2 u(t) =: g(t,u(t)). På så sätt ser vi att den är en differentialekvation där högerledet beror av både funktionsvärdet och tiden. Vi kan i princip ta vilken funktion av två variabler, f(t,x) som helst och definera en differentialekvation på formen (4) u (t) = f(t,u(t)), t [a,b] u(a) = u a där vi alltså har stoppat in värdet av u(t) på variabeln x:s plats ovan. Lösningen, u(t), till denna ekvation kommer inte längre vara en primitiv funktion till f, åtminstone inte i den meningen vi är vana vid. Däremot är u en primitiv funktion till funktionen g(t) = f(t,u(t)). Men g(t) beror ju av den för oss okända u som är funktionen vi söker här. För att hitta den ska vi försöka formulera och implementera Eulers framåt- och bakåtmetod för differentialekvationen (4), men först försöker vi lösa den med ode45. 2.1. Lösa differentialekvation vars högerled beror av både t och u med ode45. Skriv en funktionsfil som tar två argument t och x och returnerar värdet av x t 2. Använd denna funktion för att lösa differentialekvationen (3) med ode45. Sätt u 0 = 2 och T = 3. Jämför med den analytiska lösningen! 2.2. Härled Euler framåt för problemet (4). För Euler framåt så approximerar vi återigen derivatan u (t n 1 ) med differenskvoten u(tn) u(tn 1) k. Visa att ett steg med Eulers framåtmetod ser ut som följer för problemet (4). (5) u(t n ) = u(t n 1 ) + kf(t n 1,u(t n 1 )). 2.3. Implementera Euler framåt. Spara om ditt program minprim1.m under namnet myode1.m och ändra det så att det löser godtyckliga differentialekvationer på formen (4) med Eulers framåtmetod (5). Den skall kunna ta samma typ av funktionshandtag som ode45 som argument.

4 MATLAB NUMERISK LÖSNING AV ORDINÄRA DIFFERENTIALEKVATIONER 2.4. Några ODE:er att lösa. Lös de följande differentialekvationerna med både ode45 och myode1. Lös dem också analytiskt. { u (t) = cu(t), t [0,2], (a) u(0) = u 0. (b) { u (x) = xu(x), x [0,3], u(0) = 1. Tips: Ekvationerna är separabla. 2.5. Eulers bakåtmetod för första ordningens differentialekvationer. Eulers bakåtmetod använder som vi sett differensekvationen u(tn) u(tn 1) k för att approximera derivatan av den sökta funktionen u i tiden t n (medan Eulers framåtmetod använder samma differenskvot för approximation av derivatan i tiden t n 1 ). Visa att givet att man har värdet av u(t n 1 ) så fås en approximation av u(t n ) till lösningen av (4) om man löser ekvationen (6) u(t n ) = u(t n 1 ) + kf(t n,u(t n )) för det okända värdet u(t n ). Vad är alltså problemet med Eulers bakåtmetod när man ska lösa generella ekvationer på formen (4)? 1 Detta problem åtgärdas med t.ex. fixpunktsiteration som i följande program backwardeuler.m. 2.6. En bakåtlösare för (4). Här är ett skal till en bakåteulerlösare som även klarar första ordningens differentialekvationer. Notera att det innehåller en for-loop som tar ett tidssteg i varje varv. Inuti den löses en fixpunktsekvation. function [t,u]=backwardeuler(f,i,u0,n) t=linspace(i(1),i(2),n+1); %Genererar tidsnoder U=zeros(1,size(t,2)); %Vektor där lösningen sparas U(1)=U0; %Första värdet är begynnelsevärdet k=t(2)-t(1); %Steglängden tol=k^2; %Fixpunktstolerans for n=2:n+1 Ugissning=U(n-1); % Vi sätter en första gissning på till föregåe värde. g=@(x)(u(n-1)+k*f(?,?)); % Fixpunktsfunktionen ändras varje varv. U(n)=fixedpoint(g, Ugissning, tol); U=U ; % Vi gör om till kolonnvektorer... t=t ; %... för att göra lika som ode45. Färdigställ programmet och lös differentialekvationerna (a) och (b) i uppgift 2.4 även med detta program. 2.7. Den logistiska ekvationen. Betrakta differentialekvationen dy (1 dt = ky y ), t > 0, L y(0) = y 0. Den kallas den logistiska ekvationen. Låt L = 5 och k = 1. Lös den för samtliga heltaltsvärden från 0 till 10 på y 0 och rita lösningarna i en och samma figur. Välj sluttid så att det blir tydligt vilka lösningsbanor som närmar sig y = 5 när tiden går mot oändligheten. Jämför med kursboken sidorna 188-189. 1 Svar: Vi måste lösa ekvationen (6) för varje steg eller om du vill ekvationen x = u(tn 1 ) + kf(t n, x) =: g n(x)

MATLAB NUMERISK LÖSNING AV ORDINÄRA DIFFERENTIALEKVATIONER 5 Betrakta differentialekvationen med lösningen 3. Högre ordningens ODE u (t) = c 2 u(t), t [0,b], (b > 0) u(0) = u 0, u (0) = u 1, (7) u(t) = u 0 cos(ct) + u 1 c sin(ct). Verifiera detta genom att derivera och genom att sätta in t = 0 i lösningen såväl som dess derivata! Denna differentialekvation är av andra ordningen. För att kunna använda t.ex. ode45 eller bakåtlösaren ovan skriver vi om ekvationen som ett system av två differentialkevationer av första ordningen. Vi inför två nya variabler Vi deriverar w 1 = u, w 2 = u. w 1 = u = w 2, w 2 = u = c 2 u = c 2 w 1. Begynnelsevillkoren blir w 1 (0) = u 0, w 2 (0) = u 1. Vi ser att w 1 och w 2 löser begynnelsevärdesproblemet { { w 1 = w 2, w1 (0) = u 0, w 2 = c 2 w 1, w 2 (0) = u 1. Om Eulerlösarna modifieras så att de kan ta emot vektorer så kan man nu lösa detta system om man definierar en funktionsfil ode2solve.m enligt function Uprim=ode2solve(t,U) c=1; Uprim(1,1)=U(2); Uprim(2,1)=-c^2*U(1); Man behandlar högre ordningens system analogt. 3.1. Några andra ordningens differentialekvationer. Skriv om följande andra ordningens differentialekvationer som system av första ordningens differentialekvationer och hitta den numeriska lösningen med hjälp av ode45 och plotta lösningarna tillsammans med den analytiska lösningen. Innan du kan använda backwardeuler måste du ändra i programmet så att den kan hantera vektorvärda funktioner! Du måste dessutom ändra i fixpunktslösaren så att den också hanterar vektorvärda funktioner. Du måste skriva filer av samma typ som ode2solve.m ovan för att det skall fungera. (a) { u = c 2 u, t [0,10] u(0) = u 0, u (0) = u 1. (b) { u + 4u + 13u = e t, t [0,10] u(0) = 1, u (0) = 2.

6 MATLAB NUMERISK LÖSNING AV ORDINÄRA DIFFERENTIALEKVATIONER 3.2. Bakåt- och framåt-eulerlösare för system. Här är en lösare som löser begynnelsevärdesproblem för system av ODE:er med Eulers framåtmetod. function [t,u]=fesyst(f,i,u0,n) % Vad är det för typer och storlekar som inargumenten ska ha? if nargin<4 N=100; if nargin <3 error( Too few input arguments ) dt=(i(2)-i(1))/n; % Tidssteg t=linspace(i(1),i(2),n+1); % Samtliga tider U=zeros(length(U0),length(t)); % Minnesallokering. Längden av U0 är antal % ekvationer dvs antal derivator om systemet % härrör från en skalär ekvation. U får % alltså så många rader som det är % begynnelsevärden och så många kolonner som % det är tidsnoder i partitionen av % intervallet som ges av I (dvs N+1). I en % kolonn U(:,i) kommer vi spara de % approximativa värdena av funktionen vid % tiden t(i). U(:,1)=U0; % Vi stoppar in begynnelsevärdena i U:s första kolonn. for i=1:n % Ett tidssteg med Eulers framåtmetod: U(:,i+1)=U(:,i)+dt*f(t(i),(U(:,i))); % Egentligen onödigt men för att resultatet ska bli analogt med ode45 etc: t=t ; U=U ; Försök förstå den och använd den och din bakåt-eulerlösare för skalära ekvationer för att skriva en bakåt-eulerlösare backwardeuler.m för system! Du kommer behöva en fixpunktslösare som kan hantera vektorvärda kontraktioner. Testa de båda lösarna på ekvationerna i uppgift 3.1! 3.3. Olika lösare ger olika typer av fel. Vi ska undersöka hur den approximativa lösningen till svängningsekvationen (a) ovan beror av den numeriska metoden. Vi börjar med att spara om programmet backwardeuler.m som mittpunkt.m och skriva om det så att det istället använder mittpunktsmetoden 2 (8) u(t n ) = u(t n 1 ) + kf( t n + t n 1 2, u(t n) + u(t n 1 ) ). 2 2 Idén bakom mittpunktsmetoden är att vi först tänker oss att vi ser den nu välbekanta differenskvoten u(t n) u(t n 1 ) t som en approximation av derivatan i tiden mitt i mellan t k n 1 och t n nämligen i n 1 +t n. Det 2 innebär alltså att vi sätter u(t n) u(t n 1 ) = f( t n 1+t n, u( t n 1+t n )). k 2 2

MATLAB NUMERISK LÖSNING AV ORDINÄRA DIFFERENTIALEKVATIONER 7 Det behövs bara en liten förändring i fixpunktssteget för att åstadkomma ett program med denna nya metod. Spara slutligen om programmet myode1.m som forwardeuler.m och skriv om det så att det klarar att lösa system av första ordningens ODE. Det handlar om att hantera begynnelsevärdet på samma sätt som i backwardeuler.m samt att klara av att ta emot vektorer från funktionen f på samma sätt. Eulers framåtmetod har inte u(t n ) i högerledet så fixpunktslösningen i backwardeuler skall inte vara med. Testa alla programmen med N = 10, 100, 1000, 10000. Plotta lösningarna tillsammans med den analytiska lösningen. Blir lösningen bättre med högre N? Beskriv hur felet beter sig för de olika lösarna. Notera att framåt-euler felaktigt lägger till energi till lösningen medan bakåt-euler stjäl energi ur lösningen. Man kan bevisa detta liksom det faktum att mittpunktsmetoden bevarar energin i svängningsekvationen. Detta är ibland en viktig egenskap. För någon av lösarna kommer det kanske inte att fungera för N = 10. Funktionen g(x) := x + kf(t,x) uppfyller då inte villkoren i fixpunktssatsen, sid. 221 i Adams och while-loopen bara fortsätter, det konvergerar inte mot någon lösning. 4. System av ordinära differentialekvationer Vi kan tänka oss system av obekanta där de olika obekanta inte är varandras derivator utan olika fysikaliska storheter. Det kan vara olika spänningar i elektriska kretsar eller koncentrationer av kemiska ämnen som reagerar med varandra. Ett exempel är Volterra-Lotka-ekvationerna nedan. Lägg lite kraft på att förstå vad de olika termerna i differentialekvationen betyder. 4.1. Volterra-Lotka: kaniner och rävar. Vi betraktar population av bytesdjur (kaniner) som lever tillsammans med en population rovdjur (rävar). Låt u 1 (t) respektive u 2 (t) beteckna antalet kaniner respektive rävar vid tiden t. En enkel matematisk modell för populationernas utveckling ges av Volterra-Lotka-ekvationerna: (9) u 1(t) = au 1 (t) bu 1 (t)u 2 (t) u 2(t) = cu 2 (t) + du 1 (t)u 2 (t) Koefficienterna a,b,c,d är positiva. Termen au 1 (t) representerar netto-födelse-dödstalet i en ensam kaninpopulation. Termen cu 2 (t) är motsvarande för rävarna. Termen bu 1 (t)u 2 är antalet kaniner som blir uppätna per tidsenhet. Termen du 1 (t)u 2 (t) är antalet rävar per tidsenhet som överlever på grund av tillgång på föda. Observera teckenkombinationen i ekvationerna. Vad blir lösningen om populationerna är ensamma (b = d = 0)? Den modellen passar kanske bra för en rävpopulation utan tillgång till föda (åtminstone i början) men knappast för en ensam kaninpopulation. Man kan förvänta sig att brist på mat hindrar tillväxten efter ett tag. Hur tror du en modell som tar hänsyn till det skulle kunna se ut? Inom populationsekologin jobbar man ofta med den här typen av modeller och försöker skatta koefficienterna för att bedömma populationers känslighet för störningar etc. Lös Volterra-Lotka-ekvationerna med din mittpunktslösare. Lämpliga värden är a = 0.5, b = 1, c = 0.2, d = 1. Testa med lite olika begynnelsevärden! Försök hitta några där populationen håller sig relativt stabil. Vad har en sådan situation för ekologisk tolkning? Vad innebär det att lösningen närmar sig noll? 4.2. Ett styvt system från kretselektroniken. Skriv doc ode45 vid Matlabs kommandoprompt. Då öppnas dokumentationen inte bara för ode45 utan för alla(?) Matlabs ODE-lösare (åtminstone gäller detta Matlab version 7.11). En bit ned finns en lista som beskriver dessa och när de ska användas. Där framgår att ode45 är den som ska användas oftast. Har man däremot ett styvt problem så rekommeras ode15s. Ett styvt problem är ett problem där lösningen Dock vill vi slippa räkna ut u( t n 1+t n ) så vi approximerar det med medelvärdet av u(t 2 n 1 ) och u(t n 1 ). Vi sätter alltså u( t n 1+t n ) u(t n 1)+u(t n) och får således tidsstegningen 2 2 som är ekvivalent med (8). u(t n) u(t n 1 ) k = f( t n 1+t n 2, u(t n 1)+u(t n) 2 ))

8 MATLAB NUMERISK LÖSNING AV ORDINÄRA DIFFERENTIALEKVATIONER ibland förändras snabbt och ibland långsammare. Där den förändras snabbt så vill man ta små steg för att fånga denna förändring utan att få för stora fel. Där den inte förändras lika snabbt kan det dock vara bra att ta längre steg för att snabba upp beräkningarna. Matlabs ode45 klarar inte av det senare. Det framgår med all önskvärd tydlighet om man gör exempel 2 i nämnda dokumentation först med ode15s som föreslås och sedan med ode45. Gör det! Vad händer? van der Pols ekvation kommer urspungligen från studier av elektriska kretsar om man får tro http://en.wikipedia.org/wiki/van der Pol oscillator. Testa också med någon av dina egna lösare!