Runge–Kutta-módszer

Innen: Hungaropédia
Ugrás a navigációhozUgrás a kereséshez

A Runge–Kutta-módszerek családja a differenciálegyenletek numerikus analízisének széles körben ismert és alkalmazott közelítő eljárása, amelyet Carl Runge és Martin Kutta német matematikusok dolgoztak ki 1900 körül.

A közönséges negyedrendű Runge–Kutta-módszer

A Runge–Kutta-módszercsalád közönséges negyedrendű tagja annyira elterjedten használatos, hogy egyszerűen csak „a Runge–Kutta-módszer”-ként hivatkoznak rá. E módszer az alábbi kezdetiérték-probléma egy negyedrendű közelítő megoldását adja.

y(t)=f(t,y(t))y(t0)=y0

Azaz tetszőlegesen rögzített pozitív valós, tipikus esetben kicsiny h lépésköz esetén az n-edik lépésben a kezdetiérték-probléma y(t) megoldásának egy olyan

y(tn)yn

közelítését adja a

tn=t0+nh

helyen, amely közelítés hibája negyedrendű. E negyedrendűség azt jelenti, hogy a választott lépésköz zsugorításakor annak negyedik hatványával zsugorodik a hibára adott felső becslés. Például a lépésköz harmadolása árán, azaz nagyjából háromszor annyi számolás árán a hibakorlát (1/3)4=1/81-szeresre zsugorodik. A h lépésköz rögzítése után az alábbi, n-szerinti rekurziós lépésekkel kapjuk az y(t) megoldásfüggvény közelítését.

yn+1=yn+han+2bn+2cn+dn6aholan=f(tn,yn)bn=f(tn+12h,yn+12han)cn=f(tn+12h,yn+12hbn)dn=f(tn+h,yn+hcn)

Így, a tn+1 helyhez tartozó yn+1 közelítőérték egyenlő a tn helyhez tartozó yn közelítőérték, plusz a becsült meredekség szorozva az intervallum h hosszával. A meredekség becslése egy, most nem részletezett matematikai megfontolás alapján súlyozott középértéke az alábbi négy meredekségi becslésnek:

an=f(tn,yn)f(tn,y(tn))=y(tn)bn=f(tn+12h,yn+12han)f(tn+12h,y(tn)+12hy(tn))f(tn+12h,y(tn+12h))=y(tn+12h)cn=f(tn+12h,yn+12hbn)f(tn+12h,y(tn)+12hy(tn+12h))f(tn+12h,y(tn+12h))=y(tn+12h)dn=f(tn+h,yn+hcn)f(tn+h,y(tn)+hy(tn+12h))f(tn+h,y(tn+h))=y(tn+h)

E négy közelítés átlagolásánál a tn és tn+1 szélekhez képest a tn+0.5 felezőnél dupla súlyt alkalmazunk.

átlagos meredekségy(tn)+2y(tn+12h)+2y(tn+12h)+y(tn+h)61an+2bn+2cn+1dn6

Mivel a megoldásfüggvény felvett értékeire csak additív műveleteket és a skalárral való szorzás műveletét alkalmazzuk, lényegében ezért a módszer nem csak skalár értékű megoldásfüggvények, hanem vektor értékűek esetén is alkalmazható. Ilyen például a Schrödinger-differenciálegyenlet, amelynek Hamilton-operátorát használjuk a fenti szerepében.

Explicit Runge–Kutta-módszer

A fent említett Runge–Kutta-módszercsalád általánosítása az explicit Runge–Kutta-módszer, amit a

yn+1=yn+hi=1sbiki,

ad meg, ahol

k1=f(tn,yn),
k2=f(tn+c2h,yn+a21hk1),
k3=f(tn+c3h,yn+a31hk1+a32hk2),
ks=f(tn+csh,yn+as1hk1+as2hk2++as,s1hks1).
(Megjegyzés: a fenti egyenletek különböző formákban is megjelenhetnek egyéb forrásokból, de jelentésük azonos).

Ahhoz hogy meghatározzunk egy bizonyos módszert,kell egy s egész változó (a szakaszok száma), illetve az aij (1 ≤ j < is), bi (i = 1, 2, ..., s) és a ci (i = 2, 3, ..., s) együtthatók. Ezek az adatok általában egy mnemonik eszközbe kerülnek be, ami a Butcher táblájaként ismert (Butcher tableau, John C. Butcher neve után):

0
c2 a21
c3 a31 a32
cs as1 as2 as,s1
b1 b2 bs1 bs

A Runge–Kutta-módszer konzisztens, ha

j=1i1aij=cihai=2,,s.

