【问题标题】:How to solve a stiff ode with Python?如何用 Python 解决僵硬的颂歌?
【发布时间】:2012-02-03 04:32:03
【问题描述】:

我是 Python 初学者。我正在尝试切换我在 matlab 中的一些程序。 我需要求解一个僵硬的 ode 方程,其输入都是矩阵。在matlab中我使用

[ttT,uT] = ode23s('SST',t,fT);

【问题讨论】:

  • 你能用数学符号来描述它吗?不是每个人都熟悉 matlab。
  • ode23s 在本例中是 Matlab 中刚性方程的求解器,SST 是辅助函数,用于建立状态空间关系,z = A * z + B,A 和 B 是矩阵。 A是正方形,B是圆柱。 t 是一个具有时间增量的数组,fT 是一个具有初始条件的数组。

标签: python matlab numpy scipy ode


【解决方案1】:

对于您在 Matlab 中执行的大多数操作,您可以使用 Python 中的 NumPy 模块来执行它们。可以找到here

您可能还会发现相关模块 SciPy 也很有用。

PyDSTool 也可能与您相关。它是 Radau 求解器的包装器。

那么您可能想尝试matplotlib 进行绘图。它的工作原理很像 Matlab 的绘图。

以下链接也可能有所帮助:

【讨论】:

  • 非常感谢。我已经安装了 numpy 和 scipy。通过谷歌,我找到了 mrgates 页面。但是,我不知道如何安装他的“模块”。我认为盖茨的方法让一切变得更简单。我不是环保署订户。
  • 最后一个链接,对不起,对我来说太模糊了。我不明白哪个有用或没有!我“只是”想要一个简单的东西,但我在 python 中,它不是!
  • 要安装 Gates 的模块,请按以下步骤操作: 1) 解压缩存档。 2) 假设您解压缩到 C:\ode-0.1a4.tar。确认此文件夹中有一个名为“setup.py”的文件。 3)现在在这个文件夹中打开命令行并运行这个命令:'python setup.py install'。这应该在您的机器上安装模块。现在你可以去导入这个模块并按照盖茨先生在他的页面上描述的那样使用它。
  • 很抱歉 EPD 链接,以防它需要订阅。我会删除它。
  • 我添加了指向 PyDSTool 和 matplotlib 模块的链接。也一定要看看它们。
【解决方案2】:

如果您向我展示微分方程,我可以为您提供更多帮助,但一般来说,解决僵硬 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

对于刚性 ODE 系统,我建议使用“BDF”方法(通常用于求解反应器中的微动力学系统,其中时间的重要性可能会发生很大变化)

有关代码选项的更多信息:https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html

【讨论】:

    猜你喜欢
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 2018-03-29
    • 2019-08-21
    相关资源
    最近更新 更多