摘 要:有限差分法是解偏微分方程的一個重要數(shù)值方法。對正方形域上的Laplace方程的第一邊值問題用差分法建立了其差分格式,并用Jacobi迭代法、Gauss-Seidel迭代法和超松弛迭代法(SOR法)對該差分格式進行求解。對三種迭代法進行編程并上機實踐,求得相應(yīng)數(shù)值解,通過表格對運行結(jié)果進行了比較。
關(guān)鍵詞:差分格式;Jacobi迭代法;Gauss-seidel迭代法;超松弛迭代法
一、問題及其差分格式
考慮正方形域上的Laplace方程的第一邊值問題:
uxx+uyy=0,(0 容易驗證方程(1)的精確解為:u(x,y)=■sinπy. 在xoy平面上作兩組平行直線:x=x0+ih,y=y0+jh(i,j=0,±1,±2…).(x0,y0)是xoy平面上的任意一點,取(x0,y0)為坐標(biāo)原點(0,0),步長h=■,這樣,整個平面就被這兩組平行直線構(gòu)成的正方形網(wǎng)格所覆蓋,兩組平行直線的交點稱為網(wǎng)格結(jié)點,只考慮屬于正方形區(qū)域[0,1;0,1]的結(jié)點。若一個結(jié)點的四個相鄰接點都屬于[0,1;0,1],則稱此結(jié)點為內(nèi)部結(jié)點;若一結(jié)點的四個相鄰結(jié)點至少有一個不屬于[0,1;0,1],則稱此結(jié)點為邊界結(jié)點。在每一個內(nèi)部結(jié)點上,用二階中心差代替問題中的二階導(dǎo)數(shù): (uxx)■=(■)■≈■ =■ (uyy)■=(■)■≈■ =■ 則有:(■)■+(■)■ ≈■ 由此得到(1)的差分格式為:uij=■(ui+1, j+ui-1, j+ui, j+1+ui, j-1).(i,j=1,2,…n-1),其中u(0,y)=u(x,0)=u(x,1)=0,u(1,y)=sinπy. 二、三種迭代方法及收斂性比較 對線性方程組Ax=b,系數(shù)矩陣A=(aij)n×n非奇異,且A的主對角元aij≠0(i=1,2…n). 1.Jacobi迭代法 將A分裂成A=D-(D-A),其中D=diag(a11,a22…ann),于是方程Ax=b可以寫成Dx=(D-A)x+b或x=(E-D-1A)x+D-1b (2) 令B=E-D-1A,g=D-1b,則(2)可寫成:x=Bx+g 這樣得到了迭代公式: xk=Bxk-1+g(k=1,2…) (3) 2.Gauss-Seidel迭代法 將A分裂成:A=D(E-L)-DU 其中:D=diag(a11,a22,…ann), L=0 0 … 0 0-■ 0 … 0 0-■ -■ … 0 0 … … …-■ -■ … -■ 0 U=0 -■ … -■ -■0 0 … -■ -■ … … …0 0 … 0 -■0 0 … 0 0 對比(2)和(3)則得出:B=L+U 于是方程Ax=b可以寫成:D(I-L)x=DUx+b (4) 顯然D和I-L都是非奇異的,因此可以用(I-L)-1D-1左乘上式的兩端,得出: x=(I-L)-1+Ux+(I-L)-1D-1b 由此得Gauss-Seidel迭代法的迭代公式: ■ 由此可見Gauss-Seidel迭代法是Jacobi迭代法的修正。 表1 Jacobi和Gauss-Seidel迭代法收斂速度的比較 ■ 續(xù)表 ■ 其中誤差容限TOL取0.5E-8,π取3.1415926。由表1的結(jié)果可知,Jacobi迭代法比Gauss-Seidel迭代法迭代公式簡單,但收斂速度比Gauss-Seidel迭代法慢。當(dāng)剖分網(wǎng)格加細(xì)即N增大時,誤差隨著減小,迭代次數(shù)相應(yīng)增大,所得結(jié)果在誤差范圍內(nèi),基本達到要求,驗證了該方法的可行性。 3.SOR迭代法 令:■ ■ (6) 引入了中間變量■,ω為松弛因子,當(dāng)ω=1時,(6)即為Gauss-Seidel迭代法。 把(6)中的中間量■消去,可得SOR迭代法的迭代公式: ■ 三、三種迭代法的解與準(zhǔn)確解的比較 表2 N=6,ω=1.4,迭帶次數(shù)k=20時的解及誤差 ■ 從表2可以看出,SOR迭代法收斂速度最快。在實用中我們更多地采用SOR迭代法,其收斂速度與ω有關(guān),而松弛因子ω的選擇有賴于實際經(jīng)驗。 參考文獻: [1]林成森.數(shù)值計算方法:下[M].科學(xué)出版社,1997. [2]李榮華,馮果忱.微分方程數(shù)值解法[M].3版.高等教育出版社,1995. ?誗編輯 趙飛飛