我偶然發現了 MATLAB 中相當奇怪的行為。求解線性方程組的算子\有時會產生不同的結果,但唯一改變的是轉置算子的位置。
看看這個例子:
A0 = rand(4);
b = rand(4,1);
A1 = A0';
x0 = A0\b;
x1 = A1'\b;
x2 = linsolve(A0,b);
x3 = linsolve(A1',b);
x4 = mldivide(A0,b);
x5 = mldivide(A1',b);
x0 = x2 = x3 = x4 = x5但是x0 != x1(它們的大小相差 10^-15)
A0 在上面的例子中是:
0.781931966588002 0.530872257027928 0.112283962156027 0.964422667215901
0.100606322362422 0.091498731339412 0.784427890743913 0.432484993970361
0.294066333758628 0.405315419880591 0.291570317906931 0.694752194617940
0.237373019705579 0.104846247115757 0.603533438750887 0.758099275289454
并且b是:
0.432642326147101
0.655498039803537
0.109755050723052
0.933759848385332
我知道這可能不會引起任何實際問題,但我仍然很好奇為什么會發生這種情況。
uj5u.com熱心網友回復:
我懷疑它是決議器以及它如何將矩陣提供給 LAPACK 庫例程。例如,在A'*BwhereA和Bare 矩陣的矩陣乘法的情況下,轉置操作沒有明確地完成。相反,MATLAB 使用適當的標志呼叫適當的 BLAS 例程(例如,DGEMM),以便完成等效的操作,但可能會導致與您首先明確地完成轉置的操作順序不同。我懷疑您的示例可能就是這種情況,并且轉置沒有明確完成,但標志在后臺傳遞給 LAPACK 庫例程以完成數學上等效的操作,但實際操作順序不同導致答案略有不同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412033.html
標籤:
上一篇:如何使用代碼生成線與Matlab中的原點相交的圖形?
下一篇:Thomas演算法中的初始系數
