我使用R包geigen来求解广义特征值问题A V = lambda B * V. 这是代码:
geigen(Gamma_chi_0, diag(diag(Gamma_xi_0)),symmetric=TRUE, only.values=FALSE) #GENERALIZED EIGENVALUE PROBLEM
其中:
Gamma_chi_0
[,1] [,2] [,3] [,4] [,5]
[1,] 1.02346 -0.50204 0.41122 -0.73066 0.00072
[2,] -0.50204 0.96712 -0.33526 0.51774 -0.37708
[3,] 0.41122 -0.33526 1.05086 0.09798 0.09274
[4,] -0.73066 0.51774 0.09798 0.99780 -0.51596
[5,] 0.00072 -0.37708 0.09274 -0.51596 1.03354
和
diag(diag(Gamma_xi_0))
[,1] [,2] [,3] [,4] [,5]
[1,] -0.0234 0.0000 0.0000 0.0000 0.0000
[2,] 0.0000 0.0329 0.0000 0.0000 0.0000
[3,] 0.0000 0.0000 -0.0509 0.0000 0.0000
[4,] 0.0000 0.0000 0.0000 0.0022 0.0000
[5,] 0.0000 0.0000 0.0000 0.0000 -0.0335
但是我收到了这个错误:
> geigen(Gamma_chi_0, diag(diag(Gamma_xi_0)), only.values=FALSE)
Error in .sygv_Lapackerror(z$info, n) :
Leading minor of order 1 of B is not positive definite
在matlab中,使用相同的两个矩阵,它可以工作:
opt.disp = 0;
[P, D] = eigs(Gamma_chi_0, diag(diag(Gamma_xi_0)),r,'LM',opt);
% compute first r generalized eigenvectors and eigenvalues
例如,我得到以下特征值矩阵
D =
427.8208 0
0 -38.6419
当然在matlab中我只计算了第一个r = 2,在R中我想要所有的特征值和特征向量(n = 5),然后我将前两个子集。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
geigen
检测到Gamma_chi_0
的对称矩阵。然后拉帕克遇到错误,无法继续。在symmetric=FALSE
的调用中指定geigen
。该手册描述了symmetric
的参数。这样做
geigen(Gamma_chi_0, B, symmetric=FALSE, only.values=FALSE)
结果是(在我的电脑上)
$values
[1] 4.312749e+02 -3.869203e+01 -2.328465e+01 1.706288e-05 1.840783e+01
$vectors
[,1] [,2] [,3] [,4] [,5]
[1,] -0.067535068 1.0000000 0.2249715 -0.89744514 0.05194799
[2,] -0.035746438 0.1094176 0.3273440 0.03714518 1.00000000
[3,] 0.005083806 0.3782606 0.8588086 0.50306323 0.17858115
[4,] -1.000000000 0.2986963 0.4067701 -1.00000000 -0.48314183
[5,] -0.034226056 -0.6075727 1.0000000 -0.53017872 0.06738515
$alpha
[1] 1.365959e+00 -1.152686e+00 -9.202769e-01 4.352770e-07 5.588102e-01
$beta
[1] 0.003167259 0.029791306 0.039522893 0.025510167 0.030357208
这与您为Matlab展示的内容非常接近。我对Matlab一无所知所以我无法帮助你。
<强>附录强>
当使用的矩阵被确定为对称或不对称时,Matlab似乎使用与geigen
类似的方法。您的矩阵Gamma_chi_0
可能不完全对称。请参阅此documentation for argument 'algorithm' of eig。
更多附录
实际上你的矩阵B
不是肯定的。尝试基础R的函数chol
。您将得到相同的错误消息。在这种情况下,您必须强制geigen
使用通用算法。