90000 90000大小的矩陣求逆,有沒有什麼好的解決辦法?matlab算的實在太慢。?

時間 2021-05-05 20:11:06

1樓:Kronos

用迭代法,還得看這矩陣有沒有特殊性質,如果是稀疏矩陣就可以用spdiags的命令,如果是正定矩陣可以用楚列斯基分解或共軛梯度法。

2樓:碧落

看你是什麼矩陣了,稠密矩陣一般沒有特別好的辦法。

如果是稀疏矩陣,那就好辦多了,有很多現成的求解器可以用。直接求解器比如Pardiso,如果是對稱正定的稀疏矩陣,開了OMP並行後,估計1s內算出來,如果在多核伺服器上還能更快,不知道能不能滿足你的要求。如果對稱不定,速度稍微慢點,但也不會超過2s。

迭代求解器考慮PESTc,不過我覺的你這個規模的稀疏矩陣沒必要用迭代求解器,規模太小了。直接求解器足夠了。

3樓:鍋逗逗

首先分析下矩陣是否存在特殊性質,是否稀疏、是否對稱

其次尋求對應的求解方案

個人認為稀疏對稱正定矩陣最容易求解(共軛梯度法,預調節器用Incomplete Cholesky),

其次是稀疏矩陣,LLT LDLT QR LU都有對應的稀疏分解方案;大規模矩陣下用迭代法效率(最小二乘LSCG、BiCGSTAB等)更佳,不過需要選擇合適的預調節器

最糟糕的情況是稠密矩陣,儘管稠密對稱矩陣也有對應的求解方案(如Cholesky分解),但是求解速度依舊感人。

Matlab對矩陣求逆的支援已經很不錯了,我的建議是能否通過某些轉換將待求逆矩陣轉換成具有稀疏對稱性質的新矩陣,同時,盡量不要再去求逆矩陣,而是求解乙個線性方程組(例如牛頓法里需要求H^f,可以轉換成求解線性方程組Hx=f),這樣可以減少儲存空間。

可以嘗試Eigen,通過閱讀裡面提及的benchmark來選擇合適的求解工具(第三方庫)。

Eigen: Main Page

作為參考,我之前求解乙個10^5,稀疏度(非零元佔比)為1%的稀疏對稱矩陣,求解平均耗時9秒左右,思路是用Incomplete Cholesky的共軛梯度法,Eigen有提供相關的介面(Eigen的速度會慢一些,我是採用了他的思路,並且根據求解矩陣的特有性質和應用場景進行了一些優化,最後是自己用C++重新造了小小的輪子)。

Eigen::ConjugateGradient< _MatrixType, _UpLo, _Preconditioner > Class Template Reference

希望可以幫到你

4樓:Daniel

matlab的inv也是變成線性方程組解的,你這個問題相當於81E8規模的計算量,明顯工作量太大。你只能根據你的矩陣的特點自己看看能不能利用稀疏性什麼的減工作量。

5樓:不平穩的小高斯

如果是一般的矩陣求逆,沒有什麼太好的辦法,如果是正定矩陣,可以用cholesky decompisition。如果矩陣的rank又比較低,會有一些row rank的方法。

NBA現役十大小前鋒,哪些人肯定能進?

斯洛非雨 詹姆斯杜蘭特字母哥萊昂納德保羅喬治 前邊這五位基本上肯定能進現役前十,詹姆斯 杜蘭特 字母哥 萊昂納德這不必說,是小前鋒金字塔頂端的球員。喬治之所以放在第五位,個人覺得他有這個實力,當年與熱火硬剛時算是出露鋒芒,大傷歸來,去年在雷霆打出生涯至今為止最棒的乙個賽季,MVP候選人前三,最佳陣容...

隨機從1x1大小的正方形平面上取3個點,構成銳角三角形的概率是多少?

張效石 在matlab上寫了個隨機數程式採用蒙特卡洛方法,得出1 1 正方形內出現銳角三角形的可能性約為0.274291 計算時採用1000000次 loops。1 1 1 立方體內出現銳角三角形可能性約為 0.456764。同時還粗略估算了下在以上二維和三維中出現直角的概率,非常難得到非0值。 c...

大隱隱於市,小隱隱於野。大家覺得大隱與小隱的本質區別是什麼?

神秘人物 大隱比小隱更難修,但是如果修成了境界肯定也更高。大隱在市中,在世俗裡我們有群體關係,大大小小的事都要接觸人,生活中碰到的矛盾與五花八門的干擾也相當多,所以在世俗中人就更難把握內心。這也是為什麼過去古人修行要避世,要歸隱山林,因為只有自己乙個人,或者帶個童子,在深山老林中他沒有群體關係,也遠...