我正在尝试使用Eigen库添加矩阵,结果在数值上还可以,但是缺少负号。正确加法后的结果是丢失负号的最终加法。所有矩阵都声明为double。
在两种情况下,我都有此代码:
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;
}
Matlab结果:
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,结果是相同的。