2017-06-14 171 views
0

我想用特征库添加一个矩阵,我的结果在数值上确定,但它缺少负号。正确添加之后的结果是最终添加失去负号。所有矩阵都声明为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 

回答

7

这是浮点计算精度的结果。两者之间的顺序稍有不同(第一个先进行所有矩阵乘法,然后按比例缩小scale,而第二个在最后一个矩阵乘法之前进行缩放)导致浮点结果中最不重要的一位或两位不同最后矩阵乘法的加法和减法。

您所看到的数字(5.55112e-17)在此处的所有实际用途均为0,结果相同。