c++ - LAPACK 无法计算特征向量

标签 c++ lapack eigenvector

我编写了一些代码来解决一般特征值问题,现在我将我的结果与 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/

相关文章:

c++ - 我的 c++ 类中产生的错误是什么?

c++ - 如何将 lapack 与 CMake 和 Visual 2013 链接起来?

c++ - 调用某些回调函数两次导致段错误 : Nan

c++ - 如何在两个类中双重引用子类和父类

terminal - 如何解决 “A required library with BLAS API not found”问题?

python - 跟踪1参数矩阵族的特征向量

python - 寻找大稀疏矩阵的最小特征向量,在 SciPy 中比在 Octave 中慢 100 倍以上

c - 进入 DGEEV 参数编号 9 时有非法值

c++ - 如何从 netscape cookies.txt 文件导入 cookie 并使用它们?

c - ATLAS 多线程 BLAS 例程中的 valgrind "uninitialized value"警告是否为误报?