
發(fā)布
注冊
/
登錄大規(guī)模線性方程組求解
關(guān)注創(chuàng)建者:匿名 創(chuàng)建時間:2026-01-04

大規(guī)模線性方程組求解的實(shí)例教程
對于工業(yè)軟件研發(fā)尤其是CAE軟件研發(fā)來說,線性方程組的求解精度和速度較為重要,在方程組規(guī)模上來以后,以Krylov子空間為基礎(chǔ)的PCG,Bicgstab,Gmres等方法相對于直接法在求解效率和精度控制上有較大優(yōu)勢。這也是abaqus等商業(yè)軟件在對于規(guī)模較大的模型時采用迭代法求解通常會比直接法求解更快的其中一個原因。
以自由度數(shù)為41w的如下分布的稀疏矩陣為例,
該稀疏矩陣形成的系數(shù)方程組在matlab中采用直接求解為1.5s,采用一定預(yù)處理下的PCG求解時間為0.55s。
用筆者自行開發(fā)的稀疏矩陣PCG求解器運(yùn)行此算例,方程組求解時間為0.628s。
此時,整個程序的運(yùn)行時間瓶頸實(shí)際上并不在方程求解,而在于從文件中讀取稀疏矩陣對應(yīng)的數(shù)據(jù)。一般情況下采用fscanf讀取數(shù)據(jù)會快于用fstream讀取。改用fscanf讀取數(shù)據(jù)后,程序總運(yùn)行時間從原來的16s變?yōu)?s。
【完】
歡迎關(guān)注公眾號 有限元術(shù)
一個講有限元技術(shù)的公眾號
展開 同時,當(dāng)ksptype為preonly時,表明方程組不采用迭代求解,只采用預(yù)處理方法直接求解方程組,因此此時實(shí)際上就實(shí)現(xiàn)了線性方程組的直接法求解。
enddo
write(*,*)"the solution of equation:"
write(*,"(es18.8)")x
end subroutine bicgstab
依據(jù)上述過程編寫程序,計(jì)算前述非對稱矩陣線性方程組求解結(jié)果:
采用matlab求解該方程組的解:
通過對比可知11次迭代已經(jīng)獲得即為準(zhǔn)確的結(jié)果。實(shí)際上,對于該方法也可以通過一定的預(yù)處理方式,使得其所需要的迭代次數(shù)更少。
以上,就是穩(wěn)定雙共軛梯度法求解線性方程組的內(nèi)容,感謝您的閱讀!
歡迎關(guān)注公眾號 有限元術(shù)
展開 其中生產(chǎn)控制類和嵌入式工業(yè)軟件歸為工業(yè)軟件沒問題,但是把運(yùn)營管理類和協(xié)同集成類也歸為工業(yè)軟件就有點(diǎn)離譜了,因?yàn)檫@類公司實(shí)在太多了,且很多是上市公司,在國家重視工業(yè)軟件,且成為風(fēng)口的大環(huán)境下,不知道是否有意為之。
這里介紹的技術(shù)“難點(diǎn)”來源于作者長期研發(fā)過程中碰到的問題,包含了軟件研發(fā)內(nèi)容,偏向于實(shí)際工程應(yīng)用。
1. 如何定位仿真和試驗(yàn)之間的誤差:這是個系統(tǒng)問題,一般而言,仿真結(jié)果很難和試驗(yàn)完全匹配,原因是多方面的,很多時候仿真也不是追求完全和試驗(yàn)精準(zhǔn)匹配,而是得出符合規(guī)律的結(jié)論。
2. 如何提升超大模型的性能:一直以來,超大模型處理是任何一款軟件容易出現(xiàn)瓶頸的內(nèi)容,也是公眾號介紹的重點(diǎn),參見超大模型處理系列文章 工業(yè)軟件研發(fā)中處理超大模型(9)--ChatGPT介紹的方法 和 一篇文章入門仿真軟件性能優(yōu)化
3. 軟件架構(gòu)設(shè)計(jì):軟件架構(gòu)設(shè)計(jì)是軟件產(chǎn)品的框架性內(nèi)容,需要經(jīng)驗(yàn)豐富的軟件研發(fā)經(jīng)驗(yàn)。參見CAE軟件架構(gòu)設(shè)計(jì)
4. 網(wǎng)格自適應(yīng)加密相關(guān):自適應(yīng)網(wǎng)格加密和幾何,網(wǎng)格,求解器緊密相關(guān),不同領(lǐng)域的自適應(yīng)加密重點(diǎn)不盡相同,也是需要長期積累的技術(shù)項(xiàng)。參見 深入理解數(shù)值計(jì)算網(wǎng)格(全篇)
5. 高效生成六面體:目前為止,商業(yè)CFD軟件可以全自動生成六面體網(wǎng)格,而結(jié)構(gòu)分析中很難全自動生成高質(zhì)量的六面體網(wǎng)格。
6. 大規(guī)模線性方程組求解效率和準(zhǔn)確性:大規(guī)模線性方程組的高效穩(wěn)定求解仍然是世界性難題,也是公眾號介紹的重點(diǎn),參見 一篇文章入門大規(guī)模線性方程組求解
7. 高性能計(jì)算,分布式/并行計(jì)算:這塊涉及到各種工具和第三方庫的使用,是需要長期試驗(yàn)積累的技術(shù)項(xiàng)。
8. 幾何清理和修復(fù):現(xiàn)在仍然沒有一個工具能夠完全高效,自動化進(jìn)行幾何清理和修復(fù)。未來也是可以借助AI的內(nèi)容。參見 深入剖析三維幾何內(nèi)核(全篇)
9.
展開 變參數(shù)非線性方程組的求解!
對于求解非線性方程組一般用fsolve命令就可以了,但是對于方程組中某一系數(shù)是變化的,該怎么求呢?
%定義方程組如下,其中k為變量
function F = myfun(x,k)
H=0.32;
Pc0=0.23;W=0.18;
F=[Pc0+H*(1+1.5*(x(1)/W-1)-0.5*(x(1)/W-1)^3)-x(2);
x(1)-k*sqrt(x(2))];
%求解過程
H=0.32;
Pc0=0.23;W=0.18;
x0 = [2*W; Pc0+2*H]; % 取初值
options = optimset('Display','off');
k=0:0.01:1; % 變量取值范圍[0 1]
for i=1:1:length(k)
kk=k(i);
x = fsolve(@(x) myfun(x,kk), x0, options);%求解非線性方程組
x1(i)=x(1);
x2(i)=x(2);
end
plot(k,x1,'-b',k,x2,'-r');
xlabel('k')
legend('x1','x2')
[ 本帖最后由 studyboy 于 2006-7-30 17:38 編輯 ]
圖片附件: k-x1.x2.bmp (2006-7-5 23:07, 689.12 K)
展開 
大規(guī)模線性方程組求解的相關(guān)專題、標(biāo)簽、搜索
大規(guī)模線性方程組求解的最新內(nèi)容
AMGCL 是一個基于 C++ 的開源代數(shù)多重網(wǎng)格(Algebraic MultiGrid, AMG)求解器框架,具有模塊化、可擴(kuò)展和高性能的特點(diǎn),廣泛應(yīng)用于大規(guī)模稀疏線性方程組的求解。
一、背景
在工業(yè)仿真領(lǐng)域,對各種現(xiàn)實(shí)世界的問題進(jìn)行數(shù)值模擬時,如流體動力學(xué)分析、電磁場仿真、結(jié)構(gòu)力學(xué)應(yīng)力應(yīng)變分析等,其控制方程通常是偏微分方程組,在經(jīng)過不同方法的隱式離散之后最終都可轉(zhuǎn)化為大型稀疏線性方程組。隨著人們對計(jì)算精度要求的不斷提高,方程組的階數(shù)也從上千階、幾十萬階提高到百萬、千萬階甚至更高,所需的計(jì)算量以及存儲需求也隨之迅速膨脹。根據(jù)一般經(jīng)驗(yàn),方程組求解時間會占總計(jì)算時間的
圖7 翼型流動仿真與實(shí)驗(yàn)結(jié)果對比,得到的空穴長度相對試驗(yàn)值的誤差小于10%
6)新增代數(shù)多重網(wǎng)格(AMG)預(yù)處理策略(BETA版),提升收斂速度
大規(guī)模稀疏線性方程組的求解是流體仿真的關(guān)鍵技術(shù)之一,AICFD采用的是共軛梯度(CG)類迭代法求解技術(shù),并采用合適的預(yù)處理策略改善稀疏矩陣的條件數(shù),從而提升迭代法的收斂性和可靠性。
參見
一篇文章入門多重網(wǎng)格方法
以上常用的幾種方法除了JFNK,其它在《矩陣計(jì)算》一書里有介紹,之前有推薦過,
對應(yīng)的求解庫參見
一篇文章入門大規(guī)模線性方程組求解
12. 分治方法/圖劃分
在求解大規(guī)模
線性方程組時,為了提升性能,會用到
分治方法。參見一篇文章入門仿真軟件性能優(yōu)化。
大規(guī)模線性方程組求解效率和準(zhǔn)確性:大規(guī)模線性方程組的高效穩(wěn)定求解仍然是世界性難題,也是公眾號介紹的重點(diǎn),參見 一篇文章入門大規(guī)模線性方程組求解
7. 高性能計(jì)算,分布式/并行計(jì)算:這塊涉及到各種工具和第三方庫的使用,是需要長期試驗(yàn)積累的技術(shù)項(xiàng)。
8. 幾何清理和修復(fù):現(xiàn)在仍然沒有一個工具能夠完全高效,自動化進(jìn)行幾何清理和修復(fù)。未來也是可以借助AI的內(nèi)容。
考慮到大規(guī)模稀疏對稱矩陣線性方程組求解方法的復(fù)雜性以及求解庫繁多,作為系列文章,后面專門分多文介紹。先簡要介紹兩個解線性方程組的工具庫,MUMPS和OpenBLAS,具體使用方法不展開。
PETSc是Portable, ExtensibleToolkit for Scientific Computation的縮寫,是美國能源部開發(fā)的科學(xué)計(jì)算可移植擴(kuò)展工具包,其基于MPI實(shí)現(xiàn)在分布式內(nèi)存環(huán)境下實(shí)現(xiàn)偏微分方程和線性方程組的求解。
對于線性方程組的求解,PETSc提供了較為全面的迭代方法求解,尤其是基于Krylov方法的各種迭代方法及各種預(yù)處理方法。在PETSc中,
對于工業(yè)軟件研發(fā)尤其是CAE軟件研發(fā)來說,線性方程組的求解精度和速度較為重要,在方程組規(guī)模上來以后,以Krylov子空間為基礎(chǔ)的PCG,Bicgstab,Gmres等方法相對于直接法在求解效率和精度控制上有較大優(yōu)勢。這也是abaqus等商業(yè)軟件在對于規(guī)模較大的模型時采用迭代法求解通常會比直接法求解更快的其中一個原因。
以自由度數(shù)為41w的如下分布的稀疏矩陣為例
求解器的開發(fā)實(shí)際上是運(yùn)用C++/Fortran等語言將數(shù)值計(jì)算方法編寫成軟件程序,求解過程就是求解程序在硬件上運(yùn)行,求解的對象是基于網(wǎng)格數(shù)據(jù)生成的大規(guī)模線性方程組。求解器的魯棒性和收斂性至關(guān)重要,計(jì)算求解如果很容易發(fā)散,得不到收斂的結(jié)果,那么開發(fā)出來的仿真軟件市場反響就不會很好。目前很多數(shù)值計(jì)算方法已經(jīng)相對成熟,比如有限元法、有限體積法等,這些也都是現(xiàn)有商業(yè)軟件廣泛應(yīng)用的數(shù)值方法。
在前面的文章和中表明共軛梯度法是求解對稱正定線性方程組的一種有效方法,當(dāng)針對不同的系數(shù)矩陣采用不同的預(yù)處理方式時,其可以以較少的迭代次數(shù)獲得較高精度的解。然而,該方法的一個缺點(diǎn)就是其只能適用于對稱正定系數(shù)矩陣,當(dāng)系數(shù)矩陣不再是對稱正定時,此方法可能失效。
以下舉例:
上面矩陣A為非對稱矩陣,采用共軛梯度法求解過程如下:
該方程組采用共軛梯度法迭代