Eu tenho uma matriz quadrada simétrica real densa. A dimensão é de cerca de 1000 x 1000. Preciso calcular o primeiro componente principal e me perguntar qual pode ser o melhor algoritmo para fazer isso.
Parece que o MATLAB usa os algoritmos Arnoldi / Lanczos (para eigs
). Mas, lendo sobre eles, não tenho certeza se eles têm alguma vantagem sobre a simples iteração de energia , já que minha matriz não é escassa e estou interessado apenas no primeiro vetor próprio.
Alguma recomendação, qual é o algoritmo mais rápido nesse caso?
linear-algebra
algorithms
eigensystem
Mika Fischer
fonte
fonte
Respostas:
O método mais rápido provavelmente dependerá do espectro e da normalidade da sua matriz, mas em todos os casos os algoritmos de Krylov devem ser estritamente melhores que a iteração de energia. GW Stewart tem uma boa discussão sobre esse assunto no Capítulo 4, Seção 3 de Algoritmos de Matrizes, Volume II: Eigensystems :
e ele continua mostrando que, para matriz diagonal 100 × 100 com o i- ésimo valor diagonal definido em 0,95 i (contando de i = 0 ), após 25 iterações, o subespaço de Krylov captura o vetor próprio dominante oito ordens de magnitude melhor que iteração de energia.100 × 100 Eu .95Eu i = 0
fonte
A iteração de energia é a mais simples, mas, como mencionado acima, provavelmente convergirá muito lentamente se a matriz for muito normal. Você obtém um fenômeno "corcunda", em que a sequência parece divergir em muitas iterações antes que o comportamento assintótico entre em ação.
Como sua matriz é simétrica, você pode considerar as iterações RQI, que no caso simétrico produzem convergência cúbica: http://en.wikipedia.org/wiki/Rayleigh_quotient_iteration .
O que torna as iterações de Arnoldi ou Lanczos muito agradáveis (pelo menos na minha opinião, mas eu não pesquiso álgebra linear numérica) é que elas são muito versáteis. Geralmente é possível controlar quais autovalores eles fornecem e quantos você recebe. Isso é especialmente verdade no caso simétrico (e ainda melhor se sua matriz é definitiva). Para problemas simétricos, eles são muito robustos. Como uma caixa preta, eles funcionam bem, mas também são muito receptivos a novas informações sobre problemas, como a capacidade de resolver sistemas que envolvem a matriz.
fonte