Continuidade de vetores próprios da matriz paramétrica

8

Eu tenho matrizes dimensionais dependendo do parâmetro do vetor .H ( k ) knH^(k)k

Agora, as rotinas de autovalores retornam autovalores em nenhuma ordem específica (geralmente são classificadas), mas quero rastrear os autovalores como funções suaves de . Como os valores próprios não são retornados em nenhuma ordem específica, apenas rastrear para algum índice específico retornará um conjunto de linhas que não são suaves, conforme mostrado na figura abaixok E i i { 1 , . . , n }EEukEEuEu{1,..,n}

estrutura de banda

Minha ideia para rastrear linhas contínuas foi usar vetores próprios. Ou seja, para dois pontos de fechamento e autovetores devem ser aproximadamente ortonormais, de modo que que e é uma permutação. Então eu usaria a permutação fornecida para reordenar os autovalores e, assim, traçar linhas suaves.kk+dkvEu(k)vj(k+dk)δpEupjpEu,pjπ({1,...,n})π

Em outras palavras, eu traçaria a continuidade dos vetores próprios.

No entanto, encontro alguns problemas com rotinas numéricas. Em um dado pequeno subconjunto de pontos que uso, poucos autovetores em pontos próximos não são quase ortonormais. Minha primeira suspeita foi que esses autovetores correspondem a um autovalor degenerado, mas isso nem sempre é verdade.

Isso também se aplica se eu reduzir para ser realmente pequeno.dk

É permitido que isso aconteça. Ou é possível garantir que as rotinas numéricas retornem autovetores contínuos? A rotina que eu uso é numpy.linalg.eigh, que é uma interface para o zheevd do LAPACK.

(Os físicos entre vocês reconhecerão que estou falando sobre a estrutura da banda)

tônico
fonte
1
Sua matriz é hermitiana, certo?
k20 03/09
Claro. Eu esqueci de mencionar isso.
tomic 3/09/13
Talvez o problema seja que, mesmo quando os autovalores são distintos, os autovetores podem ter sinal arbitrário?
k20
Eu não acho que esse seja o problema, pois, no final, apenas tomo o valor absoluto da matriz de produtos de vetor próprio.
tomic 3/09/13
Você seria capaz de usar numpy.linalg.svdpara gerar seus vetores próprios. Pelo menos no Matlab, a rotina subjacente svdsempre retorna os valores próprios e os vetores próprios em ordem decrescente.
horchler

Respostas:

3

Nos pontos em que duas linhas se fundem, você tem dois valores próprios iguais e, consequentemente, o espaço próprio que corresponde a esses dois vetores próprios é bidimensional. O que isso significa é que, nesse ponto, os dois vetores próprios não são mais únicos (não apenas até um sinal), mas podem ser um dos infinitos vetores ortogonais possíveis que abrangem esse espaço bidimensional.

k

Wolfgang Bangerth
fonte
Foi a primeira coisa que pensei. No entanto, fiquei surpreso que isso também aconteceu com valores próprios que não eram degenerados.
Tomic
certeza que para matrizes hermitianos, isso não acontece para valores próprios que são não-degenerada
k20
Você pode também estar interessado nesta pergunta: scicomp.stackexchange.com/questions/8432/…
Wolfgang Bangerth
2

Eu trabalho em eletromagnetismo, então tenho que calcular estruturas de bandas fotônicas. Eu costumava tentar suavizar as bandas tentando detectar pontos de cruzamento, mas depois de muitas tentativas e discussões com colegas de trabalho, finalmente concluímos que não há realmente nenhuma maneira ou razão para fazê-lo.

Mas, se você ainda insistir em fazer o que deseja, analise as derivadas de autovalores em relação a k. Há bastante literatura sobre isso, principalmente sobre a teoria da perturbação de problemas de autovalor (livro clássico de Kato), e também trabalha na análise de perturbação na presença de degeracias de autovalor (um problema muito mais difícil, literatura de Roger CE Tan). Eu tentaria fazer isso para o caso não-regenerado primeiro, pois isso ainda é relativamente fácil.

Victor Liu
fonte