La esencia de mi pregunta es la siguiente: tengo un sistema de dos EDO. Uno tiene una restricción de valor inicial y el otro tiene una restricción de valor final. Esto puede considerarse como un sistema único con una restricción de valor inicial en algunas variables y una restricción de valor final en otras.
Aquí están los detalles:
Estoy tratando de usar un controlador LQR de horizonte finito de tiempo continuo para conducir un sistema dinámico lineal. Me gustaría seguir usando el ecosistema de Python.
El sistema tiene la forma , sujeto ax(0)=x0
La solución LQR genera una matriz tal que la entrada de control óptima u (t), lineal en , es .x ( t ) u ( t ) = K ( t ) x ( t )
donde
y es la solución a una ecuación diferencial de Riccati de tiempo continuo (tenga en cuenta que este es una matriz)P ( t )
P(tf)=Q sujeto a
B x 0 Q Q f R t f , , , , , , se dan todos.
En inglés: tiene un sistema dinámico que comienza en el estado . El controlador LQR genera una matriz de retroalimentación para usar entre el tiempo y ( se denomina comúnmente horizonte temporal del problema) 0 t f t f
Tenga en cuenta que las dos EDO están acopladas solo en una dirección: la solución a no depende de . Por lo tanto, una forma de resolver el problema es invertir la ecuación de Riccati para convertir el problema del valor final en un problema de valor inicial y encontrar una solución numérica entre el tiempo y usando un integrador ODE estándar. Entonces puedo usar esta solución numérica para encontrar . Esto me preocupa porque el solucionador numérico de ODE para x (t) no necesariamente muestreará el ODE al mismo tiempo que los tiempos en la solución numérica de $ P (t). Tal vez hay alguna forma inteligente de hacer cumplir esto.x ( t ) 0 t f x ( t )
La otra forma en que preveo resolver el problema es resolver el sistema juntos, pero no sé cómo lidiar con la combinación de restricciones de valor inicial y de valor final. ¿Son estos problemas computacionalmente pesados de resolver? ¿Puedo hacerlo en SciPy / Python?