【Python】オイラー法のプログラム

この記事では、Python言語でオイラー法(euler)により常微分方程式の解を求めるプログラムについてソースコード付きで解説します。

オイラー法

オイラー法は、常微分方程式を近似的に解くアルゴリズムの1つです。
【参考】オイラー法のアルゴリズム

今回は、このアルゴリズムをPython言語で実装してみました。

ソースコード

サンプルプログラムのソースコードです。

# 微分方程式の関数
def dxdt(x):
    c = 0.001
    r = 100
    e = 10

    return (e-x)/r/c

# オイラー法
def euler(x0, t0, tn, n):

    x = x0
    t = t0
    h = (tn - t0) /n
    X = []
    # 漸化式を計算
    for i in range(n):
        x += dxdt(x) * h
        X.append(x)
        t = t0 + i*h
    return X

def main():
    X = euler(0.0, 0.0, 1.0, 100)
    print(X)

if __name__ == '__main__':
    main()
euler(x0, t0, tn, n)
x0 初期条件
t0, tn 区間[t0, tn]
n 分割数

実行結果

サンプルプログラムの実行結果です。
時間tが0~1の区間を100分割して以下の微分方程式(RC回路の出力電圧v)を順に計算しています。

(1)   \begin{eqnarray*} \frac{dv(t)}{dt}=\frac{e-v(t)}{rc} \end{eqnarray*}

e:入力電圧[V]、v:出力電圧[V]、r:抵抗[Ω]、c:コンデンサ容量[F]

[1.0, 1.9, 2.71, , …, 9.999704873345692, 9.999734386011124]

過渡応答により、時間経過につれて入力電圧10[V]に近づいています。

【関連記事】
C言語で数値計算処理
C言語入門
数値計算プログラミング入門

コメント