0
我在C++中使用dgesv和dgemm fortran子例程來做一些簡單的矩陣乘法和左分頻。dgesv的舍入誤差?
對於隨機矩陣A和B,I做:
A\(A\(A*B));
其中*是使用DGEMM和\使用dgesv定義。顯然,這個表達式應該簡化爲單位矩陣。我正在測試我對MATLAB的答案,我在對角線上得到的或多或少是1,但其他條目非常少(數字在e-15的數量級上,因此它們已經接近0) 。
我只是想知道這個結果是否可以預期?因爲如果我這樣做:
C = A+B;
D = A*B;
D\(C\(C*C));
結果應該出來給D \ C。基本上,C(C * C)非常準確(與MATLAB完美匹配),但是第二次我做了D \ C我得到了e-1甚至e + 00關閉的東西。我猜這不應該發生?
你能提供一個獨立的可編譯的例子嗎?通常情況下,我希望MATLAB能夠使用完全相同的BLAS/LAPACK調用。 –
它如何簡化到單位矩陣?除非我誤解了某些東西,否則不是'A \(A \(A * B))'簡單地等於'A \(I * B)== A \ B',就像'D \(C \ C * C))'等於'D \ C'?除非'A == B',否則我不會看到你如何期待一個單位矩陣。你的措辭「隨機矩陣A和B」對此不太清楚,但jimvonmoon的答案很可能是正確的。你也可以在MATLAB中通過計算A \(A \(A * A)) - A \ A'進行檢查。內部圓括號可以防止MATLAB將'A \ A = eye(size(A))'縮短並導致精度損失。 – sigma