Eu tenho uma matriz esparsa e simétrica A (nxn). O método Lanczos transforma a matriz A em matriz tridiagonal e simétrica T e os vetores Lanczos na matriz V. A partir daí, como computo k autovalores menores ou maiores e autovetores correspondentes?
Eu tenho uma matriz esparsa e simétrica A (nxn). O método Lanczos transforma a matriz A em matriz tridiagonal e simétrica T e os vetores Lanczos na matriz V. A partir daí, como computo k autovalores menores ou maiores e autovetores correspondentes?
Para valores próprios , basta levar maiores ou menores valores próprios de T . São boas aproximações de A , desde que o número de iterações de Lanczos seja grande comparado a k .
As coisas são um pouco mais complicadas se também queremos autovetores .
A maneira mais simples é multiplicar cada eigenvector de
T por V para a esquerda, onde V é, como você disse, a coleção de vetores Lanczos. Mas essa abordagem é insuficiente para muitas classes de matrizes, pois os erros de arredondamento fazem com que os vetores de Lanczos percam sua ortogonalidade (1).
Uma maneira melhor é re-ortogonalizar os vetores de Lanczos em V executando um passo de Gram-Schmidt.
Seja z o i -ésimo vetor de Lanczos sendo computado e seja q 1 , q 2 , ⋯
são os vetores Lanczos anteriores. Modificamos z para eliminar todos os componentes de z paralelos a qualquer q 1 , q 2 , ⋯ , q i - 1 :
z ′ = z - i - 1 ∑ j = 1 ( z T q j ) q j
Acontece que precisamos re-ortogonalizar duas vezes para garantir a ortogonalidade numérica dos vetores Lanczos (2).
Referência