La siguiente ecuación matricial en Σ - para matrices B y C dadas - aparece en mi trabajo como una caracterización de una matriz de covarianza. He aprendido que esta ecuación es conocida, en particular en la teoría del control de tiempo continuo, como la ecuación de Lyapunov , y que existen varios algoritmos bien conocidos para resolverla que explotan la naturaleza especial de esta ecuación lineal.
Al buscar en Google también aprendí que existen implementaciones de Matlab y Fortran. He encontrado SLICOT y RECSY. Sin embargo, debido a problemas de licencia, se detuvo el acceso a la fuente SLICOT.
La mayor parte de mi trabajo se implementa en R, y como no he podido encontrar una interfaz R para un solucionador, considero escribir una. Mi pregunta es si SLICOT es la mejor biblioteca Fortran (o C) disponible con una implementación de un solucionador de la ecuación de Lyapunov. También estoy interesado en implementaciones que puedan manejar grandes matrices dispersas .
Respuestas:
SLICOT es la herramienta a utilizar para problemas densos.
Para un sistema grande pero escaso, existe la caja de herramientas lyapack para MATLAB.
Hay una vívida investigación en curso en el Instituto Max-Planck en Magdeburg, Alemania, sobre ecuaciones dispersas de Lyapunov. Sin embargo, el anuncio del próximo lanzamiento del sucesor de lyapack, MESS, tiene bastantes años. Sin embargo, vale la pena consultar la página web del MESS y las publicaciones de los autores contribuyentes de vez en cuando.
Descargo de responsabilidad: Mi supervisor de tesis es uno de los principales contribuyentes de SLICOT y lyapack y estoy en contacto regular con los desarrolladores de MESS.
fuente
Puede conectarse a MATLAB con esto .
Sus matrices no son demasiado grandes: la codificación manual de los algoritmos no debería resultar en una pérdida de tiempo excesiva, tal vez se ejecute durante 1 hora. Puede o no ser demasiado largo dependiendo de varios factores.
Sin embargo, codificarlo usted mismo puede no ser nada fácil. No creo que pueda, y he estado lidiando con esto durante los últimos meses. Pero el algoritmo SLICOT en sí está aquí .
fuente
El algoritmo de SLICOT no es tan complicado, es una reducción de la forma de Schur + alguna sustitución posterior. Puede consultar el documento de Bartels-Stewart http://dl.acm.org/citation.cfm?id=361582 que es razonablemente legible y explica cómo funciona. El documento trata sobre el caso no simétrico, pero no debería ser difícil adaptarlo al simétrico, solo necesita una forma de Schur en lugar de dos.
Probablemente también pueda codificarlo usted mismo en R si ya tiene una rutina para el formulario Schur.
Esto podría resolver el denso caso. El grande y escaso es más técnico.
fuente