Die folgende Matrixgleichung in Σ - für gegebene B- und C- Matrizen - erscheint in meiner Arbeit als Charakterisierung einer Kovarianzmatrix. Ich habe gelernt, dass diese Gleichung, insbesondere in der Theorie der kontinuierlichen Zeitsteuerung, als Lyapunov-Gleichung bekannt ist und dass es verschiedene bekannte Algorithmen zu ihrer Lösung gibt, die die Besonderheit dieser linearen Gleichung ausnutzen.
Durch Googeln habe ich auch erfahren, dass es Matlab- und Fortran-Implementierungen gibt. Ich habe SLICOT und RECSY gefunden. Aufgrund von Lizenzproblemen wurde der Zugriff auf die SLICOT-Quelle jedoch gestoppt.
Der Großteil meiner Arbeit ist in R implementiert, und da ich keine R-Schnittstelle zu einem Solver finden konnte, denke ich darüber nach, selbst eine zu schreiben. Meine Frage ist dann, ob SLICOT die beste verfügbare Fortran (oder C) -Bibliothek mit einer Implementierung eines Lösers der Lyapunov-Gleichung ist. Ich interessiere mich auch für Implementierungen, die große, spärliche Matrizen verarbeiten können.
Antworten:
SLICOT ist das Werkzeug für dichte Probleme.
Für große, aber spärliche Systeme gibt es die Lyapack- Toolbox für MATLAB.
Am Max-Planck-Institut in Magdeburg wird derzeit intensiv an spärlichen Lyapunov-Gleichungen geforscht. Die Ankündigung der bevorstehenden Veröffentlichung des Nachfolgers von Lyapack - MESS - ist jedoch einige Jahre alt. Dennoch lohnt es sich, von Zeit zu Zeit die MESS- Webseite und die Veröffentlichungen der mitwirkenden Autoren zu überprüfen .
Haftungsausschluss: Mein Betreuer für Abschlussarbeiten leistet einen wichtigen Beitrag sowohl zu SLICOT als auch zu Lyapack und ich stehe in regelmäßigem Kontakt mit den Entwicklern von MESS.
quelle
Sie könnten zu MATLAB verbinden diese .
Ihre Matrizen sind nicht zu groß: Die Handcodierung der Algorithmen sollte nicht zu viel Zeitverlust verursachen, möglicherweise läuft sie 1 Stunde lang. Es kann abhängig von verschiedenen Faktoren zu lang sein oder auch nicht.
Es ist jedoch möglicherweise gar nicht so einfach, es selbst zu codieren. Ich glaube nicht, dass ich das kann, und ich habe mich in den letzten Monaten damit befasst. Aber der SLICOT-Algorithmus selbst ist hier .
quelle
Der SLICOT-Algorithmus ist nicht so kompliziert, sondern eine Reduktion auf die Schur-Form + eine gewisse Rücksubstitution. Sie können das Bartels-Stewart-Papier http://dl.acm.org/citation.cfm?id=361582 lesen, das einigermaßen lesbar ist und erklärt, wie es funktioniert. Das Papier handelt von dem unsymmetrischen Fall, aber es sollte nicht schwierig sein, ihn an den symmetrischen anzupassen - Sie benötigen nur eine Schur-Form anstelle von zwei.
Sie können es wahrscheinlich auch selbst in R codieren, wenn es bereits eine Routine für das Schur-Formular enthält (ich würde mich selbst überprüfen, aber es ist immer ein Chaos, aussagekräftige Ergebnisse über R von Google zu erhalten, da aufgrund der unglücklichen Namenswahl).
Dies könnte den dichten Fall lösen. Der große und spärliche ist technischer.
quelle