(ODE) Ordinära differentialekvationer, del 1 Beräkningsvetenskap II It is a truism that nothing is permanent except change. - George F. Simmons ODE:er är modeller som beskriver förändring, ofta i tiden Modellen är beskriven i form av en funktions derivata Givet: funktionens derivata, dvs funktionens tangent/lutning i varje punkt är känd Sökt: funktionen själv (ODE) (ODE) Exempel beskriver t ex hastigheten hos en fallskärmshoppare med massa, gravitationskonstant, friktionskoefficient Här är och är parametrar tolkas:hastighetsförändringen vid tiden t är proportionell mot hastigheten vid tiden t plus gravitationen Begynnelsevärde måste var givet, t ex hastighet vid tid 0, v(0), annars finns ingen entydig lösning. (ODE) Från laborationen Finns många tillämpningar Kemi (tidsberoende kemiska reaktioner) molekyldynamik Mekaniska system (fordon, robotar) Elektriska kretsar (resistorer mm) Celest mekanik (astronomi, satelliter), krävs hög noggrannhet Ekonomi Efter diskretisering i rummet av partiella differentialekvationer ( methods of lines ) Etc etc ODE:er skrivs på formen Högerledet f(t,y) lagras i en egen funktion som skickas in som inparameter i matlabs lösare function yut=rhsode(t,y) yut = ; % beräkning av högerledet tspan = [t0 tslut]; % intervall y0=[ ]; % begynnelsevärde [t,y]=ode45(@rhsode,tspan, y0); 1
Från laborationen Från laborationen Matlabs lösare använder högerledsfunktionen internt, en gång för varje tidssteg Ingen principiell skillnad mellan att lösa en ekvation gentemot ett system med många ekvationer (mer om detta senare) Exempel på numeriska metoder: Eulers metod, Heuns metod, Klassisk Runge-Kutta. Klassisk Runge-Kutta visade sig ge noggrannast resultat, sämst. Noggrannhet beror av steglängd h Matlabs inbyggda lösare beräknar steglängd på egen hand, givet en viss noggrannhet Några frågor: Hur fungerar de numeriska metoderna, t ex, principiellt? Varför ger Klassisk Runge-Kutta noggrannare resultat än (om samma steglängd används)? På vilket sätt beror noggrannheten på steglängden h? Hur kan Matlabs lösare beräkna steglängd på egen hand (och alltså beräkna noggrannheten automatiskt)? Frågorna ska vi titta på lite senare Två huvudtyper Begynnelsevärdesproblem Randvärdesproblem Svängande strängar, balkar etc Ofta rumsberoende och ofta från partiella diffar Vi tittar bara på begynnelsevärdesproblem Olika varianter av ode:er beroende på högerledets utseende Linjära med konstanta koefficienter Linjära med variabla koefficienter Icke-linjära Ökande grad av komplexitet Ofta har man system av ode:er Exempel Kan skrivas om på vektorform dvs samma form som skalära ode:er Grundformen används av numeriska metoder Vad gör man om annan form, t ex Kan skrivas om på rätt form Sätt ger ett system av ode:er på rätt form 2
Allmänt Exempel skrivs om genom att sätta och på vektorform dvs rätt form För högre derivator görs på samma sätt (upprepa förfarandet) sätt och på vektorform kallas Van Der Pols ekvation, beskriver bl a hjärtfrekvens, elektriska kretsar I MATLAB Definiera högerledet i en MATLAB-funktion function y_out=vdp(t,y,lambda) % Van der Pols ekv y_out = [y(2); lambda*(1-y(1)^2)*y(2)-y(1)]; Observera att y är nu en vektor där position 1 fås genom y(1) 2 får genom y(2) Anrop lambda = 2; tspan = [0 max(20,3*lambda); y0=[2;0]; % begynnelsevärden [t,y]=ode45(@vdp,tspan, y0,[],lambda); plot(t,y); legend( y_1, y_2 = y ); ger resultatet Koppling till integrering Några numeriska metoder (problemet ) I princip y (t) = f (t, y) y(t) = f (t, y)dt Man brukar därför ibland använda begreppet integrering när det gäller metoder för ode:er Ex) Ur Matlabs hjälp-text för ode45: [TOUT,YOUT] = ODE45(ODEFUN,TSPAN,Y0,OPTIONS) solves as above with default integration properties replaced by values Vissa metoder kan också härledas ur integrering med t ex Trapetsmetoden (= explicit Euler = Euler framåt) Enkel idé: Punkt 1 given (begynnelsevärdet) Beräkna en ny punkt genom att gå längd h i tangentens riktning, dvs i riktning som ju är lika med Upprepa för punkt 2, 3, 4, tills framme vid slutet på intervallet 3
Tangenten i ny punkt Tangenten i beräknas som om funktionen gått genom Ger ny punkt Tangenten i beräknas som om funktionen gått genom Ger ny punkt Upprepa tills hela intervallet klart - fel Matematisk formulering Algoritmen Härleds med Taylorutveckling Fel i steg 1 4
- fel - fel Fel i steg 2 Två varianter: lokalt fel felet som skapats i detta steg (grön kort pil) globalt fel - totalt fel i detta steg (blå lång pil) Fel i steg 3 lokalt fel för litet för att visa grafiskt globalt fel blå lång pil - fel Fel i steg 3 lokalt fel grön kort pil globalt fel blå lång pil - fel Vad händer med felet om steglängden minskar? h=0.5 h=0.2 Felet blir mindre! Felet beror av h - fel Detta fel kallas diskretiseringsfel (trunkeringsfel) Delas in i Globalt fel totalt fel i steg k Lokalt fel felet skapat i steg k Trunkeringsfelet beror på något sätt av steglängden h Hur det beror av h beror på metod Härledning av detta fel med Taylorutveckling, ode, del 2 (senare) Dessutom tillkommer avrundningsfel, normalt mycket mindre än trunkeringsfel Idé: väg samman tangenter i flera punkter Exempel (samma som tidigare): För att hitta beräkna tangenten i och i och väg samman. Problem: hur hitta tangenten i? Punkten är ju inte känd 5
Lösning: Använd Euler-lösningen Lösning: Använd Euler-lösningen Parallellförflytta tangenten till punkten Parallellförflytta tangenten till punkten Väg samman tangenterna (medelvärde) Detta blir eller Euler-lösningen Metoden kallas för Heuns metod Exempel på en 2-stegs Runge-Kutta Finns många exempel på olika typer av R-Kmetoder, alla bygger på samma principer Annat exempel, Klassisk R-K (en 4-stegs R-K): Generell s-stegs explicit R-K där och är konstanter 6
Hittills har lösningen i punkt k+1 beräknats genom information från lösningen i föregående punkt Sådana metoder kallas explicita (explicit Euler, explicit Runge-Kutta etc) Finns också implicita metoder Hos implicita metoder används information hos lösningen i punkt k+1 för att beräkna lösningen i punkt k+1 Exempel: Implicit Euler (Euler bakåt) Hur kan man hitta lösningen i punkt k+1 genom att använda lösningen i samma punkt? Exempel) Implicit Euler med h=0.1: k=0: dvs Icke-linjär ekvation använd iterativ metod t ex fixpunktsiteration eller Newtons metod (Beräkningsvetenskap I). Sätt forts exempel) Med en iterativ lösare y 1 = iterativ(g(y 1 ),y_gissning) Som startgissning kan väljas y_gissning = y k Sedan upprepas förloppet för k=1,2,3 n-1 Lösaren iterativ kan t ex innehålla Newton-Raphsons metod eller fixpunktsiteration. Fler implicita metoder Trapetsmetoden Implicit Runge-Kutta (visas ej här) Om system av ode:er måste man lösa ett system av icke-linjära ekvationer varje steg Implicita metoder är mer arbetskrävande per tidsteg p g a iterationerna Vissa egenskaper hos metoderna gör att man för vissa problem ändå använder implicita metoder, se avsnitt ode, del 2 de blir i vissa fall totalt sett mindre arbetskrävande 7