矩阵计算精度R与Stata
我试图确定矩阵是否为负半定矩阵。因此,我检查所有特征值是否都小于或等于零。一个例子是:矩阵计算精度R与Stata,r,matrix,stata,zero,eigenvalue,R,Matrix,Stata,Zero,Eigenvalue,我试图确定矩阵是否为负半定矩阵。因此,我检查所有特征值是否都小于或等于零。一个例子是: [,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.0
[,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得到的特征值,矩阵是半定矩阵。有没有办法让我找出哪个计算更精确?或者,为了避免无穷小的特征值,是否可能重新调整矩阵的比例
事先非常感谢。每一个提示都将受到高度赞赏。使用双精度浮点数的数值算法不会有这么高的精度 您可以期望不超过17个十进制数字,零附近的相对精度损失并不罕见。也就是说,给定数值误差,1e-12和-1e-20与0几乎无法区分 例如,对于最小特征值(使用您在评论中给出的系数),我得到:
- R 3.4.1:5.9231E-21
- MATLAB R2017a:3.412972022812169e-19
- Stata 15:3.2998e-20()或4.464e-19()
- 英特尔Fortran与MKL(函数):2.2608e-19
- 解析器,如果您以文本形式输入数字
- 用于特征值计算的算法
- 同一算法的实现细节(例如,浮点运算符不是关联的)
- 用于编译计算例程或编译器选项的编译器
- 浮点硬件
我使用了选项(scipen=999)并对第一个特征值(0.000000000003696385)得到了不同的结果。R使用有限精度算术,因此答案的精度不超过15或16位小数。我在R中得到了不同的结果。您能给出矩阵上的
dput
的结果,并说明您使用的是什么版本的R以及计算特征值的函数吗?谢谢你们!James,dput是结构(c(-1.181829909022E-05,0.00015766259977248,-2.60233161187324e-07,1.47276984589202e-05,0.0001576625977248,-0.0116220026732496,0.000324906733501042,-0.000234805001002050020702079655,-.60233161187324324960673501042,-2.61644706608917e-05,3.49299708080411E-05,1.47276984920508020905,-.2998808080905,-332256831e-05),.Dim=c(4L,4L))
我使用的是RStudio版本1.0.44,计算特征值的函数是eigen()。python(np.linalg.eigvals
)为我提供了5.96768236e-20
,以增加示例计数