Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用geigen包计算R中广义特征值的误差_R_Matlab_Linear Algebra_Eigenvalue_Eigenvector - Fatal编程技术网

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

用geigen包计算R中广义特征值的误差,r,matlab,linear-algebra,eigenvalue,eigenvector,R,Matlab,Linear Algebra,Eigenvalue,Eigenvector,我使用R包geigen来解决广义特征值问题AV=lambdaB*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.7

我使用R包geigen来解决广义特征值问题AV=lambdaB*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

但我得到了这个错误:

 > 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
检测到了
伽马chi_0
的对称矩阵。然后Lapack遇到错误,无法继续。在调用
geigen
时指定
symmetric=FALSE
。本手册介绍了参数
对称
的作用。这样做

geigen(Gamma_chi_0, B, symmetric=FALSE, only.values=FALSE)
结果是(在我的电脑上)

这与您在Matlab中显示的非常接近。我对Matlab一无所知,所以我不能帮你

附录

当确定所用矩阵是否对称时,Matlab似乎使用了与geigen类似的方法。矩阵
Gamma\u chi\u 0
可能不完全对称。看这个

更多附录


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

geigen
已检测到
伽马chi_0
的对称矩阵。然后Lapack遇到错误,无法继续。在调用
geigen
时指定
symmetric=FALSE
。本手册介绍了参数
对称
的作用。这样做

geigen(Gamma_chi_0, B, symmetric=FALSE, only.values=FALSE)
结果是(在我的电脑上)

这与您在Matlab中显示的非常接近。我对Matlab一无所知,所以我不能帮你

附录

当确定所用矩阵是否对称时,Matlab似乎使用了与geigen类似的方法。矩阵
Gamma\u chi\u 0
可能不完全对称。看这个

更多附录


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

谢谢您的回答,实际上Gamma_chi_0是对称的,所以我认为问题在于B不是正定的。你能解释一下强迫盖根使用通用算法是什么意思吗?你想写symmetric=false?我不太明白你的意思<正如我在更多附录中提到的,代码>B不是正定的。然而,它是对称的,这就是代码测试的目的;可能需要对geigen进行更严格的测试。一般算法采用QZ、Schur分解。这不需要正定矩阵。请参阅《盖根手册》。谢谢你的回答,实际上伽马齐0是对称的,所以我认为问题在于B不是正定的。你能解释一下强迫盖根使用通用算法是什么意思吗?你想写symmetric=false?我不太明白你的意思<正如我在更多附录中提到的,代码>B不是正定的。然而,它是对称的,这就是代码测试的目的;可能需要对geigen进行更严格的测试。一般算法采用QZ、Schur分解。这不需要正定矩阵。请参阅geigen的手册。
$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