2017-06-14 169 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,結果相同。