Calcular todos os autovalores de uma matriz de adjacência muito grande e muito esparsa

13

Eu tenho dois gráficos com quase n ~ 100000 nós cada. Nos dois gráficos, cada nó é conectado a exatamente 3 outros nós, portanto a matriz de adjacência é simétrica e muito esparsa.

A parte difícil é que eu preciso de todos os autovalores da matriz de adjacência, mas não dos autovetores. Para ser preciso, isso será uma vez na minha vida (pelo menos até onde eu posso ver!), Então eu quero obter todos os autovalores e não me importo de esperar alguns dias para obtê-los.

Tentei scipyinvólucros ARPACK, mas leva muito tempo. Encontrei várias bibliotecas, mas elas funcionam melhor para obter um subconjunto dos maiores / menores valores próprios. Existe alguma biblioteca que funcione para matrizes esparsas simétricas com implementação possivelmente paralela para obter todos os autovalores?

Mahdi
fonte
6
Por curiosidade, por que exatamente você precisa de todos os autovalores? A maioria dos problemas desse tamanho são aproximações de problemas ainda maiores (ou mesmo dimensionais infinitos) e, portanto, os valores próprios dos pequenos problemas se aproximam apenas do problema que realmente queremos resolver. Na maioria das vezes, a qualidade da aproximação é boa apenas para os autovalores menores ou maiores, e todos os outros são apenas pouco aproximados e, consequentemente, não têm muito interesse prático.
Wolfgang Bangerth 19/09/16
@WolfgangBangerth: (perdoe-me se estas são óbvias para você) O problema está vindo da física dos materiais. Está relacionado à aproximação estreita de materiais para obter a estrutura da banda, propriedades vibratórias e elétricas. Para obtê-los, preciso de todo o espectro de valores próprios. BTW, isso não é novidade e remonta aos anos 70 e 80, mas como meu sistema é amorfo, eu precisava de um sistema muito grande para obter bons resultados. Embora a maioria das pessoas se preocupe apenas com cristais, o que é extremamente fácil em comparação com o meu caso.
Mahdi
2
@ Mahdi: Bem, o que eu quis dizer é que as propriedades físicas são determinadas pelo espectro de algum operador diferencial parcial. Eu suspeito (mas é claro que não sei, porque você não descreve de onde vem o problema) que o grande problema de autovalor da matriz que você possui é apenas uma aproximação do problema do PDE. Consequentemente, seus valores próprios também serão apenas aproximações.
Wolfgang Bangerth 19/09/16

Respostas:

8

Você pode usar a transformação espectral shift-inverter [1] e calcular a faixa de espectro por banda.

A técnica também é explicada no meu artigo [2]. Além da implementação em [1], uma implementação está disponível em C ++ no meu software Graphite [3] ( atualização em 17 de janeiro : agora tudo está portado para a versão 3 do geograma / grafite ), que eu costumava computar as funções próprias do operador Laplace para malhas com até 1 milhão de vértices (um problema semelhante ao seu).

Como funciona:

A(V,λ)A(V,1/λ)A1AA1ALLtAx=bAσIdσ(AσId)1σ

[1] http://www.mcs.anl.gov/uploads/cels/papers/P1263.pdf.

[2] http://alice.loria.fr/index.php/publications.html?redirect=0&Paper=ManifoldHarmonics@2008

[3] http://alice.loria.fr/software/graphite/doc/html/

BrunoLevy
fonte
Obrigado Bruno! Estes parecem muito promissores, eu vou olhar para eles!
Mahdi
1

Outra opção seria usar rotações Jacobi. Como sua matriz já é quase diagonal, não deve demorar muito tempo para convergir. Geralmente, converge em taxa linear, mas após iterações suficientes, a taxa de convergência se torna quadrática.

Gil
fonte