我对lapack有一个相当不寻常的挑战,我花了几个小时寻找解决方案。
我有一个传统形式的广义特征值问题(A - x B = 0)。通常我会使用例如?hegvx或?hegvd来计算特征值和特征向量。
然而,我现在面临的挑战是,现在我已经知道了问题构造的特征值,因此我需要一个高效的 lapack例程来计算特征向量?
任何人都有这个黑客?
答案 0 :(得分:3)
给出广义特征值问题
(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 x n = 0
您可以使用任何线性代数求解器为每个特征值单独求解。根据{{3}},对于一般矩阵,双精度,您可以使用DGETRS
编辑退化特征值:
矩阵Cn的零空间是我们在这里解决的(正如MvG评论的那样)。如果
C n j = 0和
C n k = 0
(即退化e-vals)然后给出j T k = 0(两者仍然是AB系统的特征向量)我们可以说
调用一行C n r:
r.k = r.k - j T .k =(r-j T )。k
因此形成一个矩阵J,其行每个都是j T (必须有一个名称,但我不知道):
(C n - J)k = 0
定义
D nj = C n - J
现在求解新矩阵D nj 。通过构造,这将是具有相同退化特征值的原始矩阵的新的正交特征向量。