Ich habe -dimensionalen Matrizen H ( → K ) in Abhängigkeit von Vektorparametern → k .
Nun geben Eigenwertroutinen Eigenwerte in keiner bestimmten Reihenfolge zurück (sie werden normalerweise sortiert), aber ich möchte Eigenwerte als glatte Funktionen von → k verfolgen . Da Eigenwerte nicht in einer bestimmten Reihenfolge zurückgegeben werden, wird nur E i für einen bestimmten Index i ∈ { 1 , . . , n } gibt eine Reihe von Linien zurück, die nicht glatt sind, wie im Bild unten gezeigt
Meine Idee, durchgehende Linien zu verfolgen, war die Verwendung von Eigenvektoren. Für zwei nahe Punkte sollten nämlich und → k + d → k Eigenvektoren ungefähr orthonormal sein, so dass v i ( → k ) ⋅ v j ( → k + d → k ) ∼ δ p i p j wobei p i , p j ∈ & pgr; ( { 1 , . . . , und π ist eine Permutation. Dann würde ich die gegebene Permutation verwenden, um die Eigenwerte neu zu ordnen und so glatte Linien zu verfolgen.
Mit anderen Worten, ich würde die Kontinuität von Eigenvektoren verfolgen.
Ich habe jedoch einige Probleme mit numerischen Routinen. Bei einer bestimmten kleinen Teilmenge von Punkten, die ich verwende, sind wenige Eigenvektoren an nahe gelegenen Punkten nicht annähernd orthonormal. Mein erster Verdacht war, dass diese Eigenvektoren einem entarteten Eigenwert entsprechen, aber das ist nicht immer wahr.
Dies gilt auch, wenn ich auf sehr klein reduziere .
Darf so etwas passieren? Oder kann garantiert werden, dass numerische Routinen kontinuierliche Eigenvektoren zurückgeben? Die von mir verwendete Routine ist numpy.linalg.eigh, eine Schnittstelle für zheevd von LAPACK.
(Physiker unter euch werden erkennen, dass ich über die Bandstruktur spreche)
numpy.linalg.svd
Ihre Eigenvektoren zu erzeugen. Zumindest in Matlab gibt die zugrunde liegende Routine für svd
immer die Eigenwerte und Eigenvektoren in absteigender Reihenfolge zurück.