『パソコンで見る天体の動き』に解説してある常微分方程式の数値解法を Euler 法以外全部 Lua で実装したのでここにまとめておく。全部クロージャを利用している。
- h および (h/numOfDiv) は、有限の2進数で表現できる値にすることが望ましい。
引数 | 説明 |
---|---|
{funcs} | 方程式リスト |
t0 | 独立変数初期値 |
{inits} | 従属変数 (未知函数) 初期値リスト |
{initsDot} | 従属変数 (未知函数) の 1 次微分の初期値リスト |
{pairsOfInits} | 段数に応じた従属変数 (未知函数) 初期値ペア |
h | 刻み幅 |
numOfDiv | 1 刻みの内部分割数 (デフォルト値は 1) |
tol | 1 刻み後の許容差 (デフォルト値は 0.001) |
1. 古典的 Runge-Kutta 法
構文: rkClassic({funcs}, t0, {inits}, h [, numOfDiv])
返値: h 後の t0, {h 後の inits} (を返す函数)
2. Shanks による 12 段 8 次の Runge-Kutta 法
構文: rkShanks8({funcs}, t0, {inits}, h [, numOfDiv])
返値: h 後の t0, {h 後の inits} (を返す函数)
3. 特殊な方程式に対する Nyström 法 (5 次)
構文: nystroem({funcs}, t0, {inits}, {initsDot}, h [, numOfDiv])
返値: h 後の t0, {h 後の inits}, {h 後の initsDot} (を返す函数)
4. Fehlberg 法 (6 段 5 次 & 4 次)
構文: fehlberg({funcs}, t0, {inits}, h [, tol])
返値: h 後の t0, {h 後の inits}, 分割数 (を返す函数)
5. 特殊な方程式に対する 4 段の Cowell 法
構文: cowell4({funcs}, t0, {pairsOfInits}, h)
返値: h 後の t0, {h 後の pairsOfInits の先頭の inits}, 近似回数 (を返す函数)
6. 特殊な方程式に対する 7 段の Cowell 法
構文: cowell7({funcs}, t0, {pairsOfInits}, h)
返値: h 後の t0, {h 後の pairsOfInits の先頭の inits}, 近似回数 (を返す函数)
7. 補外法
構文: extrapolation({funcs}, t0, {inits}, h [, numOfDiv])
返値: h 後の t0, {h 後の inits} (を返す函数)
8. 特殊な方程式に対する補外法
構文: gragg({funcs}, t0, {inits}, {initsDot}, h [, numOfDiv])
返値: h 後の t0, {h 後の inits}, {h 後の initsDot} (を返す函数)
9. Nspire の組込函数である rk23() も同じような形で使えるようにする。
構文: 未
返値: 未
参考:
- 作者: 長沢工,檜山澄子
- 出版社/メーカー: 地人書館
- 発売日: 1992/10/01
- メディア: 単行本
- クリック: 1回
- この商品を含むブログ (1件) を見る