我编写了一些代码来解决一般特征值问题,现在我将我的结果与 LAPACK 的 DSPGVX
函数进行比较。我刚刚使用了这个 example .
所以我得到了4个自动 vector
{
{-0.0319133, -0.265466, -0.713483, 0.64765},
{-0.425628, -0.520961, -0.714215, 0.193227},
{ 0.32702, 0.565845, -0.37129, -0.659561},
{-0.682699, -0.056645, 0.0771025, 0.724409}
}
和自动值
{-2.22545, 1.12704, -0.454756, 0.100076}
我的代码和 Mathematica 的结果都一致。
但在之前的链接中,LAPACK 报告的自动 vector 完全不同。
Eigenvalues
-0.4548 0.1001
Selected eigenvectors
1 2
1 0.3080 0.4469
2 0.5329 0.0371
3 -0.3496 -0.0505
4 -0.6211 -0.4743
我应该相信谁?
附言我还检查了我的自动值/自动 vector 是否正确,因为它们会产生 A*x-lambda*B*x=0,而 LAPACK 的值不会。
最佳答案
我不知道为什么你认为 LAPACK 给出了错误的答案,我觉得它们很好。使用您引用的四位数小数我得到残差 (r = A*x - lambda*B*x) 这样
范数(r1) = 1.5921e-04,范数(r2) = 6.0842e-05。
因为 norm(A) = 1.2994 和 norm(B) = 7.9874,这些残差看起来非常令人满意。
DSPGVX 产生的特征向量被归一化,使得
范数(x'*B*x)= 1。
关于c++ - LAPACK 无法计算特征向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9669736/