小编mx_*_*muc的帖子

僵硬的ODE求解器

我需要一个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两者之间具有自适应步长t0tf

或者你能在使用vode-integrator时看到我想念的任何东西吗?

python numpy scipy

4
推荐指数
1
解决办法
3857
查看次数

标签 统计

numpy ×1

python ×1

scipy ×1