Eu tenho um programa que calcula o maior valor próprio de muitas matrizes simétricas de 50x50 realizando decomposições de valor singular em todas elas. O SVD é um gargalo no programa.
Existem algoritmos muito mais rápidos para encontrar o maior valor próprio ou a otimização dessa parte não daria muito retorno sobre o investimento?
Respostas:
Dependendo da precisão necessária para o maior autovalor, você pode tentar usar a Power Iteration .
Para seu exemplo específico, eu iria até o ponto de não formar explicitamente, mas computar em cada iteração. computação exigiria operações , enquanto o produto vetor de matriz requer apenas .A=XXT x←X(XTx) A O(n3) O(n2)
A taxa de convergência depende da separação entre os dois maiores valores próprios, portanto, essa pode não ser uma boa solução em todos os casos,
fonte
Se apenas 5 autovalores forem muito significativos, o algoritmo de Lanczsos com como multiplicação de vetores matriciais deve fornecer convergência linear rápida após 5 etapas iniciais, portanto, um autovalor maior com maior precisão e poucas iterações.X(XTx)
fonte
Para uma matriz semi-definida positiva como , pode valer a pena o esforço para acelerar a convergência com uma mudança de espectro . Isto é, um escalar adequado μ é escolhido e o método de alimentação é aplicada a um - μ I em vez de um .A=XXT μ A−μI A
Algumas iterações do método básico de energia devem fornecer uma estimativa aproximada do maior autovalor λ 1 . Supondo que o autovalor dominante tenha multiplicidade 1 e que todos os outros estejam em [ 0 , 5||Ax||/||x|| λ1 , depoisA-5[0,56λ1] teria um maior autovalor7A−512λ1I e o resto em[-5712λ1 .[−512λ1,512λ1]
Em outras palavras, você aumentaria a dominância do maior autovalor de 20% no próximo maior para 40% no próximo maior (valor absoluto de um) autovalor. A convergência geométrica do método de potência aceleraria de acordo. Uma vez que o maior valor próprio de é encontrado com precisão suficiente, λ 1 é estimado adicionando de volta a mudança μ que foi retirada.A−μI λ1 μ
Observe que você não precisa formar explicitamente porque ( A - μ I ) x = X ( X T x ) - μ x ainda pode ser calculado com o esforço O ( n 2 ) .A−μI (A−μI)x=X(XTx)−μx O(n2)
fonte