我写了一些代码来解决一般的特征值问题,现在我将我的结果与LAPACK的DSPGVX
函数进行比较。我刚刚使用了example。
所以我获得了4个自动载体
{
{-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报告的自动向量完全不同。
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
我应该信任谁?
P.S。我还检查了我的自动值/自动向量是否正确,因为它们产生A * x-lambda * B * x = 0,而LAPACK的值则没有。
答案 0 :(得分:1)
看起来Lapack的结果确实对应于您的代码和Mathematica生成的最后两个特征值,尽管低阶位出现的情况完全不同。相应的向量非常接近,只是按比例缩放。
显然,如果您的/ Mathematica的值检查出来而且Lapack没有,那么您应该相信产生正确答案的那个。研究它与你的问题有什么关系以及Lapack的算法可能很有价值,因为它提供了非常不精确的答案。
答案 1 :(得分:1)
看起来DSGPVX正在解决A * lambda = B * x * lambda; Matlab使用“eig”为您的问题提供DSGPVX解决方案,尽管Matlab的文档是正确的。我猜这是DSGPVX文档中的一个错误。
>> a=[0.24 0.39 0.42 -0.16;0.39 -0.11 0.79 0.63;0.42 0.79 -0.25 0.48;-0.16 0.63 0.48 -0.03];
>> b=[4.16 -3.12 0.56 -0.1;-3.12 5.03 -0.83 1.09;0.56 -0.83 0.76 0.34;-0.1 1.09 0.34 1.18];
>> [v,d]=eig(a,b)
v =
-0.0690 0.3080 -0.4469 -0.5528
-0.5740 0.5329 -0.0371 -0.6766
-1.5428 -0.3496 0.0505 -0.9276
1.4004 -0.6211 0.4743 0.2510
d =
-2.2254 0 0 0
0 -0.4548 0 0
0 0 0.1001 0
0 0 0 1.1270
>> norm(a*v-b*v*d)
ans =
1.5001e-15