多重網格方法 Multigridmethod

2022-05-01 03:36:07 字數 1316 閱讀 6479

多重網格方法是解微分方程的方法。這個方法的好處是在利用迭代法收斂結果的時候速度特別快。並且,不管是否對稱,是否線性都無所謂。它的值要思想是在粗糙結果和精細結果之間插值。

前面介紹了gauss–seidel方法和jacobi 方法,現在再用這兩個方法來舉例。儘管gauss–seidel (gs)方法converge更快一些,但其實對於維度很高的系統都很慢。multigrid(mg)方法的思路是先把問題粗糙化,把原網格投影到乙個比較簡單的新網格上計算,等到快速收斂以後再經由interpolation(插值)返回原來的系統。 

對於某個工程數學問題(如泊松方程),可以歸納為線形方程ax = b,  a為n x n矩陣。那麼,最終目的是得到所謂的x = a^(-1)b。定義e(t) = x – x(t),當e(t)為小於某個值的時候,可以認為xconverge到了合適的值。但實際上我們比較的是相鄰的值。

把a非奇異分解a = b – c,

bx – cx = b

x = b(-1) cx + b^(-1) b

並分開求解x

bx(t+1) - cx(t)= b

x(t+1) = b^(-1) cx(t) + b^(-1) b                  -(1)

把形如b^(-1) c的矩陣稱作迭代矩陣,用m表示。

容易發現,

x(t+1) – x = mx(t) + b^(-1) b – x = mx(t) +mx = m (x(t) – x)   -(2)

以上式子與(1)式等價。

另外可令n = b^(-1):

x(t+1) = mx(t) + nb            - (3) 

不同的迭代方法其實就是a的不同分解法,反映到(3)式就是取不同的m和n值。

比如,在gs方法中b = d – l, c = u, 則(3)式為:

x(t+1) = (d - l)^(-1)ux(t) + (d - l)^(-1)b            - (4)  

分析發現,當n的數值比較大時,以上收斂是極其緩慢的。假設p(i) 是序號為i的原系統有限元基函式(i = 1, 2, … , n),q(i)是粗糙化的網格(i = 1,2, … , m  m一種粗糙化方法是構造矩陣h,使p = h * q, h為m x n矩陣。令a』 = hah^t, x』 = hx, b』 = hb. 則 a』 x』 = b』 是乙個m維粗化的網格系統。 

更加具體來說,對於乙個k維的問題,如果k小於乙個指定的維數,那麼直接用jacob等方法解救可以了。否則,粗糙化為更低的維度比如變為原來的二分之一,最後再把維數變回來。把mesh粗糙化的過程叫做downv-cycle (從k維到k/2維), 反之叫up v-cycle.(從k維到2k維)。

多重網格方法 Multigrid method

多重網格方法 multigridmethod 多重網格方法是解微分方程的方法。這個方法的好處是在利用迭代法收斂結果的時候速度特別快。並且,不管是否對稱,是否線性都無所謂。它的值要思想是在粗糙結果和精細結果之間插值。前面介紹了gauss seidel方法和jacobi 方法,現在再用這兩個方法來舉例。...

跳出多重迴圈的方法

1.goto goto不是不能用 goto的缺點是 1.使程式不可讀 2.無法對範圍內的物件執行析構 很多人只知道第乙個缺點,其實c 不推薦用的根本原因確實第二個。不推薦用setjmp longjmp 也是這個原因。明白了原因,樓主就可以仔細分析一下 1 盡量不要直接退出多重迴圈 2 如果要直接退出...

增加網格 平面設計 網格型別及設定方法02

2020 07 10 使人疲憊的不是遠方的高山,而是鞋子裡的一粒沙子。今天要說的是分塊網格和基線網格兩種,還有避免使用網格導致畫面單調的解決方法。分塊網格是在分欄網格基礎上建立橫向的劃分,目的是使版面更加靈活,和文字能夠更加合理地進行排列。然而,和前面幾篇文章提到的一樣,分塊網格的網格數量及大小應由...