オイラー法
微分方程式のシンプルな数値解法
原理
微分方程式 : $ \frac{dy}{dx} = f(x,y) $, 初期条件 $x_0$ , $y_0 = y(x_0) $ を数値的に求める。
まず、差分化する。
$$ \frac{y_{i+1} - y_{i}}{x_{i+i} - x_{i}} = \frac{y_{i+1} - y_{i}}{\Delta x} = f $$
これより、
$$ y_{i+1} = y_i + f \Delta x $$
適当な $\Delta x$ を決める。
まず$i=0$のとき、$x=x_0$ は既知なので $y_1 = y_0 + f \Delta x $ で既知な $x_0, y_0$ から $y_1$ が求まった。
あとはループを回せばよい。
例題
微分方程式 : $ \frac{dy}{dx} = 2x - 2xy $ を初期条件 $x_0=0$, $y_0=3$ で解け。
ただし、計算範囲は $x=0-3$ とする。
$\Delta x$ は $0.1$ と $0.01$ の場合で計算して理論解との誤差がどうなるか比較せよ。
理論解は $y = 1+2e^{-x^2}$ です。
解法
fortranで計算しました
PROGRAM euler
INTEGER :: i, Nmax=30 ! 300
REAL(8) :: x, y, dx=1d-1 ! 1d-2
x = 0.d0 ! 初期値
y = 3.d0
DO i = 1, Nmax
WRITE(10,*) x, y, 1.d0+2.d0*exp(-x**2)
x = x + dx
y = y + dx*f(x,y)
END DO
CONTAINS
FUNCTION f(x,y) ! 微分方程式の右辺
REAL(8) :: x, y, f
f = 2.d0*x - 2.d0*x*y
END
END PROGRAM euler
結果
$\Delta x = 0.1$ (上)と$\Delta x = 0.01$ (下)
0 件のコメント:
コメントを投稿