找出ODE的平衡作为初始条件的函数

时间:2017-09-08 10:49:57

标签: python numpy scipy ode

假设我有一个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,:]

上面的天真例子:

enter image description here

这种方法的问题在于你永远无法确定它是否融合。我知道你可以找到f(x)的根,但这不会产生平衡作为其初始条件的函数(你可以追溯它们,但由于这个函数不是单射的,你不会找到值所有初始值)。我不知何故需要一个ODE求解器,它集成直到达到平衡(或者如果超过极限则停止积分)。你有什么想法吗?

0 个答案:

没有答案