在 Linux 上求解常微分方程
科学和工程领域的许多问题都通过常微分方程 (ODEs) 建模。ODE 是一个包含一个自变量的函数及其导数的方程。这意味着几乎任何随时间变化的系统都可以用 ODE 建模,从天体力学到化学反应速率,再到生态学和人口建模。
由于这种普遍性,多年来开发了许多工具来帮助求解和分析 ODE。在本文中,我将介绍 Linux 上可用的工具之一:Model Builder。该项目托管在 SourceForge 上,因此您始终可以从源代码构建它,但大多数发行版都应该有可用的软件包。在基于 Debian 的发行版上,您可以使用以下命令安装它
sudo apt-get install model-builder
它还安装了几个 Python 模块来支持它可以处理的任务。如果您决定从源代码构建,则需要自行处理这些依赖项。
源代码中包含一个示例目录。您可以将它们用作起点,并获得一些关于 Model Builder 功能的想法。文档有点稀疏,因此您可能需要亲自动手才能充分利用 Model Builder 的功能。
要启动 Model Builder,您可以单击桌面环境中的菜单项,或从终端窗口运行命令 PyMB
。当主窗口弹出时,您将看到一个模板,您可以在其中定义您正在分析的问题(图 1)。主窗格标题为“微分方程”,您可以在其中定义您要尝试求解的常微分方程组。这些方程的一般形式是 dy/dt = f(y,t)。

图 1. 当 Model Builder 启动时,您可以设置几个参数以及您要分析的方程。
如果您的系统依赖于不同级别的因变量微分,您始终可以将其重写为 ODE 系统。当您向 Model Builder 提供您的系统时,您只需要写出上述方程的右侧。此方程可以包含 NumPy 理解的任何函数或表达式,因为 Model Builder 使用 Python 进行繁重的工作。
由于 Model Builder 旨在处理方程组,因此您需要将 y 部分定义为列表元素。因此,第一个方程的 y 变量标记为 y[0];第二个方程的 y 变量标记为 y[1],依此类推。这些被称为状态变量。
方程窗口右侧的窗格是您可以放置任何需要的参数的地方,每行一个。它们可以在方程窗口中使用,其中它们标记为 p[0]、p[1] 等等。如果您想在参数或您定义的方程中使用时间,您只需要使用变量 t。
由于后端使用了 Python,您甚至可以使用 lambda 函数来定义更复杂的结构。您可能需要查看 NumPy 网站上提供的文档,以了解可用的选项。
在这两个窗格下方是您定义问题其余选项的位置。在“初始值”框中,您可以输入每个状态变量在时间 t=0 时的初始值。它们需要用空格分隔,并按照方程窗格中给出的方程顺序排列。
在“初始值”下方,您可以输入开始时间、结束时间和在解中使用的时间步长。“临界时间步长”框通常留空,所以我们在这里也将其留空。“第一步”框是第一步的大小。通常,您应该将其保留为 0 以允许自动确定。“最小和最大步长”框设置了在可变步长算法中使用的这些变量。通常,您也应该将这些保留为 0 以允许自动确定。“完整输出”复选框将在结果电子表格中打印有关集成的更多有用信息。
输入所有内容后,您只需单击“开始”图标,即可计算积分。如果这是一个您希望随着时间推移使用的系统,您可以单击菜单项“文件→保存”将模型保存到文件。此文件格式是 XML 文件,因此如果您愿意,可以使用文本编辑器编辑它。当您准备好进行更多工作时,可以通过单击“文件→打开”加载它。
计算完成后,对于简单的问题可能很快,结果窗口将弹出(图 2)。matplotlib 处理此图形窗口,因此您可以像操作任何其他 matplotlib 窗口一样操作它。这包括平移、缩放或更改绘图窗口。您还可以将生成的绘图保存为多种不同格式的图像文件。

图 2. 完成问题定义并运行积分后,将弹出一个结果窗口,其中包含积分图。
回到主窗口,让我们看看其他可用的工具。单击“显示方程”图标会弹出一个窗口,您可以在其中查看排版好的方程(图 3)。此图标旁边是“结果”图标。单击该图标会弹出一个电子表格,其中包含您积分的所有结果(图 4)。数据列包括时间、y[0] 的值和步长等。您可以通过按住 Ctrl 键并单击列标题来选择几列。然后,单击“绘图”按钮以在新窗口中绘制它们。您可以通过选择感兴趣的列并单击“频谱”图标来获得任何一列的功率谱。这将弹出两个新窗口,第一个窗口是该列的功率谱(图 5),第二个窗口是该列的频谱图(图 6)。

图 3. 您始终可以获得方程的排版显示,以验证它们应该是什么样子。

图 4. 您可以调出积分的所有结果并进行进一步分析。

图 5. 您可以生成结果的任何列的功率谱。

图 6. 您还可以生成结果的频谱图。
最后一个可用的工具是小波变换。当您选择一列时,您可以对数据应用连续小波变换。当您完成 Model Builder 后,您可以从电子表格窗口将此数据保存到逗号分隔值 (CSV) 文件中。然后,您可以将其导入到其他工具(如 R)中,以进行更深入的分析。
现在您已经了解了 Model Builder 中可用的选项,希望您在查看 ODE 问题时会考虑它。它为 Python 中可用的数值求解 ODE 的工具提供了一个非常简单的界面。虽然还有其他更强大的工具可用,但 Model Builder 适合快速试验不同方程和尝试想法的利基市场。