如何用Python求解刚性ODE?
我是一名Python初学者,正在尝试把我在Matlab中的一些程序转换过来。
我需要解决一个刚性常微分方程(ode),它的输入都是矩阵。在Matlab中,我使用的是:
[ttT,uT] = ode23s('SST',t,fT);
2 个回答
1
如果你能给我看一下微分方程,我可以帮你更多,但一般来说,解决刚性常微分方程(ODE)系统的一个好方法是用下面这句话:
solution = scipy.integrate.solve_ivp(function, [t_0, t_f], y0, method='BDF', first_step =0.0001, dense_output=True)
在这里,你的函数需要提前定义成这样:function(t, variable, parameters)
t_0 = initial value for time
t_f = final value for time
y0 = value of your variables at t_0
对于刚性常微分方程系统,我建议使用'BDF'方法(这种方法通常用于反应器中的微动力学系统求解,因为在这些情况下时间的重要性可能会有很大变化)
想了解更多关于代码选项的信息,可以查看这个链接:https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html
4
在Matlab中你能做的大部分事情,在Python中也可以用NumPy模块来实现。你可以在这里找到它。
你可能还会觉得SciPy这个相关模块也很有用。
PyDSTool可能对你也有帮助。它是一个封装了Radau求解器的工具。
如果你想做图表,可以试试matplotlib,它的功能和Matlab的绘图工具很相似。
以下链接也可能对你有帮助: