簡體   English   中英

在 C++ 中更高效、更快速的矩陣求逆方法(大和小)

[英]More efficient and fast way of inverting matrices in c++ (big and small)

編輯 由於這個問題被問到,我獲得了解決斷層掃描線性方程組的博士學位。 由於這個問題仍然有很多流量,我想強調@sellibitze 回答中的第一句話:沒有簡單的答案 這在很大程度上取決於矩陣的性質,並且幾乎總是您不想反轉矩陣。

現在,對於這個認為可以輕松回答的非常無辜的人提出的原始問題......


在谷歌搜索矩陣求逆算法時,我發現有幾種方法(和意見!)關於如何在代碼中做到這一點。 我想知道哪種方法最快,或者哪種方法性能最好,但在試圖找到答案時卻一無所獲。

我知道在某些情況下可以計算偽逆(使用 SVD、cholevsky 等),我實際上在我的代碼中使用了其中的一些,並且我知道有幾次逆不存在,等等。很容易找到特定問題的特定答案,但不是矩陣求逆這個大(巨大!)問題的一般直覺。

所以我的問題是:

什么方法對小矩陣的性能最好? 並且精確? 大矩陣呢?

我的個人情況是一個 6x6(編輯:對稱)矩陣,它必須反轉數千次(是的,是的,具有不同的值),我需要高精度,但速度肯定會非常方便。

請注意,我不是在尋找代碼,我會自己編寫最適合我情況的答案,但我認為這是許多程序員都想知道的問題。

沒有簡單的答案。 請確保您已經閱讀並理解文章。

對於 2x2 矩陣,可以使用包含行列式的簡單公式來計算逆矩陣。 但是對於更大的東西,我更喜歡因式分解,例如旋轉 LU 因式分解。 如果您關心性能並處理大型稀疏矩陣,迭代求解器可能是合適的。 或者,您可以嘗試 MUMPS(多前沿大規模並行求解器)並測量性能。 迭代求解器的問題在於它們的收斂速度在很大程度上取決於逆問題的條件以及您是否找到了好的預處理器。

也許您應該從Eigen庫開始,並首先嘗試旋轉 LU 分解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM