Eu tenho matrizes dimensionais dependendo do parâmetro do vetor .H ( → 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 abaixo→ k E i i ∈ { 1 , . . , n }
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.
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.
É 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)
numpy.linalg.svd
para gerar seus vetores próprios. Pelo menos no Matlab, a rotina subjacente svd
sempre retorna os valores próprios e os vetores próprios em ordem decrescente.