Poniższe równanie macierzowe w dla danych macierzy i pojawia się w mojej pracy jako charakterystyka macierzy kowariancji. Dowiedziałem się, że to równanie jest znane, zwłaszcza w teorii ciągłego sterowania czasem, jako równanie Lapunowa i że istnieją różne dobrze znane algorytmy jego rozwiązywania, które wykorzystują szczególną naturę tego równania liniowego. Σ - B C -
Od Google'a dowiedziałem się również, że istnieją implementacje Matlab i Fortran. Znalazłem SLICOT i RECSY. Jednak z powodu problemów licencyjnych dostęp do źródła SLICOT został zatrzymany.
Większość mojej pracy jest zaimplementowana w języku R, a ponieważ nie byłem w stanie znaleźć interfejsu R do solvera, rozważam napisanie go samodzielnie. Moje pytanie brzmi zatem, czy SLICOT jest najlepszą dostępną biblioteką Fortrana (lub C) z implementacją rozwiązania równania Lapunowa? Interesują mnie również implementacje, które mogą obsługiwać duże rzadkie macierze
Odpowiedzi:
SLICOT to narzędzie do obsługi gęstych problemów.
W przypadku dużego, ale rzadkiego systemu istnieje zestaw narzędzi lyapack dla MATLAB.
W Instytucie Maxa-Plancka w Magdeburgu w Niemczech trwają intensywne badania nad rzadkimi równaniami Lapunowa. Jednak zapowiedź zbliżającej się premiery następcy lyapacka - MESS - ma już kilka lat. Niemniej jednak warto od czasu do czasu sprawdzać stronę internetową MESS i publikacje autorów.
Nota prawna: Mój promotor ma duży wkład zarówno w SLICOT, jak i lyapack i jestem w stałym kontakcie z twórcami MESS.
źródło
Możesz połączyć się z MATLAB za pomocą tego .
Twoje matryce nie są zbyt duże: ręczne kodowanie algorytmów nie powinno powodować zbyt dużej straty czasu, może potrwa 1 godzinę. Może, ale nie musi być zbyt długi, w zależności od różnych czynników.
Jednak samodzielne kodowanie może nie być łatwe. Nie sądzę, żebym mógł, i zajmowałem się tym przez ostatnie kilka miesięcy. Ale sam algorytm SLICOT jest tutaj .
źródło
Algorytm SLICOT nie jest tak skomplikowany, to redukcja do formy Schur + trochę podstawienia wstecznego. Możesz sprawdzić artykuł Bartelsa-Stewarta http://dl.acm.org/citation.cfm?id=361582, który jest dość czytelny i wyjaśnia, jak to działa. Artykuł dotyczy przypadku niesymetrycznego, ale dostosowanie go do symetrycznego nie powinno być trudne - wystarczy jedna forma Schur zamiast dwóch.
Prawdopodobnie możesz go również napisać samodzielnie w R, jeśli ma już procedurę dla formularza Schur (sprawdziłbym siebie, ale zawsze jest bałagan, aby uzyskać znaczące wyniki dotyczące R poza Google, ponieważ z powodu ich niefortunnego wyboru nazewnictwa).
To mogłoby załatwić gęsty przypadek. Duży i rzadki jest bardziej techniczny.
źródło