Qual é a maneira mais eficiente de calcular o vetor próprio de uma matriz densa que corresponde ao valor próprio de maior magnitude?

10

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?

Mika Fischer
fonte
11
No meu computador, em uma matriz simétrica 1000 X 1000 gerada aleatoriamente, a função "eigen" em R levou cerca de um segundo para calcular todos os autovalores e vetores, arredondando para cima. Sua milhagem pode variar, mas duvido que sua escolha de algoritmo faça alguma diferença em horários como esse.
Sim, isso é verdade, é claro. Não estou realmente preocupado em tornar meu programa mais rápido. Só estou curioso para saber se as técnicas mais complicadas mencionadas também são consideradas superiores neste caso de uso (denso, apenas o primeiro vetor próprio) ou se existem técnicas diferentes para matrizes densas.
Você quer dizer o vetor próprio correspondente ao maior ou menor valor próprio? Parece que você quer o primeiro.
Jack Poulson
Sim, o vetor próprio corresponde ao valor próprio com maior magnitude.
Mika Fischer

Respostas:

12

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 :

O método de energia é baseada na observação de que, se tem uma eigenpair dominante então sob restrições leves sobre u os vetores A k u produzir aproximações cada vez mais precisas para o vector próprio dominante. No entanto, em cada etapa, o método de potência considera apenas o único vetor A k u , que equivale a jogar fora as informações contidas nos vetores gerados anteriormente. Acontece que esta informação é valiosa ... "UMAvocêUMAkvocêUMAkvocê

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×100Eu.95EuEu=0 0

Jack Poulson
fonte
Hmm, eu teria pensado MRRR era agora o método padrão quando se quer apenas algumas eigenvectors ...
JM
kO(kn2+k2n+k3)kn
Entendo; de alguma forma, tive a impressão de que você precisava tridiagonalizar antes de fazer Krylov. Obrigado!
JM
Lanczos está construindo gradualmente a referida matriz tridiagonal.
Jack Poulson
5

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.

Reid.Atcheson
fonte