我用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]
````
如何防止解算器在此时暂停?如何实现微分方程变量的有限值范围?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