Kapitel 8. Lösning av ordinära differentialekvationer Eftersom endast ett mindre antal differentialekvationer kan lösas analytiskt, är numeriska lösningsmetoder ofta av stor betydelse. Nära besläktade med differentialekvationerna är differensekvationerna, som vi först skall studera. Vetenskapliga beräkningar III, Tom Sundius 2008 1
8.1. Differensekvationer Med en differensekvation förstår man i allmänhet en ekvation, som innehåller en oberoende variabel x, en beroende variabel y samt dessutom ett antal differenser y, 2 y,... Analogin med differentialekvationerna är dock inte helt fullständig, vilket inses av följande exempel. Antag t.ex. att vi har differentialekvationen Den motsvarande differensekvationen vore då y + 2y = x. y + 2y = x. Om vi substituerar y = y(x + 1) y(x), så finner vi emellertid ekvationen som är mer praktisk att använda. y(x + 1) + y(x) = x, Vetenskapliga beräkningar III, Tom Sundius 2008 2
I allmänhet kan varje differensekvation omskrivas i en form som enbart beror av x, y(x), y(x + 1),..., y(x + n). Detta beror av operatoridentiteten E 1. För att visa hur en differensekvation av första ordningen kan lösas, skall vi studera ovanstående exempel. När vi löser en differentialekvation av formen y + 2y = x, behandlar vi som bekant först den homogena ekvationen y + 2y = 0 och löser den med en lämplig ansats. På samma sätt kan vi behandla differensekvationen y(x + 1) + y(x) = x. Vi gör substitutionen i den homogena ekvationen y = r x, y(x + 1) + y(x) = 0, Vetenskapliga beräkningar III, Tom Sundius 2008 3
varvid vi får som leder till r x (r + 1) = 0, r = 1 samt y = C( 1) x (C = konstant). För att få den fullständiga ekvationens lösning, gissar vi att y = ax + b, som vid substitution ger a(x + 1) + b + ax + b = x, eller alltså a = 1 2, b = 1 4. Den partikulära lösningen är således y = x 2 1 4, och den fullständiga lösningen blir då y = C( 1) x + x 2 1 4. Vetenskapliga beräkningar III, Tom Sundius 2008 4
Som ett exempel på en differensekvation av andra ordningen skall vi välja den rekursiva formeln y n+1 = y n + y n 1 y 0 = 0, y 1 = 1. Denna formel definierar Fibonacci talen, som upptäcktes av Leonardo Fibonacci (från Pisa, c. 1170-1250) i början av 1200-talet 1. Om vi gör substitutionen y = r n, finner vi den karaktäristiska ekvationen som har lösningen r 2 r 1 = 0, r = 1 ± 5. 2 Differensekvationens lösning kan alltså skrivas [ ] n [ ] n 1 + 5 1 5 y n = C 1 + C 2. 2 2 1 Talserien härrör sig från problemet: Hur många par av kaniner kan ett enda par producera på ett år om a) varje par föder ett nytt par varje månad, som blir produktivt från och med den andra månaden, och b) inga dödsfall inträffar? Vetenskapliga beräkningar III, Tom Sundius 2008 5
Med hjälp av villkoret y 0 = 0 finner vi ekvationen 0 = C 1 + C 2, och villkoret y 1 = 1 ger ekvationen [ ] [ ] 1 + 5 1 5 y 1 = 1 = C 1 + C 2. 2 2 Lösningen till dessa ekvationer är C 1 = 1 5 = C 2, som efter substitution ger den slutliga lösningen y n = 1 {[ ] n 1 + 5 5 2 [ ] n } 1 5, 2 en formel som kan kontrolleras genom att beräkna talen ur rekursionslikheten. Observera sambandet med det gyllene snittet! Med hjälp av binomialserien kan vi också skriva lösningen i formen y n = 1 2 n 1 [( ) n 1 + ( ) n 5 + 3 ( ) n 5 2 +... + 5 ( ) ] n 5 k +... 2k + 1 Vetenskapliga beräkningar III, Tom Sundius 2008 6
Ett annat exempel på differensekvationer är y n = py n+1 +qy n 1 med p+q = 1 och y 0 = 1, y N = 0. Om vi sätter y n = r n får vi den karaktäristiska ekvationen r = pr 2 + q = pr 2 p + 1, vars lösning är r = 1, r = 1 p 1 = q p. Differensekvationens lösning kan då uttryckas y n = C 1 + C 2 (q/p) n då p q. C 1 och C 2 fås ur randvillkoren och den fullständiga lösningen är y n = pn n q n q N p N q N. Om q = p = 1 2, så är lösningen y n = (C 1 + nc 2 )r n 1 = 1 n/n. Vetenskapliga beräkningar III, Tom Sundius 2008 7
8.2. Differentialekvationer Differentialekvationerna spelar en stor roll i naturvetenskaperna. Man kan med fog säga, att en differentialekvation är den primitivaste tänkbara beskrivningen av ett naturfenomen. Som vi redan nämnt, har ingalunda alla differentialekvationer en analytisk lösning, och vi måste därför ofta ty oss till en numerisk lösning. De enklaste av de problem, som vi skall behandla, kallas initialvärdesproblem. Ett initialvärdesproblem av första ordningen kan i allmänhet uttryckas y = f(x, y); y(x 0 ) = y 0. Utgångsvillkoren är då angivna i en enda punkt (x 0 ), och problemet blir att beräkna funktionsvärden i punkterna x n = x 0 + nh, där n = 1, 2,..., och h en lämplig konstant. I randvärdesproblemen anges utgångsvillkoren i flere punkter, såsom t.ex. y = f(x, y, y ); y(a) = y a, y(b) = y b. Vetenskapliga beräkningar III, Tom Sundius 2008 8
Vad menar vi med lösningen till en differentialekvation? Låt oss t.ex. betrakta ekvationen y = x 2 y 2. Intuitivt skulle man tänka sig en kurva y = y(x) i varje punkt (x, y), där kurvans tangent y (x) uppfyller ekvationen ovan. Som vi ser, är det fråga om en rent lokal egenskap. Det finns givetvis inte en enda kurva, som utgör lösning till differentialekvationen, utan istället passerar det en kurva, som utgör en lösning till ekvationen, genom varje punkt (x 0, y 0 ). Denna tanke kan man också åskådliggöra grafiskt genom att man väljer olika punkter i (x, y) planet och beräknar tangenten till kurvan genom punkten enligt ekvationen ovan. Dessa tangentsegment anger den riktning, som lösningskurvan har lokalt, och med en smula fantasi kan man skissera olika lösningskurvor om man har tillräckligt tätt med punkter i planet. Nedan visas ett dylikt riktningsfält för ovanstående differentialekvation. Vetenskapliga beräkningar III, Tom Sundius 2008 9
För att förenkla metoden något, kan man söka efter de kurvor, längs vilka tangenterna har samma riktning (isoklinerna). I vårt exempel finner vi, att isoklinerna är en hyperbelskara: x 2 y 2 = k. Denna grafiska metod är ganska grov, men den kan likväl ge en ganska god föreställning om problemets natur, vilket kan underlätta den numeriska lösningen. Vetenskapliga beräkningar III, Tom Sundius 2008 10
Om vi endast önskar beräkna en lösningskurva, som går genom en given punkt är det onödigt att rita hela riktningsfältet. Vi kan då göra på det sätt som visas i figuren nedan. Först uppritas ett segment av en tangent till kurvan, som går genom den givna punkten, därpå en ny tangent som går genom segmentets ändpunkt etc. Vi får på detta sätt den polygonbåge, som visas i figuren. Som vi ser fungerar denna metod inte alltid så bra, beroende på att vi alltid använder föregående tangent för att beräkna nästa punkt på kurvan, vilket leder till ett systematiskt fel, om man inte väljer punkterna mycket tätt. Punkterna på den beräknade kurvan kommer sålunda alltmer att släpa efter den rätta lösningskurvans punkter. Vid varje steg följer lösningen en tangentlinje till en lösningskurva genom en viss punkt och producerar en ny punkt, som inte ligger på denna lösningskurva. Vetenskapliga beräkningar III, Tom Sundius 2008 11
I nästa steg följer lösningen tangenten till den lösningskurva som passerar genom denna felaktiga punkt osv. Även om alla lösningskurvor beter sig på samma sätt, blir kurvorna som ligger under den rätta lösningskurvan allt mindre branta, och avvikelsen tilltar. Det vore därför förnuftigare att kasta en blick framåt, beräkna tangenten där, och därpå fortsätta i den riktning, som bestäms av medeltalet av de båda tangentriktningarna. Denna idé ligger till grund för en klass av numeriska metoder för att lösa differentialekvationer, som brukar kallas prediktor-korrektor metoder. Vetenskapliga beräkningar III, Tom Sundius 2008 12
8.3. Prediktor korrektormetoder Den första som uppfann en numerisk metod för att lösa differentialekvationer av första ordningen var Leonhard Euler 2. Hans metod vidareutvecklades av Cauchy under föreläsningar i École Polytechnique3. Idén är följande: Vi utgår från ekvationen dy dx = f(x, y), under antagande av randvillkoret y(x 0 ) = y 0. Vi antar ytterligare, att f och f y är reella och kontinuerliga funktioner inom rektangeln x x 0 a, y y 0 b, och att sampelpunkterna x k = x 0 + hk är givna. Man kan då definiera en räcka av funktionsvärden y 0, y 1,..., y n med hjälp av rekursionslikheten (eller differensekvationen) y i+1 = y i + hf(x i, y i ), (i = 0, 1,..., n 1). 2 L. Euler: De Integratione Aequationum Differentialium per Approximationem, 1768-1769 3 F. Moigno: Leçons de calcul différentiel et de intégral, rédigées d aprés les méthodes et les ouvrages publiés ou inédits de M. A. L. Cauchy, 4 vol., Paris, 1840-1861 Vetenskapliga beräkningar III, Tom Sundius 2008 13
Cauchy visade, att under dessa omständigheter kommer den polygonbåge, som definieras av punkterna (x 0, y 0 ), (x 1, y 1 ),... att konvergera mot differentialekvationens lösning. Cauchys konvergensvillkor vidareutvecklades och förbättrades sedermera av Rudolf Lipschitz (1877) 4. Problemet med Eulers metod är att h (=steglängden) måste väljas liten för att metoden skall fungera. För att belysa detta problem, skall vi studera ett exempel: dy dx = e y x 2, y(0) = 0. Vi skall lösa denna ekvation med Eulers metod för x = 0, h, 2h,..., nh = 1, och väljer h = 0.05, 0.1, 0.2 och 0.3. 4 R.O.S. Lipschitz, Lehrbuch der Analysis, Vol II (1877). Vetenskapliga beräkningar III, Tom Sundius 2008 14
Resultatet visas i nedanstående tabell. Av jämförelsen med de exakta värdena framgår, att det finns ett systematiskt fel, vars storlek beror av h (jfr föregående avsnitt). Metoden måste därför modifieras, om den skall bli praktiskt användbar. Exakt lösn. Eulers approximativa metod x y h = 0.05 h = 0.10 h = 0.2 h = 0.3 0.0 0.0 0.1 0.09498 0.09694 0.09900 - - 0.2 0.17977 0.18261 0.18557 0.19200-0.3 0.25389 0.25672 0.25964-0.27300 0.4 0.31667 0.31872 0.32077 0.32505-0.5 0.36731 0.36786 0.36833 - - 0.6 0.40488 0.40329 0.40152 0.39756 0.39333 0.7 0.42839 0.42407 0.41942 - - 0.8 0.43686 0.42923 0.42119 0.40395-0.9 0.42929 0.41782 0.40582 - - 1.0 0.40477 0.38895 0.37264 0.33749 - Vetenskapliga beräkningar III, Tom Sundius 2008 15
Det är ganska lätt att skriva ett MATLAB program, som använder Eulers metod: function z=euler(funk,a,b,y0,n) % Eulers metod tillämpad på y =f(x,y) % Funktionsvärdena ges av funk(x) % n integrationssteg, randvillkor y(a)=y0 h = (b-a)/n; x = a + (0:n)*h; y(1) = y0; for i = 1:n y(i+1) = y(i) + h*feval(funk,x(i),y(i)); end z = [x, y ]; Utskriften består således av en tabell över punkter (x i, y i ). Som ett exempel skall vi tillämpa programmet på differentialekvationen y = 3x 2 y med begynnelsevillkoret y(0) = 1, vars exakta lösning är e x3. Om vi börjar med fyra steg och sedan fördubblar antalet steg upp till 512, får vi följande resultat: Vetenskapliga beräkningar III, Tom Sundius 2008 16
>> for k=1:8 m = 4*2^(k-1); s = euler( testde,0,1,1,m); disp(sprintf( %2.0f %6.4f %6.4f,m,s(m+1,2),exp(1)-s(m+1,2))) end 4 1.7676 0.9507 8 2.1181 0.6002 16 2.3726 0.3456 32 2.5312 0.1870 64 2.6207 0.0975 128 2.6684 0.0498 256 2.6931 0.0252 512 2.7056 0.0127 Tabellen innehåller funktionens beräknade värde i punkten x = 1, jämte avvikelsen från det exakta värdet (= e). Som vi ser, avtar felet sakta men säkert. Som vi redan konstaterat, finns det ett systematiskt fel i Eulers metod som beror av h. I själva verket har detta fel två komponenter. Den ena av dem beror på den rätlinjiga approximationen, som används vid varje steg. Dessutom finns det bidrag från tidigare fel. Vetenskapliga beräkningar III, Tom Sundius 2008 17
Tillsammans leder de till att den linjära approximationen inte tangerar den kurva, som vi önskat, utan istället en lösningskurva som passerar genom den nya punkten. Dessa felkomponenter brukar man kalla det lokala och det globala avkortningsfelet. Vid det första steget beräknas funktionsvärdet y 1 = y 0 + hf(x 0, y 0 ), medan funktionens Taylorutveckling ger y(x 1 ) = y 0 + hy 0 + h2 2 y (θ) = y 0 + hf(x 0, y 0 ) + h2 2 y (θ). Härav följer att det lokala avkortningsfelet blir y 1 y(x 1 ) = h2 2 y (θ) Mh 2, där M är en övre gräns för andra derivatan av lösningsfunktionen. Ett liknande lokalt fel uppträder vid varje steg av iterationsprocessen. När vi har beräknat n funktionsvärden i räckan, kommer därför n avkortningsfel att ha inträffat, så att det globala avkortningsfelet blir e = nmh 2 = M(b a)h, som är proportionellt mot h. Vetenskapliga beräkningar III, Tom Sundius 2008 18
I denna felanalys har avrundningsfelet lämnats obeaktat. Avrundningsfelen kommer också att ackumuleras, och kan analyseras på ett liknande sätt som det globala avkortningsfelet. Vi kommer då att finna, att avrundningsfelet har en övre gräns, som är omvänt proportionell mot steglängden h, alldeles som fallet var vid den numeriska beräkningen av derivator. Detta fel är dock i allmänhet mycket mindre än det globala avkortningsfelet, isynnerhet om man använder program som MATLAB, som baserar sig på dubbelprecision. Eulers metod kan härledas genom att man integrerar differentialekvationen mellan två sampelpunkter: y n+1 y n = xn+1 xn f(x, y)dx, samt approximerar integralen genom att anta, att integranden är konstant över hela intervallet: xn+1 xn f(x, y)dx hf(x n, y n ). Iställlet för att approximera integralen på detta sätt skulle vi t.ex. kunna använda någon av integrationsformlerna av Newton Cotes typ, som vi beskrev i avsnitt 7.4. Med hjälp av den symmetriska enpunktsformeln får vi t.ex. y (1) n+1 = y n 1 + 2hf(x n, y n ), som kan antas ge en bättre uppskattning av funktionsvärdet (prediktor formel). Vetenskapliga beräkningar III, Tom Sundius 2008 19