用geigen包计算R中广义特征值的误差

时间:2017-08-19 12:43:10

标签: r matlab linear-algebra eigenvalue eigenvector

我使用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),然后我将前两个子集。

有人可以帮我解决这个问题吗?

1 个答案:

答案 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使用通用算法。