【发布时间】:2018-02-01 07:41:18
【问题描述】:
我正在尝试确定矩阵是否为负半定义。出于这个原因,我检查是否所有特征值都小于或等于零。一个示例矩阵是:
[,1] [,2] [,3] [,4]
[1,] -1.181830e-05 0.0001576663 -2.602332e-07 1.472770e-05
[2,] 1.576663e-04 -0.0116220027 3.249607e-04 -2.348050e-04
[3,] -2.602332e-07 0.0003249607 -2.616447e-05 3.492998e-05
[4,] 1.472770e-05 -0.0002348050 3.492998e-05 -9.103073e-05
stata计算的特征值为1.045e-12,-0.00001559,-0.00009737,-0.01163805。但是,R计算的特征值是-1.207746e-20、-1.558760e-05、-9.737074e-05、-1.163806e-02。所以最后三个特征值非常相似,但第一个非常接近零的特征值不是。使用 stata 获得的特征值,矩阵不是半定义的,但使用 R 获得的特征值是半定义的。有没有办法找出哪个计算更精确?或者甚至可以重新调整矩阵以避免无限小的特征值?
提前非常感谢您。每一个提示都将受到高度赞赏。
【问题讨论】:
-
我使用了 options(scipen = 999) 并得到了第一个特征值 (0.000000000003696385) 的不同结果。 R 使用有限精度算术,因此答案在小数点后 15 或 16 位后不准确。
-
我在 R 中得到了不同的结果。您能否在矩阵上给出
dput的结果,并说明您使用的是什么版本的 R 以及计算特征值的函数? -
感谢你们! James,输入是
structure(c(-1.18182990902922e-05, 0.000157666259977248, -2.60233161187324e-07, 1.47276984589202e-05, 0.000157666259977248, -0.0116220026732496, 0.000324960673501042, -0.000234805002079655, -2.60233161187324e-07, 0.000324960673501042, -2.61644706608917e-05, 3.49299778208411e-05, 1.47276984589202e-05, -0.000234805002079655, 3.49299778208411e-05, -9.10307332256831e-05), .Dim = c(4L, 4L))我使用的是RStudio 1.0.44版,计算特征值的函数是eigen()。
标签: r matrix stata zero eigenvalue