我需要一个ODE求解器来解决类似于MATLAB ode15s的僵硬问题.
对于我的问题,我需要检查不同初始值需要多少步(计算),并将其与我自己的ODE求解器进行比较.
我试过用
solver = scipy.integrate.ode(f)
solver.set_integrator('vode', method='bdf', order=15, nsteps=3000)
solver.set_initial_value(u0, t0)
Run Code Online (Sandbox Code Playgroud)
然后整合:
i = 0
while solver.successful() and solver.t<tf:
solver.integrate(tf, step=True)
i += 1
print(i)
Run Code Online (Sandbox Code Playgroud)
tf我的时间间隔结束在哪里.
使用的函数定义为:
def func(self, t, u):
u1 = u[1]
u2 = mu * (1-numpy.dot(u[0], u[0]))*u[1] - u[0]
return numpy.array([u1, u2])
Run Code Online (Sandbox Code Playgroud)
具有初始值的u0 = [ 2, 0]是一个僵硬的问题.
这意味着步数不应该取决于我的常数mu.
但确实如此.
我认为odeint-method可以解决这个问题 - 但是我必须发送整个t-vector,因此需要设置完成的步骤数量,这就破坏了我的任务.
反正是有使用odeint两者之间具有自适应步长t0和tf?
或者你能在使用vode-integrator时看到我想念的任何东西吗?