Ugyanakkor vannak más követelmények, ha azt szeretnénk, hogy a módszernek legyen p fokszáma, így a kerekítési hiba O(hp+1) lesz. Például egy kétlépcsős módszer másodrendű ha b1 + b2 = 1, b2c2 = 1/2, és b2a21 = 1/2.

Példák

A RK4 szerkezete a következő táblázat szerint értelmezhető:

0
1/2 1/2
1/2 0 1/2
1 0 0 1
1/6 1/3 1/3 1/6

Habár a legegyszerűbb Runga-Kutta-módszer az Euler-módszer maga, amelynek yn+1=yn+hf(tn,yn) képlet ad meg. Ez az egyetlen explicit Runge–Kutta-módszer egy lépcsővel.

0
1

Egy példa a másodrendű két lépcsős módszerre a középponti módszer:

yn+1=yn+hf(tn+12h,yn+12hf(tn,yn)).

Az erre megfelelő táblázat:

0
1/2 1/2
0 1

Megjegyzendő, a középponti módszer nem a legmegfelelőbb RK-módszer. A Heun-módszer egy alternatív megoldást kínál, ahol a tábla 1/2-ei 1-re cserélődnek, és a b sora pedig [1/2,1/2]. Ha valaki minimalizálni akarja a kerekítés által keletkezett hibákat, akkor az alábbi módszert kell használnia (Atkinson p. 423). Más fontos módszerek: Fehlberg, Cash-Karp és Dormand-Prince.

Használat

A következő egy példa a kétlépcsős explicit Runge–Kutta-módszerre:

0
2/3 2/3
1/4 3/4

a kezdeti értéket meghatározó képlet

y=tan(y)+1,y(1)=1,t[1,1.1]

a h=0,025 lépésköz A fenti táblát meghatározó egyenrangú számítások:

k1=yn
k2=yn+23hf(tn,k1)
yn+1=yn+h(14f(tn,k1)+34f(tn+23h,k2))
t0=1
y0=1
t1=1.025
k1=y0=1 f(t0,k1)=2.557407725 k2=y0+2/3hf(t0,k1)=1.042623462
y1=y0+h(1/4*f(t0,k1)+3/4*f(t0+2/3h,k2))=1.066869388
t2=1.05
k1=y1=1.066869388 f(t1,k1)=2.813524695 k2=y1+2/3hf(t1,k1)=1.113761467
y2=y1+h(1/4*f(t1,k1)+3/4*f(t1+2/3h,k2))=1.141332181
t3=1.075
k1=y2=1.141332181 f(t2,k1)=3.183536647 k2=y2+2/3hf(t2,k1)=1.194391125
y3=y2+h(1/4*f(t2,k1)+3/4*f(t2+2/3h,k2))=1.227417567
t4=1.1
k1=y3=1.227417567 f(t3,k1)=3.796866512 k2=y3+2/3hf(t3,k1)=1.290698676
y4=y3+h(1/4*f(t3,k1)+3/4*f(t3+2/3h,k2))=1.335079087

Az aláhúzott kifejezések jelzik a számszerû megoldásokat.Megjegyzendõ, az yis újraszámolása érdekében f(ti,k1)-et használtunk.

Adaptív Runge–Kutta-módszer

Az adaptív módszer arra volt tervezve, hogy megadja a becsült helyi kerekítési hibát minden egyes RK lépésben. Ezt úgy valósította meg, hogy két módszert tartalmaz a táblázat, egyet p-ed rendűvel és egyet p-1-ed rendűvel. A kisebb rendű lépés adott:

yn+1*=yn+hi=1sbi*ki,

ahol, a ki megegyezik a magasabb rendű módszerrel. Ekkor a hiba:

en+1=yn+1yn+1*=hi=1s(bibi*)ki,

ami O(hp). A Butcher-táblázat erre a módszerre ki van bővítve, így megadja a bi* értékeit:

0
c2 a21
c3 a31 a32
cs as1 as2 as,s1
b1 b2 bs1 bs
b1* b2* bs1* bs*

A RK Fehlberg módszernek a két rendszere az ötöd- és negyedrendű. Ennek a kibővített Butcher-táblázata a következő:

0
1/4 1/4
3/8 3/32 9/32
12/13 1932/2197 −7200/2197 7296/2197
1 439/216 −8 3680/513 -845/4104
1/2 −8/27 2 −3544/2565 1859/4104 −11/40
16/135 0 6656/12825 28561/56430 −9/50 2/55
25/216 0 1408/2565 2197/4104 −1/5 0

