我正在使用SciPy ODE Integrator Class来求解一个常微分方程组。完整的程序应该模拟一个机械系统,并使用3D动画对其进行可视化。只要我真的只想求解一个常微分方程,此方法就可以正常工作。但是,机械系统的某些系统状态变量的值范围受到限制。这些变量不允许超过/超过某个限制。 ``` 如何防止求解器此时停滞?如何为微分方程的变量实现一个限制值范围?
我目前保持x_n 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]