假设我有一个ODE,其中x'(t)= f(x),其初始条件x(0)的相应解x(t)=φ(x(0),t)。现在我打算用数值计算平衡值作为其初始条件的函数:eq(x0):=φ(x0,∞)。 ODE使得所有初始条件(包括eq =∞)都能明确地存在这些均衡。
我的穷人的方法是将ODE整合到一个较晚的时间并获取该值(为简洁起见,我没有显示绘图):
import numpy as np
from scipy.integrate import odeint
# ODE
def func(X,t):
return [ X[2]**2 * (X[0] - X[1]),
X[2]**3 * (X[0] + 3 * X[1]),
-X[2]**2]
# Forming a grid
n = 15
x0 = x1 = np.linspace(0,1,n)
x0_,x1_ = np.meshgrid(x0,x1)
eq = np.zeros([n,n,3])
t = np.linspace(0,100,1000)
x2 = 1
for i in range(n):
for j in range(n):
X = odeint(func,[x0_[j,i],x1_[j,i],x2], t)
eq[j,i,:] = X[-1,:]
上面的天真例子:
这种方法的问题在于你永远无法确定它是否融合。我知道你可以找到f(x)的根,但这不会产生平衡作为其初始条件的函数(你可以追溯它们,但由于这个函数不是单射的,你不会找到值所有初始值)。我不知何故需要一个ODE求解器,它集成直到达到平衡(或者如果超过极限则停止积分)。你有什么想法吗?