|
Ez a szócikk vagy szakasz lektorálásra, tartalmi javításokra szorul. A felmerült kifogásokat a szócikk vitalapja részletezi (vagy extrém esetben a szócikk szövegében elhelyezett, kikommentelt szövegrészek). Ha nincs indoklás a vitalapon (vagy szerkesztési módban a szövegközben), bátran távolítsd el a sablont! Csak akkor tedd a lap tetejére ezt a sablont, ha az egész cikk megszövegezése hibás. Ha nem, az adott szakaszba tedd, így segítve a lektorok munkáját! |
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
[szerkesztés]
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.
![{\displaystyle y'(t)=f(\;t\;,\;y(t)\;)\qquad y(t_{0})=y_{0}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f9a493ab2d92a2e76cc33f54f1ac09c0ea9ed5d6)
Azaz tetszőlegesen rögzített pozitív valós, tipikus esetben kicsiny
lépésköz esetén az
-edik lépésben a kezdetiérték-probléma
megoldásának egy olyan
![{\displaystyle y(t_{n})\;\approx \;y_{n}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/033ed77762765021cc72ee5d11cb4447e5b8b09c)
közelítését adja a
![{\displaystyle t_{n}=t_{0}+n\cdot h}](https://wikimedia.org/api/rest_v1/media/math/render/svg/800e00a81acabafeafa55fcc3db94c2792b7718a)
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
-szeresre zsugorodik.
A
lépésköz rögzítése után az alábbi,
-szerinti rekurziós lépésekkel kapjuk az
megoldásfüggvény közelítését.
![{\displaystyle {\begin{aligned}y_{n+1}&=y_{n}+h\cdot {a_{n}+2\cdot b_{n}+2\cdot c_{n}+d_{n} \over 6}\\{\text{ahol}}\\a_{n}&=f(\;t_{n}\;,\;y_{n}\;)\\b_{n}&=f(\;t_{n}+{\tfrac {1}{2}}h\;,\;y_{n}+{\tfrac {1}{2}}h\cdot a_{n}\;)\\c_{n}&=f(\;t_{n}+{\tfrac {1}{2}}h\;,\;y_{n}+{\tfrac {1}{2}}h\cdot b_{n}\;)\\d_{n}&=f(\;t_{n}+h\;,\;y_{n}+h\cdot c_{n}\;)\end{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/89ac39aeadced8b909abfe69a077c909e716b59c)
Így, a
helyhez tartozó
közelítőérték egyenlő a
helyhez tartozó
közelítőérték, plusz a becsült meredekség szorozva az intervallum
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:
![{\displaystyle {\begin{aligned}a_{n}&=f(\;t_{n}\;,\;y_{n}\;)\\&\approx f(\;t_{n}\;,\;y(t_{n})\;)\\&=y'(t_{n})\\b_{n}&=f(\;t_{n}+{\tfrac {1}{2}}h\;,\;y_{n}+{\tfrac {1}{2}}h\cdot a_{n}\;)\\&\approx f(\;t_{n}+{\tfrac {1}{2}}h\;,\;y(t_{n})+{\tfrac {1}{2}}h\cdot y'(t_{n})\;)\\&\approx f(\;t_{n}+{\tfrac {1}{2}}h\;,\;y(t_{n}+{\tfrac {1}{2}}h)\;)\\&=y'(t_{n}+{\tfrac {1}{2}}h)\\c_{n}&=f(\;t_{n}+{\tfrac {1}{2}}h\;,\;y_{n}+{\tfrac {1}{2}}h\cdot b_{n}\;)\\&\approx f(\;t_{n}+{\tfrac {1}{2}}h\;,\;y(t_{n})+{\tfrac {1}{2}}h\cdot y'(t_{n}+{\tfrac {1}{2}}h)\;)\\&\approx f(\;t_{n}+{\tfrac {1}{2}}h\;,\;y(t_{n}+{\tfrac {1}{2}}h)\;)\\&=y'(t_{n}+{\tfrac {1}{2}}h)\\d_{n}&=f(\;t_{n}+h\;,\;y_{n}+h\cdot c_{n}\;)\\&\approx f(\;t_{n}+h\;,\;y(t_{n})+h\cdot y'(t_{n}+{\tfrac {1}{2}}h)\;)\\&\approx f(\;t_{n}+h\;,\;y(t_{n}+h)\;)\\&=y'(t_{n}+h)\end{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/52a33e5255b0abc732d8b1ef9fa3d4ea0226ec8b)
E négy közelítés átlagolásánál a
és
szélekhez képest a
felezőnél dupla súlyt alkalmazunk.
![{\displaystyle {\begin{aligned}{\mbox{átlagos meredekség}}&\;\approx \;{y'(t_{n})+2\cdot y'(t_{n}+{\tfrac {1}{2}}h)+2\cdot y'(t_{n}+{\tfrac {1}{2}}h)+y'(t_{n}+h) \over 6}\\&\;\approx \;{1\cdot a_{n}+2\cdot b_{n}+2\cdot c_{n}+1\cdot d_{n} \over 6}\end{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/26a8c415d1e8589042542dd3a9b573e1776222b4)
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.
A fent említett Runge–Kutta-módszercsalád általánosítása az explicit Runge–Kutta-módszer, amit a
![{\displaystyle y_{n+1}=y_{n}+h\sum _{i=1}^{s}b_{i}k_{i},}](https://wikimedia.org/api/rest_v1/media/math/render/svg/84fa47cf3289c5ab2067fe46f748f33d4b6be48c)
ad meg, ahol
![{\displaystyle k_{1}=f(t_{n},y_{n}),\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c1c143e6ae2fbe576e8b27f7cd458caffdd0622a)
![{\displaystyle k_{2}=f(t_{n}+c_{2}h,y_{n}+a_{21}hk_{1}),\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ac1c3da55cc8b7b04a6fb47e29b5c9d3a3a5833b)
![{\displaystyle \vdots }](https://wikimedia.org/api/rest_v1/media/math/render/svg/f8039d9feb6596ae092e5305108722975060c083)
![{\displaystyle k_{s}=f(t_{n}+c_{s}h,y_{n}+a_{s1}hk_{1}+a_{s2}hk_{2}+\cdots +a_{s,s-1}hk_{s-1}).}](https://wikimedia.org/api/rest_v1/media/math/render/svg/abf1f9cd4215ea890939a606a057eb910ed3c2cc)
- (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 < i ≤ s), 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
|
|
![{\displaystyle c_{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0b30ba1b247fb8d334580cec68561e749d24aff2) |
|
|
![{\displaystyle c_{3}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b1dc52bfbaf6e577fbed72a716068f4533700bd3) |
![{\displaystyle a_{31}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7c322ba2770ed3e56043ffd0247fb8b9d3aa63aa) |
|
|
![{\displaystyle \vdots }](https://wikimedia.org/api/rest_v1/media/math/render/svg/f8039d9feb6596ae092e5305108722975060c083) |
![{\displaystyle \vdots }](https://wikimedia.org/api/rest_v1/media/math/render/svg/f8039d9feb6596ae092e5305108722975060c083) |
|
|
|
|
|
|
|
![{\displaystyle a_{s,s-1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1451b9dadcfd3c13dba27a753bb22a49aea92ab6) |
|
|
|
![{\displaystyle b_{1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9af2720c91be489f57ecde4bb651b95e113d0144) |
![{\displaystyle b_{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2530a260ad35bf21ee61f1f4d6493ae0474f6068) |
![{\displaystyle \cdots }](https://wikimedia.org/api/rest_v1/media/math/render/svg/e1d67495288eac0fa90d5bbcad7d9a343c15ad56) |
![{\displaystyle b_{s-1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a55357ce095ff03cd534e917301834e3b603d2f0) |
|
A Runge–Kutta-módszer konzisztens, ha
![{\displaystyle \sum _{j=1}^{i-1}a_{ij}=c_{i}\ \mathrm {ha} \ i=2,\ldots ,s.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1838a3988e267e6b874c36d4bcc3d9b4055c0f5d)
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.
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
képlet ad meg.
Ez az egyetlen explicit Runge–Kutta-módszer egy lépcsővel.
Egy példa a másodrendű két lépcsős módszerre a középponti módszer:
![{\displaystyle y_{n+1}=y_{n}+hf\left(t_{n}+{\tfrac {1}{2}}h,y_{n}+{\tfrac {1}{2}}hf(t_{n},y_{n})\right).}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2e67ad3173eab5ceffebadae761874ba4fbb9957)
Az erre megfelelő táblázat:
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.
A következő egy példa a kétlépcsős explicit Runge–Kutta-módszerre:
a kezdeti értéket meghatározó képlet
![{\displaystyle y'=\tan(y)+1,\quad y(1)=1,\ t\in [1,1.1]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c67960f717992d40a86b329a9428590e7816cb09)
a h=0,025 lépésköz
A fenti táblát meghatározó egyenrangú számítások:
![{\displaystyle k_{1}=y_{n}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/fcc82ba2684e5a9aa68da0f623df7a8800b9dc00)
![{\displaystyle k_{2}=y_{n}+{\tfrac {2}{3}}hf(t_{n},k_{1})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cf05af4229ac24953943ccc271a8249860ec9d94)
![{\displaystyle y_{n+1}=y_{n}+h\left({\tfrac {1}{4}}f(t_{n},k_{1})+{\tfrac {3}{4}}f(t_{n}+{\tfrac {2}{3}}h,k_{2})\right)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d0734e8cb6038f6037815db53c055bb78362b186)
![{\displaystyle t_{0}=1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6ad9cba57d757e960f326f41df30647672e5438c) |
|
|
|
|
|
|
![{\displaystyle k_{1}=y_{0}=1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5680e9cac1ab9344d1f7ae8916b0f5d1ae823e07) |
![{\displaystyle f(t_{0},k_{1})=2.557407725}](https://wikimedia.org/api/rest_v1/media/math/render/svg/84bca0e3659f442126ac11ccb1acb9fe87e2d4d8) |
|
|
|
|
|
![{\displaystyle k_{1}=y_{1}=1.066869388}](https://wikimedia.org/api/rest_v1/media/math/render/svg/669b63cd2e3457e6be8113f2b8a34896304a18d5) |
![{\displaystyle f(t_{1},k_{1})=2.813524695}](https://wikimedia.org/api/rest_v1/media/math/render/svg/8928850b0f72f0122c77fed90e302520297ac8b8) |
|
|
|
|
|
![{\displaystyle k_{1}=y_{2}=1.141332181}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7da9f2fb85872bfee76ab5a4accd2f570a51a49d) |
![{\displaystyle f(t_{2},k_{1})=3.183536647}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2e52b2d52014addd073286fc1badc913e1d5eab8) |
|
|
|
|
|
![{\displaystyle k_{1}=y_{3}=1.227417567}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7abe02369d2691032f4ba6f1ee2b458dbf862e92) |
![{\displaystyle f(t_{3},k_{1})=3.796866512}](https://wikimedia.org/api/rest_v1/media/math/render/svg/303229334f0ce2c0d03b39583be9f54024cc5afe) |
|
|
|
Az aláhúzott kifejezések jelzik a számszerû megoldásokat.Megjegyzendõ, az
s újraszámolása érdekében
-et használtunk.
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:
![{\displaystyle y_{n+1}^{*}=y_{n}+h\sum _{i=1}^{s}b_{i}^{*}k_{i},}](https://wikimedia.org/api/rest_v1/media/math/render/svg/780a80baf60db524d50c011101f7abfa2725556e)
ahol, a
megegyezik a magasabb rendű módszerrel. Ekkor a hiba:
![{\displaystyle e_{n+1}=y_{n+1}-y_{n+1}^{*}=h\sum _{i=1}^{s}(b_{i}-b_{i}^{*})k_{i},}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4afb9243a5402aad69b60a550ca706bb29982983)
ami
. A Butcher-táblázat erre a módszerre ki van bővítve, így megadja a
értékeit:
|
0
|
|
![{\displaystyle c_{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0b30ba1b247fb8d334580cec68561e749d24aff2) |
|
|
![{\displaystyle c_{3}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b1dc52bfbaf6e577fbed72a716068f4533700bd3) |
![{\displaystyle a_{31}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7c322ba2770ed3e56043ffd0247fb8b9d3aa63aa) |
|
|
![{\displaystyle \vdots }](https://wikimedia.org/api/rest_v1/media/math/render/svg/f8039d9feb6596ae092e5305108722975060c083) |
![{\displaystyle \vdots }](https://wikimedia.org/api/rest_v1/media/math/render/svg/f8039d9feb6596ae092e5305108722975060c083) |
|
|
|
|
|
|
|
![{\displaystyle a_{s,s-1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1451b9dadcfd3c13dba27a753bb22a49aea92ab6) |
|
|
|
![{\displaystyle b_{1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9af2720c91be489f57ecde4bb651b95e113d0144) |
![{\displaystyle b_{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2530a260ad35bf21ee61f1f4d6493ae0474f6068) |
![{\displaystyle \cdots }](https://wikimedia.org/api/rest_v1/media/math/render/svg/e1d67495288eac0fa90d5bbcad7d9a343c15ad56) |
![{\displaystyle b_{s-1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a55357ce095ff03cd534e917301834e3b603d2f0) |
|
|
|
![{\displaystyle b_{1}^{*}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0953723c963951e2e2809e229186663dce2f8ea7) |
![{\displaystyle b_{2}^{*}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/8c8ddbe7a5d78191c60061f92a5f8c585a3445a7) |
![{\displaystyle \cdots }](https://wikimedia.org/api/rest_v1/media/math/render/svg/e1d67495288eac0fa90d5bbcad7d9a343c15ad56) |
![{\displaystyle b_{s-1}^{*}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0bd201def0de4d6070346df03aba21b91139bc7b) |
|
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:
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ű).
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:
![{\displaystyle {\begin{array}{c|cccc}c_{1}&a_{11}&a_{12}&\dots &a_{1s}\\c_{2}&a_{21}&a_{22}&\dots &a_{2s}\\\vdots &\vdots &\vdots &\ddots &\vdots \\c_{s}&a_{s1}&a_{s2}&\dots &a_{ss}\\\hline &b_{1}&b_{2}&\dots &b_{s}\\\end{array}}={\begin{array}{c|c}\mathbf {c} &A\\\hline &\mathbf {b^{T}} \\\end{array}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/073f970cca759dbf28b4bf35d4bdb72414977c00)
A megközelítő megoldás a kezdeti érték problémára utal az együtthatók nagyobb számára.
![{\displaystyle y_{n+1}=y_{n}+h\sum _{i=1}^{s}b_{i}k_{i}\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7ef9dc020fb66a93ae6e85a294447b91585cebe7)
![{\displaystyle k_{i}=f\left(t_{n}+c_{i}h,y_{n}+h\sum _{j=1}^{s}a_{ij}k_{j}\right).}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9265454eb36c9c2722fc8f7ca4bac066838bf0dc)
Az
mátrix telítettsége miatt, az egyes
becslése jelentékeny mértékben fog függeni az
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:
![{\displaystyle y_{n+1}=y_{n}+hf(t_{n}+h,y_{n+1})\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e0663bb195516c0178fca19e9d033411acde1319)
Ennek táblázata egyszerű:
![{\displaystyle {\begin{array}{c|c}1&1\\\hline &1\\\end{array}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ba161e3ed2a47c2bba7805c3cf5c52f9e5eba8d8)
Még az egyszerűbb implicit módszer alkalmazása is bonyolulttá válhat, ami a ki kifejezésből látszik is:
![{\displaystyle k_{1}=f(t_{n}+c_{1}h,y_{n}+ha_{11}k_{1})\rightarrow k_{1}=f(t_{n}+h,y_{n}+hk_{1}).}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a71b74f8f21184bf18986660df4628e091ed3193)
Ebben az esetben, a fenti bonyolult kifejezés leegyszerűsíthető a következőképpen:
![{\displaystyle y_{n+1}=y_{n}+hk_{1}\rightarrow hk_{1}=y_{n+1}-y_{n}\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/99d351257cef0b65ab4d1502a96cc8bcc9522864)
így hát
![{\displaystyle k_{1}=f(t_{n}+h,y_{n}+y_{n+1}-y_{n})=f(t_{n}+h,y_{n+1}).\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/902e1553ce577c6534bea3cc1206facde897bded)
amiből következik, hogy:
![{\displaystyle y_{n+1}=y_{n}+hf(t_{n}+h,y_{n+1})\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e0663bb195516c0178fca19e9d033411acde1319)
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).
Legyen mondjuk a
differenciálegyenlet, aminek a megoldása:
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.