2024.3.4 solve_ivpによる常微分方程式の数値解法【scipy】
常微分方程式の初期値問題(IVP:initial value problem)を解くオブジェクト。
最低限必要な書式は以下の通り。
result = solve_ivp(関数名,[開始時刻、終端時刻], 初期値)
開始時刻、終端時刻はリストやタプルで与える。これらの間を自動的に刻み、計算を行う。時刻の列はresult.tに格納される。
初期値もリストやタプルで与える、ベクトル型であることが要求される。
code:solve_ivp1.py
from scipy.integrate import solve_ivp as solve_ivp
import matplotlib.pyplot as plt
def func_xd(t, x):
return A@x
##
t_initial = 0 # 初期時刻
t_final = 10 # 終端時刻
t_interval = 0.01 # 時間の刻み幅
m, c, k = 1.0, 1.0, 1.0 # 質量、減衰係数、ばね定数
###
A = 0, 1], [-k/m, -c/m
B = 0], [1
result = solve_ivp(func_xd, t_span, y_initial)
plt.grid()
plt.plot(result.t, result.y0,:, lw=3, label='$x$') plt.plot(result.t, result.y1,:, lw=3, label='$\dot{x}$') plt.legend()
plt.show()
結果:
result.t
計算を行った時刻の列が格納された1次元のndarray。
result.y
計算結果が格納された2次元のndarray。計算結果は行(axis=1)方向に伸びていることに注意されたし。