私は次元の行列H(→ K)ベクターパラメータに応じ→ Kを。
ここで、固有値ルーチンは固有値を特定の順序で返しません(通常は並べ替えられます)が、固有値を→ kの滑らかな関数としてトレースしたいと思います。固有値は特定の順序で返されていないので、ちょうどトレースE Iを、いくつかの特定のインデックスのためのI ∈ { 1 、。。、n }は、以下の図に示すように、滑らかではない線のセットを返します
つまり、固有ベクトルの連続性を追跡します。
ただし、数値ルーチンではいくつかの問題が発生します。私が使用する点の特定の小さなサブセットでは、近くの点にあるいくつかの固有ベクトルがほとんど正規直交ではありません。私の最初の疑いは、それらの固有ベクトルが縮退した固有値に対応していることでしたが、常にそうであるとは限りません。
そのようなことが起こるのを許されていますか?または、数値ルーチンが連続固有ベクトルを返すことを保証することは可能ですか?私が使用するルーチンはnumpy.linalg.eighで、これはLAPACKのzheevdのインターフェースです。
(あなたの中の物理学者は私がバンド構造について話していることを認識するでしょう)
numpy.linalg.svd
して固有ベクトルを生成できますか?少なくともMatlabでは、基になるルーチンはsvd
常に固有値と固有ベクトルを降順で返します。