Кто-нибудь знает, почему мой эрмит Симпсон выходит за рамки дозволенного?

#python

Вопрос:

Этот код предназначен для оптимизации перевернутого маятника с использованием CasADi. Однако я получаю ошибку, что мой эрмит Симпсон выходит за рамки дозволенного. Кто-нибудь знает, как этого избежать?

 for N in range(6,10):

    opti = casadi.Opti()

      # number of collocation points
    dt = (tf-t0) / (N-1) #step size

    #states
    x = opti.variable(4,N) #col vector of 4 vars
    y1 = x[0,:] #cart pos
    y2 = x[1,:] #pendulum position
    ydot1 = x[2,:]  
    ydot2 = x[3,:]
    u = opti.variable(1,N-1)

    def f(x,u):
        [y1,y2,ydot1,ydot2] =vertsplit(x)
        dy1 = ydot1
        dy2 = ydot2
        dydot1 = ((l*m2*sin(y2)*ydot2**2)   u   (m2*g*cos(y2)*sin(y2))) / (m1   m2*(1-cos(y2)**2))
        dydot2 = -1*((l*m2*cos(y2)*sin(y2)*ydot2**2)   u*cos(y2)   ((m1 m2)*g*sin(y2))) / (l*m1   l*m2*(1-cos(y2)**2))
        return vertcat(dy1,dy2,dydot1,dydot2)  

    
    for k in range(N):
        f1 = f(x[:,2*k],u[:,2*k])
        f2 = f(x[:,2*k 2],u[:,2*k])
        f3 = f(x[:,2*k 1],u[:,2*k])

        opti.subject_to(0.5*(x[:,2*k] x[:,2*k 2])   (dt/8)*(f1-f2) == x[:,2*k 1])

        opti.subject_to((dt/6)*(f1 4*f3 f2) == x[:,2*k 2]-x[:,2*k])
 

Комментарии:

1. Вы можете получить больше ответов на https://math.stackexchange.com