Istota mojego pytania jest następująca: mam system dwóch ODE. Jeden ma ograniczenie wartości początkowej, a drugi ograniczenie wartości końcowej. Można to traktować jako pojedynczy system z ograniczeniem wartości początkowej dla niektórych zmiennych i ograniczeniem wartości końcowej dla innych.
Oto szczegóły:
Próbuję użyć kontrolera LQR o skończonym horyzoncie czasowym do sterowania liniowym układem dynamicznym. Chciałbym nadal korzystać z ekosystemu Python.
System ma postać , z zastrzeżeniemx(0)=x0
Rozwiązanie LQR generuje macierz tak że optymalne wejście sterujące u (t), liniowe w , wynosi .x ( t ) u ( t ) = K ( t ) x ( t )
gdzie
a jest rozwiązaniem równania różniczkowego Riccati w czasie ciągłym (zauważ, że to jest macierzą)P ( t )
zastrzeżeniem
, , , , , , są podane.x 0 Q Q f R t f
W języku angielskim: masz jakiś dynamiczny system, który zaczyna się w stanie . Kontroler LQR generuje macierz sprzężenia zwrotnego, która ma być używana między czasem a ( jest powszechnie nazywany horyzontem czasowym problemu) 0 t f t f
Zauważ, że dwa ODE są sprzężone tylko w jednym kierunku - rozwiązanie nie zależy od . Dlatego jednym ze sposobów rozwiązania problemu jest odwrócenie równania Riccati w celu przekształcenia problemu wartości końcowej w problem wartości początkowej i znalezienie rozwiązania numerycznego między czasem a przy użyciu standardowego integratora ODE. Następnie mogę użyć tego rozwiązania numerycznego, aby znaleźć . Dotyczy to mnie, ponieważ liczbowy solver ODE dla x (t) niekoniecznie będzie próbkować ODE w tym samym czasie, co czasy w rozwiązywaniu liczbowym dla $ P (t). Może istnieje jakiś sprytny sposób, aby to egzekwować.x ( t ) 0 t f x ( t )
Innym sposobem przewidywania rozwiązania problemu jest wspólne rozwiązanie systemu, ale nie wiem, jak poradzić sobie z połączeniem ograniczeń wartości początkowej i końcowej. Czy te problemy są trudne obliczeniowo do rozwiązania? Czy mogę to zrobić w SciPy / Python?