特征在矩阵加法中失去负号

Eigen losing negative sign in matrix addition

本文关键字:失去 特征      更新时间:2023-10-16

我正在尝试使用 Eigen 库添加一个矩阵,我的结果在数值上没问题,但它缺少负号。加法后的结果是正确的,它是失去负号的最终加法。所有矩阵都声明为双精度。

我在两种情况下都有这段代码:

for(int i=0;i<9;i++){
mata<<MatrixXd::Zero(4,4);
for(int j=0;i<4;j++){
mata += matb.transpose()*(matc*matb)*scalar;
}
cout<<mata<<endl;
}

我也尝试过:

for(int i=0;i<9;i++){
mata<<MatrixXd::Zero(4,4);
for(int j=0;i<4;j++){
MatrixXd aux=matb.transpose();
MatrixXd aux2=(matc*matb)*scalar
mata += aux*aux2;
}
cout<<mata<<endl;
}

矩阵结果:

1.92186   -0.960928   -0.960928 -5.55112e-17
-0.960928     1.92186 -5.55112e-17   -0.960928
-0.960928 -5.55112e-17     1.92186   -0.960928
-5.55112e-17   -0.960928   -0.960928     1.92186

特征结果:

1.92186   -0.960928   -0.960928 5.55112e-17
-0.960928     1.92186 5.55112e-17   -0.960928
-0.960928 5.55112e-17     1.92186   -0.960928
5.55112e-17   -0.960928   -0.960928     1.92186

这是浮点计算精度的结果。 两者之间的顺序略有不同(第一个首先执行所有矩阵乘法,然后按scale缩放,而第二个缩放在最后一个矩阵乘法之前)导致浮点结果的最低有效位或两个在最后一个矩阵乘法的各种加法和减法期间不同。

您看到的数字 (5.55112e-17) 出于所有实际目的,实际上是 0,结果是相同的。