当方程数量增加时,SciPy 的Integrate.odeint() 是否有任何理由变得不那么精确?我正在尝试解决这两组微分方程:
— (1)
和,
— (2)
由于 (1) 中的两个方程是解耦的,因此应该是相同的。我在以下代码段中实现了这两个:
import numpy as np
from scipy.integrate import odeint
def f(y, x):
return [x**2, x**3]
def g(y, x):
return x**2
a = odeint(f, [0.0, 0.0], np.arange(0, 5, 0.0001))
b = odeint(g, 0.0, np.arange(0, 5, 0.0001))
print a[-1][0], b[-1][0], abs(a[-1][0] - b[-1][0])
运行上面的代码给了我:
41.6641667161 41.6641667354 1.93298319573e-08
这里的差异似乎非常微不足道。但是在方程数量变大的情况下(例如在李雅普诺夫指数计算中),它似乎会导致显着差异。
这里会发生什么?
更新:就像@horchler 解释的那样,使用numpy.linspace而不是numpy.arange确实增加了最终值的准确性,但是两个答案之间的差异是相同的顺序:
41.6666666618 41.6666666811 1.93298248519e-08