繁体   English   中英

geigen包计算R中的广义特征值时出错

[英]error in computing the generalized eigenvalues in R with geigen package

我正在使用R包特征值来解决广义特征值问题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),然后将第一个2子集化。

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

geigen已检测一个对称矩阵Gamma_chi_0 然后,Lapack遇到错误,无法继续。 geigen的调用中指定symmetric=FALSE 该手册描述了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一无所知,所以我无法为您提供帮助。

附录

当确定使用的矩阵对称或geigen时,Matlab似乎使用与特征值相似的方法。 您的矩阵Gamma_chi_0可能不是完全对称的。 有关eig的参数“算法”,请参阅此文档

更多附录

实际上,您的矩阵B不是正定的。 尝试使用基数R的函数chol 。您将得到相同的错误消息。 在这种情况下,您必须强制geigen使用通用算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM