2022年10月8日土曜日

[微分方程式] オイラー法

euler.md

オイラー法

微分方程式のシンプルな数値解法


原理

微分方程式 : $ \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 件のコメント:

コメントを投稿