SciPy ODE solver有离散事件问题

2024-06-03 04:08:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我用SciPy ODE Integrator Class来解一个常微分方程组。完整的程序应该模拟一个机械系统,并用三维动画将其可视化。只要我真的只想解一个正态微分方程,这就行了。然而,机械系统的某些系统状态变量的取值范围是有限的。这些变量不允许超过/低于某一限制。
我目前保持x\un<;limit{x\un}的方法是检测它并返回dx\un/dt=0。解算器似乎不喜欢它。问题的最小代码:

solver = scipy.integrate.ode(rhs)
solver.set_initial_value(...) #not important
solver.set_integrator("vode", method="adams", rtol=1e-6, atol=1e-9)
...
while(True):
    state = solver.integrate(solver.t + timeStep)
    visualizeModel(state)
    ...

def rhs(t, x):
    x1, x2, x3 = x
    dx1dt = x1_dot(x1, x2, x3)
    dx2dt = x2_dot(x1, x2, x3)
    dx3dt = x3_dot(x1, x2, x3)
    if numpy.abs(x1) > my_limit:
        dx1dt = 0 #the solver seems to absolutely hate this line
    return [dx1dt, dx2dt, dx3dt]

````

如何防止解算器在此时暂停?如何实现微分方程变量的有限值范围?你知道吗


Tags: dotun算器statelimitintegratex1x2