Habár a legegyszerűbb adaptív Runge–Kutta-módszer a másodrendű Heun-módszert és az elsőrendű Euler-módszert foglalja magába. Ennek a kibővített Butcher-táblázata:

0
1 1
1/2 1/2
1 0

A hiba eredményét a lépték határozza meg. Más adaptiv Runge–Kutta-módszerek a Bogacki-Shampine-módszer (harmad-és másodrendű), a Cash-Karp-módszer és a Dormand-Prince-módszer (mindkettő ötöd- és negyedrendű).

Implicit Runge-Kutta-módszer

Az implicit módszerek jóval általánosabbak az expliciteknél. Az eltérés a Butcher-táblázatnál merül fel: az implicit módszernél, a mátrix aij együtthatója nem feltétlenül alacsony háromszög:

c1a11a12a1sc2a21a22a2scsas1as2assb1b2bs=cAbT

A megközelítő megoldás a kezdeti érték problémára utal az együtthatók nagyobb számára.

yn+1=yn+hi=1sbiki
ki=f(tn+cih,yn+hj=1saijkj).

Az aij mátrix telítettsége miatt, az egyes ki becslése jelentékeny mértékben fog függeni az f(t,y) függvénytől. A nehézségek ellenére, az implicit módszerek nagy jelentőséggel birnak az erősen stabil állapotuk miatt, ami különösen fontos a parciális differenciál egyenletek megoldásában. A legegyszerűbb példa egy implicit Runge–Kutta-módszerre fordított Euler-módszer:

yn+1=yn+hf(tn+h,yn+1)

Ennek táblázata egyszerű:

111

Még az egyszerűbb implicit módszer alkalmazása is bonyolulttá válhat, ami a ki kifejezésből látszik is:

k1=f(tn+c1h,yn+ha11k1)k1=f(tn+h,yn+hk1).

Ebben az esetben, a fenti bonyolult kifejezés leegyszerűsíthető a következőképpen:

yn+1=yn+hk1hk1=yn+1yn

így hát

k1=f(tn+h,yn+yn+1yn)=f(tn+h,yn+1).

amiből következik, hogy:

yn+1=yn+hf(tn+h,yn+1)

Noha egyszerűbb, mint a módosítások előtti „nyers” kifejezés, ez egy implicit összefüggés, tehát a konkrét megoldás problémafüggő. A többlépéses implicit módszert sikeresen használják a kutatók. Az egyensúly összeállítása (kombinációja), a magasabb rendpontosság kevesebb lépésben és a léphetőség (stepping) egyedül az előző értékben válik érdekessé, ugyanakkor a bonyolult példa jellegzetes kivitelezése, és a tény, hogy ki ismételt megközelítései mutatják hogy ezek hasonlóak (ugyanazok).

Algoritmus

Legyen mondjuk a y'(x)=2*y(x);y(0)=3 differenciálegyenlet, aminek a megoldása:y(x)=3*e2*x

import math
import numpy as np
import matplotlib.pyplot as plt
x0=0
y0=3
h=0.8
def ypontos():
	x=np.linspace(0,10,100)
	y=3*np.exp(-2*x)
	plt.plot(x,y,"-b")
def f(x, y):
	return(-2*y)
def RungeKutta2nd(f, h, x0, y0):
	x=np.arange(0, 10, h)
	y=x*0
	y[0]=y0
	for i in range(10):
		k1=h*f(x[i],y[i])
		k2=h*f(x[i]+h/2,y[i]+k1/2)
		y[i+1]=y[i]+k2
	plt.plot(x,y, "--r")
	plt.text(-0.5, 3,'Masodrendu Runge-Kutta (h=0.8)',color='red', fontsize=10)
def RungeKutta4th(f, h, x0, y0):
	x=np.arange(0, 10, h)
	y=x*0
	y[0]=y0
	for i in range(10):
		k1=h*f(x[i],y[i])
		k2=h*f(x[i]+h/2,y[i]+k1/2)
		k3=h*f(x[i]+h/2,y[i]+k2/2)
		k4=h*f(x[i]+h,y[i]+k3)
		y[i+1]=y[i]+(k1+2*k2+2*k3+k4)/6
	plt.plot(x,y, "--g")
	plt.text(5, 3,'Negyedrendu Runge-Kutta (h=0.8)',color='green', fontsize=10)
ypontos()
RungeKutta2nd(f, h, x0, y0)
RungeKutta4th(f, h, x0, y0)
plt.show()

A program lefuttatása után egy grafikonon összehasonlíthatjuk a másodrendű illetve 4.-edrendű Runge-Kutta módszereket illetve a tényleges megoldást.