Я использую Класс интегратора SciPy ODE для решения системы обыкновенных дифференциальных уравнений. Предполагается, что полная программа имитирует механическую систему и визуализирует ее с помощью 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]
`` `
Как я могу предотвратить остановку решателя на этом этапе? Как я могу реализовать ограниченный диапазон значений для переменных дифференциального уравнения?