A seguinte equação da matriz em Σ - para determinadas matrizes B e C - aparece no meu trabalho como uma caracterização de uma matriz de covariância. Aprendi que essa equação é conhecida, particularmente na teoria de controle de tempo contínuo, como a equação de Lyapunov , e que existem vários algoritmos conhecidos para resolvê-la que exploram a natureza especial dessa equação linear.
Ao pesquisar no Google, também aprendi que existem implementações Matlab e Fortran. Encontrei SLICOT e RECSY. Devido a problemas de licenciamento, o acesso à fonte SLICOT foi interrompido.
A maior parte do meu trabalho é implementada em R e, como não consegui encontrar uma interface R para um solucionador, considero escrever uma. Minha pergunta é se o SLICOT é a melhor biblioteca de Fortran (ou C) disponível com a implementação de um solucionador da equação de Lyapunov? Também estou interessado em implementações que podem lidar com grandes matrizes esparsas .
Respostas:
SLICOT é a ferramenta a ser usada para problemas densos.
Para sistemas grandes, porém esparsos, existe a caixa de ferramentas lyapack para o MATLAB.
Há pesquisas vívidas em andamento no Instituto Max-Planck, em Magdeburgo, na Alemanha, sobre equações esparsas de Lyapunov. No entanto, o anúncio do próximo lançamento do sucessor do lyapack - MESS - tem alguns anos. No entanto, vale a pena conferir a página do MESS e as publicações dos autores contribuintes de tempos em tempos.
Exoneração de responsabilidade: Meu supervisor de tese é um dos principais colaboradores do SLICOT e do lyapack e estou em contato regular com os desenvolvedores do MESS.
fonte
Você pode se conectar ao MATLAB usando isso .
Suas matrizes não são muito grandes: a codificação manual dos algoritmos não deve resultar em muita perda de tempo, talvez ela seja executada por 1 hora. Pode ou não ser muito longo, dependendo de vários fatores.
Porém, codificar você mesmo pode não ser nada fácil. Acho que não posso, e tenho lidado com isso nos últimos meses. Mas o próprio algoritmo SLICOT está aqui .
fonte
O algoritmo do SLICOT não é tão complicado, é uma redução da forma de Schur + alguma substituição traseira. Você pode conferir o artigo de Bartels-Stewart http://dl.acm.org/citation.cfm?id=361582, que é razoavelmente legível e explica como funciona. O artigo trata do caso não simétrico, mas não deve ser difícil adaptá-lo ao simétrico - você só precisa de um formulário de Schur em vez de dois.
Você provavelmente também pode codificá-lo em R se ele já tiver uma rotina para o formulário Schur (eu verificaria a mim mesmo, mas é sempre uma bagunça obter resultados significativos sobre o R no Google, devido à sua infeliz escolha de nomes).
Isso poderia resolver o caso denso. O grande e escasso é mais técnico.
fonte