私は、lapack に対してかなり珍しい課題を抱えており、その解決策を探すのに何時間も費やしました。
従来の形式 (A - x B = 0) の一般化された固有値の問題があります。通常、固有値と固有ベクトルを計算するには、たとえば ?hegvx または ?hegvd を使用します。
しかし、私が今直面している課題は、問題の構築から固有値を既に知っているため、固有ベクトルのみを計算するための効率的なlapack ルーチンが必要ですか?
誰かがこれをハックしましたか?
私は、lapack に対してかなり珍しい課題を抱えており、その解決策を探すのに何時間も費やしました。
従来の形式 (A - x B = 0) の一般化された固有値の問題があります。通常、固有値と固有ベクトルを計算するには、たとえば ?hegvx または ?hegvd を使用します。
しかし、私が今直面している課題は、問題の構築から固有値を既に知っているため、固有ベクトルのみを計算するための効率的なlapack ルーチンが必要ですか?
誰かがこれをハックしましたか?
一般化された固有値問題を考えると
(A - y B) x = 0
そして固有値 yn:
(A - Y n B) x n = 0
A、B、および yn がわかっているので、新しい行列 Cn を作成できます。
C n = A - y n B
C n × n = 0
これは、固有値ごとに線形代数ソルバーで個別に解くことができます。線形方程式に関するLAPACKドキュメントによると、一般的な行列、倍精度の場合、DGETRSを使用できます
縮退固有値の編集:
行列 Cn のヌル空間は、ここで解決しているものです (MvG がコメントしたように)。もしも
C n j = 0 および
C n k = 0
(つまり、縮退した e-vals) j T k = 0 (どちらも AB システムの固有ベクトルのまま) が与えられた場合、次のように言えます。
C n r の行を呼び出します。
rk = rk - j T .k = (rj T ).k
したがって、行がそれぞれ j Tである行列 J を形成します(これには名前があるはずですが、私は知りません):
(C n - J) k = 0
定義
D nj = C n - J
そして、新しい行列 D njを解きます。構築により、これは同じ縮退固有値を持つ元の行列の新しい直交固有ベクトルになります。