TANA21+22/ 30 september 2016 LAB 4. ORDINÄRA DIFFERENTIALEKVATIONER 1 Inledning Vi skall studera begynnelsevärdesproblem, både med avseende på stabilitet och noggrannhetens beroende av steglängden. Vi studerar ett exempel av första ordningen och löser sedan ett system av differentialekvationer. 1.1 Mål Målet med denna laboration är att du skall få övning i att använda Eulers metod och Runge-Kuttas klassiska metod. få viss insikt i vad stabilitet innebär. få övning i att hantera system av differentialekvationer. få insikt i hur man praktiskt kan analysera trunkeringsfelets beroende av steglängden. få övning i att använda en av MATLAB:s ode-lösare för att lösa ett praktiskt problem. 2 Eulers metod och Runge-Kuttas metod Vi skall börja med att studera ett första ordningens begynnelsevärdesproblem. Vi skall använda Eulers metod (Euler framåt) och Runge-Kuttas klassiska metod för att lösa ett problem på formen y = f(x,y), x x 0, y(x 0 ) = y 0. Vi låter vårt testproblem vara: y = 5y +2.5 = f(x,y), 0 x x n, y(0) = 1. ( ) exakt lösning: y = e 5x +1 2 Följande enkla funktion (finns att kopiera på kurshemsidan) kan användas för att implementera Eulers metod. function y=myeuler(f,x0,xn,y0,h) y=y0; x=x0; plot(x0,y0,. ) hold on while x < xn-h/2 y=y+h*f(x,y); x=x+h; plot(x,y,. ) disp([x y ]) end hold off Uppgift 2.1 Skapa funktioner Skapa myeuler.m i din hemkatalog. Modifiera också programmet till myrungekutta.m som använder Runge-Kuttas metod och skapa en funktion som beräknar f(x, y) för testproblemet. Det måste vara en funktion av två variabler även om inte båda används. En anynom funktion kan skapas i kommandofönstret: f=@(x,y) -5*y+2.5 1
2.1 Stabilitet Eulers och Runge-Kuttas metoder är exempel på explicita metoder. Dessa kräver i regel relativt korta steglängder för att kunna fungera. Om steglängden, h, är större än en viss kritisk gräns (som är olika för olika differentialekvationer) så avlägsnar sig den numeriska approximationen alltmer från den exakta lösningen då n växer. Vi säger då att metoden är instabil för detta h. I motsatt fall säges metoden vara stabil. Uppgift 2.2 Datorexperiment Undersök vad som inträffar i de två metoderna för h = 0.1, h = 0.45 och h = 0.6. För vilka steglängder är respektive metod stabil? h Euler Runge-Kutta Sätt xn = 5 0.1 0.45 0.6 3 Numerisk simulering av en regulator Vi skall nu studera en numerisk simulering av en regulator för en vattentank. En tank är fylld med vatten enligt figuren nedan. Vid tidpunkt t är vattennivån x(t). Vattentillförseln y(t) styrs av en regulator. Dess egenskaper beror på förstärkningskoefficienterna K P och K I. Målet för regulatorn är att hålla x(t) så nära noll som möjligt. regulator y(t) + x(t) 0 tank Figur 1: Illustration av vattentanken med regulator 2
Vi behöver också införa hjälpvariabeln z(t) = t 0 x(s) ds Regulatorns funktion kan då beskrivas med ett system av ordinära differentialekvationer 1 x (t) = 5 10 5 x(t)+y(t) 10 3, y (t) = K P x(t) y(t) K I z(t)+10 3, t > 0, z (t) = x(t). Vi använder begynnelsevillkoret x(0) = 1, y(0) = 0.001, z(0) = 0. Förstärkningskoefficienterna är K P = 0.1 och K I = 0.001. Om vi inför vektorn v = v(t) enligt: x(t) v(t) = y(t) kan systemet skrivas som v = f(t,v), där f(t,v) = Av +b. z(t) 5 10 5 1 0 10 3 1 Vi har A = K P 1 K I, b = 10 3 och v(0) = 0.001 1 0 0 0 0 Uppgift 3.1 Skapa funktionsfil Skapa en funktionsfil odefun.m som beräknar f(t,v). (Funktion att utgå från finns på kurshemsidan.) 3.1 Experiment med Eulers metod Uppgift 3.2 Stabilitet Använd myeuler för att approximera lösningen fram till t n = 500 och studera figuren. Anrop av myeuler sker med: v=myeuler(@odefun, t0, tn, v0, h) (v0 är startvektorn, som måste vara en kolumnvektor.) Använd steglängderna h = 1.5, 2.1, 2.24 och 2.26. Vilken var den största steglängd, där vi hade stabilitet? Uppgift 3.3 Noggrannhet Använd Eulers metod för att approximera lösningen fram till t n = 100. Använd format short e. Trunkeringsfelet i approximationen med steglängden h kan uppskattas som skillnaden mellan approximationerna med steglängderna 2h och h. Börja med steglängden h = 0.2 och halvera den tills trunkeringsfelet i x(100) är högst 10 5. Vid vilken steglängd uppfylldes noggrannhetskravet? Hur många steg gjordes? Ange värdet av x(100). Ange värdet av trunkeringsfelet i x(100). 1 För en härledning hänvisas till Torkel Glad och Lennart Ljung, Reglerteknik, Studentlitteratur, 1989. 3
3.2 Experiment med MATLAB:s ode23 Vi skall nu jämföra Eulerlösningen för den minsta steglängden ovan med lösningen som fås med MATLAB:s ode23 och standardtolerans. Standardtoleranser innebär att vi får ett absolut fel på ca 10 6. I ode23 uppskattas lokala felet i varje steg. Utifrån det bestäms en lämplig steglängd, som används i nästa steg. Detta innebär att steglängden rättar sig efter funktionens utseende och totala antalet steg kan hållas nere. För att anropa ode23 skriver man: [t,v]=ode23(@odefun,[t0 tn],v0) eller bara ode23(@odefun,[t0 tn],v0) så plottas lösningen automatiskt. Uppgift 3.4 Experiment med ode23 Använd ode23 för att lösa differentialekvationen fram till t n = 100. Använd format long e Rita först graferna, genom att anropa ode23 utan utparametrar. Beräkningspunkterna blir markerade, så det syns att variabel steglängd används. Vilken färg har x(t)-kurvan? Bestäm därefter lösningen genom att anropa ode23 med utparametrar. Ange värdet av x(100). Jämför med den bästa lösningen med Eulers metod. Blev det någon större skillnad mellan lösningarna? Hur många steg användes (fås med size(t))? Jämför med Euler. Vad kan sägas om effektiviteten? Uppgift 3.5 Variation av regulatorns egenskaper. Variera K I genom att använda ytterligare tre värden, K I = 0.01, 0.05, 0.125. Använd ode23 för att lösa differentialekvationen fram till t n = 100 för alla tre fallen. Studera enbart graferna. För vilket av de tre K I -värdena i denna deluppgift fungerar regulatorn bäst? Vad händer när K I ökar? Ange det/de K I som inte ger en fungerande regulator. För vilket K I togs flest steg? Studera lösningskurvan med K I = 0.125, då t går från 0 till 40. Var används korta steglängder? 4
4 Undersökning av trunkeringsfelets beroende av steglängden Vi återvänder till fallet K P = 0.1, K I = 0.001. 4.1 Lokalt trunkeringsfel Om vi använder Eulers metod och gör ett steg med steglängd 2h erhålls en approximation, α, till värdet x(2h). Gör vi ett nytt steg, nu med steglängd h, erhålls en approximation, β, till värdet x(h). Antag att det lokala felet är proportionellt mot h p. Då fås α x(2h) C(2h) p, β x(h) Ch p. p kan enkelt uppskattas med hjälp av α, β, x(2h) och x(h) om vi dividerar sambanden med varandra. Vi känner inte värdena x(0.5) och x(0.25). Vi vet dock att Runge-Kuttas klassiska metod är mycket noggrannare än Eulers metod. Därför kan vi approximera det exakta värdet x(0.5) med värdet som vi får med Runge-Kuttas metod. På samma sätt för x(0.25). Uppgift 4.1 Bestäm p för lokala felet Använd format short e och kör programmet med Eulers metod, h = 0.5 och t n = 0.5. Ta sedan h = 0.25 och t n = 0.25. Vad blir approximationerna α, respektive β? α = β = Approximera nu x(0.5) med Runge-Kuttas metod med steglängd h = 0.5. Approximera x(0.25) med Runge-Kuttas metod med steglängd h = 0.25. Vad blir x(0.5) och x(0.25)? x(0.5) x(0.25) Uppskatta p. 4.2 Globalt trunkeringsfel Låt 4h vara en steglängd. Låt oss beräkna en approximation α till x(100) med någon numerisk metod. Sedan tas steglängderna 2h och h, och beräknas approximationer β respektive γ till x(100). Antag att det globala felet är proportionellt mot h p. Då fås ekvationssystemet Uppgift 4.2 Ange uttryck α x(100)+c(4h) p, β x(100)+c(2h) p, γ x(100)+ch p. Ge ett uttryck för att bestämma p med hjälp av α, β och γ. (Se t.ex. Ex.saml. 9.26) 5
Uppgift 4.3 Bestäm noggrannhetsordningen för Eulers metod (a) Kör programmet med Eulers metod och h = 2, t n = 100. Ta sedan h = 1 och h = 0.5. Vilka värden får approximationerna α, β och γ? α = β = γ = (b) Uppskatta p (som är noggrannhetsordningen för Eulers metod). (c) Stämmer resultatet överens med svaret i Uppgift 4.1? Motivera ditt svar! 5 Frivillig tillämpning: Glödlampan Följande ekvation utgör en modell för temperaturutvecklingen i en glödlampa (y(t) betecknar temperatur i lämplig skala och t är tiden), dy dt = q (y4 1), y(0) = 1 I modellen antas att glödtråden värms enligt Ohms lag och kyls av strålning enligt Boltzmanns T 4 -lag. Strömmen slås på vid t = 0 och slås av vid t = 0.005 så { 10 000, t 0.005 q = 0, t > 0.005 Uppgift 5.1 Beräkning av temperaturen Lös begynnelsevärdesproblemet med matlab-rutinen ode23 (skapa en fil med funktionen för högerledet) och plotta y(t) så man ser hur tråden svalnar. Låt alltså tiden gå en liten stund då lampan är släckt. Ta ut din bild på skrivaren eller gör en skiss. Uppgift 5.2 Steglängdsval Rutinen ode23 använder ju automatisk steglängdskontroll. Kör ode23 utan utparametrar och studera steglängdernas variation. Kommentera. Uppgift 5.3 Studera grafen När man släcker en bilstrålkastare ser man hur glödtråden svalnar och svartnar medan uppvärmning tycks gå mycket fortare. Verifieras detta fenomen av modellen? 6