この記事では、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)
e:入力電圧[V]、v:出力電圧[V]、r:抵抗[Ω]、c:コンデンサ容量[F]
[1.0, 1.9, 2.71, , …, 9.999704873345692, 9.999734386011124]
過渡応答により、時間経過につれて入力電圧10[V]に近づいています。
【関連記事】
C言語で数値計算処理
C言語入門
数値計算プログラミング入門
コメント