L'essenza della mia domanda è la seguente: ho un sistema di due ODE. Uno ha un vincolo del valore iniziale e l'altro ha un vincolo del valore finale. Questo può essere pensato come un singolo sistema con un vincolo di valore iniziale su alcune variabili e un vincolo di valore finale su altre.
Ecco i dettagli:
Sto cercando di utilizzare un controller LQR ad orizzonte finito a tempo continuo per guidare un sistema dinamico lineare. Vorrei continuare a utilizzare l'ecosistema Python.
Il sistema è nella forma , soggetto ax(0)=x0
La soluzione LQR genera una matrice tale che l'ingresso di controllo ottimale u (t), lineare in , sia .x ( t ) u ( t ) = K ( t ) x ( t )
dove
e è la soluzione per un'equazione differenziale di Riccati a tempo continuo (si noti che questa è una matrice)P ( t )
soggetto a
, , , , , , sono tutti dati.x 0 Q Q f R t f
In inglese: hai un sistema dinamico che inizia nello stato . Il controller LQR genera una matrice di feedback da utilizzare tra il tempo e ( è comunemente chiamato l'orizzonte temporale del problema) 0 t f t f
Si noti che i due ODE sono accoppiati solo in una direzione: la soluzione a non dipende da . Pertanto, un modo per risolvere il problema è invertire l'equazione di Riccati per trasformare il problema del valore finale in un problema del valore iniziale e trovare una soluzione numerica tra il tempo e usando un integratore ODE standard. Posso quindi utilizzare questa soluzione numerica per trovare . Questo mi preoccupa perché il solutore ODE numerico per x (t) non campionerà necessariamente l'ODE contemporaneamente ai tempi nella soluzione numerica a $ P (t). Forse c'è un modo intelligente per far valere questo.x ( t ) 0 t f x ( t )
L'altro modo in cui prevedo di risolvere il problema è risolvere il sistema insieme, ma non so come gestire il mix di vincoli di valore iniziale e valore finale. Questi problemi sono computazionalmente pesanti da risolvere? Posso farlo in SciPy / Python?