我正在尝试使用 scipy odeint 求解以下形式的微分方程:dx/dt = funct(x)。
然而,对于一些初始值,我得到一个“ODEintWarning: Excess work done on this call”,即使 ODE 本身似乎是可解析的。为什么数值 ODE 求解器会给我一个警告,我怎样才能让它工作而不是跳到 x > 3e^7?
这是一个最小(非)工作示例:
x0 =0.49 # works, but changing to 0.51 gives the ODEint warning
t = np.linspace(0,10,100)
def funct(x,t):
return 2*x**2-x
x, out = integrate.odeint(funct, x0, t, full_output = 1)
plt.plot(t,x)
我不太擅长数学,但我认为分析答案应该是:x = 1/(2 + C * exp(t)) 其中 C 是任何常数。
如果是这样,我认为使用 x0=0.51 的初始值也应该是数值可解的,因为 C 存在(C = -0.04)。
我能找到的最接近的问题是: scipy odeint:在此调用上完成的工作过多并且对初始值非常敏感 但是,上一个问题中的 ODE 在分析上会爆炸,而我的则不会。
编辑:我的真实函数和 x 是关于网络的向量和矩阵,而不是解析可解的。