<<

#02 ; Matematiken

>>

Vi kommer att lösa approximativt vanliga differentiala ekvationer (ODE) med numeriska metoder. Runge-Kutta (kort RK) är en ganska bra metod för det ändamålet.

I början vet vi bara tex. y' = f(x, y) och y(x0) = y0 och vi vill hitta lösningen y = y(x) för vilket x-värde som hellst, men enbart numeriskt, inte symboliskt.

Alltså vi vet derivatan y' i början och vi vet också funktionens värde y där vi börjar, alltså y0, och vi vet alla x-värdena som vi kan fritt välja, men i början vet vi inte funktionens värde y för andra x-värden än x0 (fast kurvans lutning eller derivatan y' vi ju vet). Vi liksom inte ser den röda kurvan bredvid, vi bara vet hurudan är dess tangentens lutning i vissa punkter.

Vi kommer atta hitta de där andra y-värdena genom att iterera ("repetera metoden") med steget h. Det skulle ju bli mödosamt på hand, med penna och papper, men vi kommer att använda ett program för att utföra det hårda jobbet. Alla steg h mellan x-värdena är lika långa. Det gäller xn = x0 + n · h

Notation för derivatan kan behöva litet mera förklaring. Här menar vi att y' = f(x, y) betyder det samma som dy/dx eller d/dx f(x) eller D y(x) och den andra derivatan y'' = f(x, y, y') kan man också skriva på ett annat sätt d2y/dx2 eller d2/dx2 f(x) eller D2 y(x)

Runge-Kutta, första grad

Problemet : y' = f(x, y), y(x0) = y0

Iteration : xn+1 = xn + h

Metoden : yn+1 = yn + ( k1 + 2·k2 + 2·k3 + k4 ) / 6

där ...
  k1 = h · f(xn,       yn)
  k2 = h · f(xn + h/2, yn + k1/2)
  k3 = h · f(xn + h/2, yn + k2/2)
  k4 = h · f(xn + h,   yn + k3)

Runge-Kutta, andra grad

Problemet : y'' = f(x, y, y'), y(x0) = y0, y'(x0) = y0'

Iteration : xn+1 = xn + h

Metoden : yn+1 = yn + h · yn' + h · ( k1 + k2 + k3 ) / 6

          y'n+1 = yn' + ( k1 + 2·k2 + 2·k3 + k4 ) / 6

där ...
  k1 = h · f(xn,       yn,                    yn')
  k2 = h · f(xn + h/2, yn + yn'· h/2,          yn' + k1/2)
  k3 = h · f(xn + h/2, yn + yn'· h/2 + k1· h/4, yn' + k2/2)
  k4 = h · f(xn + h,   yn + yn'· h + k2· h/2,   yn' + k3)

Om det måste (och får) vara ytterst lätt och enkelt

Midpunktsmetoden är kanske lättare att förstå. Där ser man bättre hur matten fungerar. Vi skall bara minnas att RK är överlägset bättre i synnerhet med längre steg. Felet i RK metoden är av fjärde grad, men om felet av andra grad duger, då kan vi använda "midpunktmetoden", en enklare metod (i diff.ekv. av första grad).

yn+1 = yn + h · f ( xn + h/2, yn + k/2 )

där ... k = h · f ( xn, yn )

Här vet vi ju redan i början att ...

y' = f(x, y) 		; metoden med vilken man får derivatan y'
y(x0) = y0 		; punkten ( x0, y0 ) där man startar

När man vet hur man kan få derivatans värde y' från x och y ( alltså med y' = f(x, y) ) och man har en punkt y0 att starta från, då kan man räkna k från derivatan genom att multiplicera det med stegets längd h. Först är n=0, xn = x0, yn = y0 och man skall räkna derivatans värde så att man ökar x från x0 med halva steget h/2 och använder k/2 för att öka y-värdet från y0. Det där att öka y med k/2 är bara en gissning och ungefärligt värde, men det är inte så dåligt om steget h är tillräckligt kort och det handlar om en ganska snäll funktion.

Vi vet i princip alla derivator för x och y, kurvans lutning i alla möjliga punkter, men vi vet inte exakt vilka punkter man skall förbinda för att åstadkomma den enda kurvan som startar från punkt ( x0, y0 ). Det blir alltid litet fel, men det stör i praktiken inte så mycket om felet är tillräckligt små. Världen är full av fel, lilla och stora.

Det kunde vara ytterst svårt att nå en allmän symbolisk lösning till problemet. Kan vara mycket lättare att hitta en approximativ numerisk lösning för ett enstakt fall. Och det är just det vi är efter.

I midpunktsmetoden försöker man alltså först liksom gissa y-värdet i midpunkten, med halva steget h/2, och sedan räkna derivatan för den punkten och använda den derivatan för att nå en bättre approximation till funktionens värde y1 i hela stegets h avstånd från början. Och så vidare, från y1 till y2 , från y2 till y3 ... så länge som behövs.

Man kunde kanske inbilla sig att det våre bättre och noggrannare med "oändligt" små steg. Då skulle man emellertid behöva "oändligt" många steg. Tråkigt nog producerar varje steg litet inexakthet i datorens kalkyleringar, alltså litet fel. När man använder en klyftig metod med måtta, får man resultat snabbare och "rundningsfelet" i datorn växer inte betydande.


Meny
Huvudsida (finska)