當 A 可逆,為什麼 X A B 不可以直接按 X B inv A 算?

時間 2021-05-10 02:14:04

1樓:胡一鳴

條件數糟糕的矩陣,用反斜槓算符一樣誤差很大,這是線性方程組本身的性質。

在MATLAB裡,反斜槓\算符會根據矩陣的型別做不同的分解(見 @冷凍青蛙 的圖,在反斜槓算符的官方文件裡可以找到),而inv則一股腦地LU,效率(不管是時間效率還是空間效率)在大規模運算時不高。

2樓:PHOBIA

除了其他答主提到的耗時和誤差問題以外,還有乙個很重要的問題——記憶體不夠。

舉例來說,我們考慮乙個2維Poisson問題的差分方程。對於每個維度有 個剖分的情況,對應的矩陣是5對角矩陣,只需要儲存最多 個元素。做完Cholesky分解後L大約是N對角矩陣,也只需要儲存 個元素,也就是說需要的記憶體是 。

矩陣A (N=21)

矩陣A的逆 (N=21)

矩陣L的轉置 (N=21)

但如果希望對該矩陣求逆,你會發現一般稀疏矩陣的逆往往都是不稀疏的,幾乎所有元素都非0,所以儲存逆需要的記憶體是 。

而 和 差別有多大呢?實際使用的時候N至少也有幾百,matlab可以在幾分鐘內求解,帶進去卻會發現記憶體占用有幾百倍的區別了,這時其實matlab就會告訴你求逆操作記憶體不足啦。以上是2維情況,到3維的時候矩陣就變成了 階,區別也更加明顯。

記憶體占用某種意義上是比耗時更嚴重的問題,畢竟如果記憶體不夠用的話,等再久也出不來結果嘛~

3樓:不zz的zz

看了下,多數回答都說的是為什麼不可以。顯然,這不是絕對的,如果用到的演算法需要多次應用A的逆,且求逆矩陣在精度方面還行(條件數),那當然要求,然後存下來多次用啊。

4樓:

誤差比較大。如果A的行列式很接近0,那麼取逆矩陣的時候誤差就會很大。在MATLAB中,B/A和B*inv(A)是不一樣的,前者是通過QR分解計算的。

如果你採用了後者的寫法,MATLAB的編輯器也會建議你修改為前面一種寫法。

5樓:冷凍青蛙

答案是可以用,但是不一定「安全」。關於求解線性方程組或者最小二乘法上已經有更好的演算法了。最好的例子是MATLAB裡的mldivide指令 "\"在理論計算裡計算 會出現以下幾個問題:

對於ill-conditioned matrix(雖然更應該怪矩陣本身)、處理稀疏矩陣時的低效率等——使得我們一般選擇「退而求其次」追求計算成本更小、計算速度更快的穩定「近似」演算法。

在計算中(用高斯消元法)到底有多準?

在這裡用到了 的conditional number,代表著待解問題是否穩定,換言之條件數越大,在求解線性方程組這個問題裡誤差就會越大。可逆矩陣的condition number不一定小

但其實在matlab裡,inv指令為了穩定,其實使用的就是LU分解。但是為什麼這樣還是不好呢?

考慮問題的實際意義,直接計算逆矩陣並且相乘並不是乙個好演算法

我們不考慮 是不是個「好矩陣」。在計算中,我們對乙個數值演算法的最低要求就是backward stable,簡單的來說就是計算解對於略微錯誤的問題是精確的。那麼作為乙個演算法,求逆(不管求逆用的什麼方法)並且相乘,這個過程不是穩定的,但也有特例[1]。

最後附乙個MATLAB mldivide的演算法圖,感受一下真正的高效和通用:

感覺很慢?其實很快哦!

對於一般ill-conditioned matrix,使用"\"指令都可以帶來兩到三倍於inv(A)直接相乘的速度,是不是心動了呢?原始的演算法好懂,但不一定穩定而且高效,在數值計算裡看起來好懂不等於優秀的演算法

6樓:Epsilon

仔細看了下好像是計算數學的問題?那麼正如其他答主所說的求逆陣的演算法複雜度過大(比如Gauss消去法是O(n^3)量級),而使用其他方法(比如Jacobi迭代)可以將複雜度降低至O(n^2).

為什麼形容詞可以直接加 而不可以加 ?明明不可以直接加 卻又為何可以直接加 ?

老杜 文法錯誤,但是 屬於敬語表達,所以留了活口 文法錯誤,也不是敬語。所以必須死 和 不是乙個東西,無法套用 芥末考培 一類形容詞的敬體形需要接 簡體形話省略掉 所以,在這個位置接是錯誤的。另外,是乙個固定的基礎文法,是 的簡體,表示推測,和這裡知識點無關。一 詞形特徵 形容詞是由詞幹和詞尾構成的...

為什麼不可以閉眼吃飯?

顏如舊 真的有人是閉著眼睛吃的,我觀察過了,我是特好奇怎麼會有人吃東西的瞬間要閉眼睛才來搜尋的。試了一下,感官會更集中在鼻腔和口腔。 首先,92 的人吃飯時眼睛都是注視著菜的。不是看著自己手上的飯碗就是會去看著桌上的其他碗,因為視覺永遠在味覺的前面。人類大腦接收事物訊息65 是由眼睛來傳導的。正是如...

為什麼不可以按勞分配?

Mr.Air 具體來說勞動成果和勞動過程之爭指的是對於乙個科研工作者而言他的工作再絕大部分時候都是無用功而對於工廠工人來說他的工作再絕大部分時候都是能產生價值的如果按照勞動成果來劃分顯然工人工資應該遠高過科研工作者如果按照勞動過程來劃分將會更加麻煩如何將腦力工作者和體力工作者所耗費的精力進行橫向比較...