L'équation de matrice suivante dans Σ - pour les matrices B et C données - apparaît dans mon travail comme une caractérisation d'une matrice de covariance. J'ai appris que cette équation est connue, en particulier dans la théorie du contrôle du temps continu, comme l'équation de Lyapunov , et qu'il existe divers algorithmes bien connus pour la résoudre qui exploitent la nature particulière de cette équation linéaire.
De googler, j'ai également appris qu'il existe des implémentations Matlab et Fortran. J'ai trouvé SLICOT et RECSY. Cependant, en raison de problèmes de licence, l'accès à la source SLICOT a été arrêté.
La plupart de mon travail est implémenté en R, et comme je n'ai pas pu trouver d'interface R avec un solveur, je pense en écrire une moi-même. Ma question est alors de savoir si SLICOT est la meilleure bibliothèque Fortran (ou C) disponible avec une implémentation d'un solveur de l'équation de Lyapunov? Je m'intéresse également aux implémentations qui peuvent gérer de grandes matrices clairsemées .
Réponses:
SLICOT est l'outil à utiliser pour les problèmes denses.
Pour les systèmes volumineux mais clairsemés, il existe la boîte à outils lyapack pour MATLAB.
Les algorithmes de lyapack reposent sur le calcul de facteurs de rang itérativement bas , de sorte que Z H n Z n s'approche de Σ , où Σ est la solution définie symétrique (positive ou négative) de l'équation de Lyapunov. Le calcul des seuls facteurs en combinaison avec la rareté des coefficients rend cette approche possible pour les équations à grande échelle.Zn ZHnZn Σ Σ
Il y a des recherches en cours à l'Institut Max-Planck de Magdebourg, en Allemagne, sur les équations de Lyapunov clairsemées. Cependant, l'annonce de la sortie prochaine du successeur du lyapack - MESS - date de quelques années. Néanmoins, il vaut la peine de consulter la page Web du MESS et les publications des auteurs contributeurs de temps en temps.
Avertissement: Mon directeur de thèse est un contributeur majeur à la fois sur SLICOT et lyapack et je suis en contact régulier avec les développeurs de MESS.
la source
Vous pouvez vous connecter à MATLAB en utilisant ceci .
Vos matrices ne sont pas trop grandes: le codage manuel des algorithmes ne devrait pas entraîner trop de perte de temps, peut-être qu'il fonctionnera pendant 1 heure. Elle peut ou non être trop longue en fonction de différents facteurs.
Cependant, le coder vous-même peut ne pas être facile du tout. Je ne pense pas pouvoir le faire, et je m'occupe de cela depuis quelques mois. Mais l'algorithme SLICOT lui-même est là .
la source
L'algorithme de SLICOT n'est pas si compliqué, c'est une réduction à la forme Schur + une certaine substitution en arrière. Vous pouvez consulter l'article de Bartels-Stewart http://dl.acm.org/citation.cfm?id=361582 qui est raisonnablement lisible et explique comment cela fonctionne. Le document concerne le cas non symétrique, mais il ne devrait pas être difficile de l'adapter au cas symétrique --- vous n'avez besoin que d'une forme Schur au lieu de deux.
Vous pouvez probablement également le coder vous-même dans R s'il a déjà une routine pour le formulaire Schur (je vérifierais moi-même, mais c'est toujours un gâchis d'obtenir des résultats significatifs sur R sur Google car en raison de leur choix de nom malheureux).
Cela pourrait régler le cas dense. Le grand et clairsemé est plus technique.
la source