【发布时间】:2020-07-19 23:54:51
【问题描述】:
我正在尝试使用solve_ivp 求解一个大型微分方程组。
from scipy import integrate
def dXdt(X,t):
return np.array([dadt(X,t), dbdt(X,t), dcdt(X,t), dddt(X,t])
sol = integrate.solve_ivp(dXdt, (0,100), initial_value_array, t_eval)
dadt(X,t)、dbdt(X,t)、dcdt(X,t)、dddt(X,t] 是我需要从以下字典中获取的微分方程组:
da_dict = {'a': -1.0, 'b': 2.0, 'c': 4.0}
db_dict = {'b': -10.0, 'a': 1.0}
dc_dict = {'c': -4.0, 'b': 3.0}
dd_dict = {'b': 5.0}
如下:
def dadt(X,t):
return -1.0*X[0] + 2*X[1] + 3*X[2]
其中,X[0]、X[1]、X[2]、x[3] 在字典中由 'a'、'b'、'c'、'd' 表示。同样,
def dbdt(X,t):
return -10*X[1] + 1*X[0]
def dcdt(X,t):
return -4*X[2] + 3*X[1]
def dddt(X,t):
return 5*X[1]
我有 100 多个微分方程需要使用 solve_ivp 求解。我如何从字典中写dadt(X,t)、dbdt(X,t)....而不实际写它们?
【问题讨论】:
-
是的,要与solve_ivp一起使用,X需要是一个数组。
-
到底是什么问题?你有没有尝试过,做过任何研究?见How to Ask、help center。
-
大系统总是线性的吗?然后,使用矩阵指数作为精确解决方案的实现,您可能会获得更好的结果。我不确定是否有稀疏变体。
-
@LutzLehmann,它不是。该系统是一阶和二阶微分方程的组合。
-
python 源代码中的表达式是否编码为字典?然后,您可以用同样的努力将它们编码为 sympy 表达式,并应用 autowrap 或 ufuncify 等代码生成工具来生成 ODE 函数。或者使用更自动的 jitcode。
标签: python function differential-equations odeint