使用预定的特征值计算lapack中的特征向量?

时间:2013-02-27 18:49:29

标签: c performance math lapack intel-mkl

我对lapack有一个相当不寻常的挑战,我花了几个小时寻找解决方案。

我有一个传统形式的广义特征值问题(A - x B = 0)。通常我会使用例如?hegvx或?hegvd来计算特征值和特征向量。

然而,我现在面临的挑战是,现在我已经知道了问题构造的特征值,因此我需要一个高效的 lapack例程来计算特征向量?

任何人都有这个黑客?

1 个答案:

答案 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 。通过构造,这将是具有相同退化特征值的原始矩阵的新的正交特征向量。