Tengo matrices -dimensional H ( → k ) en función de vector de parámetros → k .
Ahora, las rutinas de valores propios devuelven valores propios sin un orden particular (generalmente están ordenados), pero quiero rastrear valores propios como funciones suaves de → k . Debido a que los valores propios no se devuelven en ningún orden en particular, simplemente trazando E i por algún determinado índice i ∈ { 1 , . . , n } devolverá un conjunto de líneas que no son suaves, como se muestra en la imagen siguiente
En otras palabras, rastrearía la continuidad de los vectores propios.
Sin embargo, me encuentro con algunos problemas con las rutinas numéricas. En un pequeño subconjunto de puntos que uso, pocos vectores propios en puntos cercanos no son casi ortonormales. Mi primera sospecha fue que esos vectores propios corresponden a un valor propio degenerado, pero eso no siempre es cierto.
¿Está permitido que tal cosa suceda? ¿O es posible garantizar que las rutinas numéricas devuelven vectores propios continuos? La rutina que uso es numpy.linalg.eigh, que es una interfaz para zheevd de LAPACK.
(Los físicos entre ustedes reconocerán que estoy hablando de la estructura de la banda)
numpy.linalg.svd
para generar sus vectores propios? Al menos en Matlab, la rutina subyacente para svd
siempre devuelve los valores propios y los vectores propios en orden decreciente.