我是 Python 的初学者。目前我正在编写一个代码,用于为具有初始值的非线性 ODE 系统开发一个简单的求解器。该系统的方程是

首先对 myu 的函数求值,得到 myu 的值,然后在 dX/dt、dS/dt 和 dDO/dt 中使用。下一步,再次评估 myu 以根据 S 和 DO 的新值获得其新值。
我正在使用 JC Butcher 提出的通用线性方法 (GLM) 作为我的方法。该方法使用转移矩阵,其值和大小取决于我们使用的数值方法。在这种情况下,我使用 Runge Kutta Cash-Karp。
虽然您可能会在等式中发现 D 也是一个函数,但这里我将 D 的值设置为常数。
在初始化时,首先设置 h 的值,以获取步数。我创建了一个名为“initValue”的向量,它有 8 列和 4 行,由每个方程的 k 值(第 1 到第 6 行)、Runge Kutta 四阶的初始值(第 7 行)组成。我将其设置为 0,因为它只是充当“预测器”)和每个方程的初始值(第 8 行)。
转移矩阵是基于 GLM 创建的,其中的值来自 Runge Kutta Cash-Karp 的阶段方程(求 k1 到 k6 的值)和阶跃方程(求解)的常数。
在循环中,我第一次简单地将初始值添加到名为“result”的数组中。第一步,我简单地将转换矩阵与向量“initValue”相乘。在下一步直到最后一步,我根据上一步的结果初始化“initValue”。
我正在寻找的是应该看起来像这样的解决方案。如果 h 小于 1,我的代码可以工作。我将结果与 scipy.integrate.odeint 的结果进行比较。但是当我将 h 设置为大于 1 时,它显示的结果与应有的结果不同。例如,在代码中,我设置了 h = 100,也就是说它只会显示初始值和最终值(当 time = 100 时)。X 和 S 应该向上,DO 和 Xr 应该向下,而我的则相反。当 h 设置为大于 1 时,odeint 的结果显示与预期解相同的结果。
我需要帮助来修复我的代码,以便它可以显示任何 h 值的预期解决方案。