Gauss-Seidel Metheod

Gauss-Seidel Metheod

Gauss-Seidel Metheod

上次我們用了 Jacobi’s method,它操作起來長這樣:

然後我們就發現 $\vec x^{(k)}$ 裡的元素 $\vec x_1^{(k)}$, $\vec x_2^{(k)}$, … , $\vec x_{i-1}^{(k)}$ 都已經被算出來了,那因為 $\vec x_j^{(k)}$ 會比 $\vec x_j^{(k-1)}$ 更準更接近解,所以我們可以把上面的公式換成這樣:

可以看見我把公式拆成了兩部分,前面那邊是已經算出來的,後面的是還沒算到的,以上面 $\vec x_3^{(k)}$ 的例子來說,$\vec x_1^{(k)}$、$\vec x_2^{(k)}$ 就是已經算出來的,$\vec x_3^{(k)}$、…、$\vec x_n^{(k)}$ 就是還沒算出來的值。

這個方法我們就稱它為 Gauss-Seidel Method,是一種 Jacobi’s 的優化。

Gauss-Seidel Metheod 的矩陣表示法

上次我們把原本的矩陣分成 D、L、U:

那我們做了優化之後,可以把它寫成這樣:

那一樣我們要讓電腦去跑,所以寫個 pseudocode

輸入(input):n、矩陣A、rhs 向量 $\vec b$、初始猜測值(initial guess) $\vec {x_0}$、誤差(tolerance) TOL、最大跌代次數 $N_0$

輸出:估計出來的 $\vec x$

:::success
int k = 1;
while $k \leq N_0$ {
$\quad$ set $\vec x = T_g\vec {x_0} + \vec {C_g}$
$\quad$ if ( || $\vec x - \vec {x_0}$ || < TOL), then ouput $\vec x$ and break;
$\quad$ k = k+1
$\quad$ $\vec {x_0} = x$
}
:::

Lemma7.18

如果 T 的譜半徑($\rho(T)$) 小於 1,那麼會存在 $(I-T)^{-1} = I + T + T^2 + … = \Sigma_{j=0}^{\infty}T^j$

你可以把它想像成一個公比小於 1 的等比數列 $x^j$,那麼它的和就是 $\Sigma_{j=0}^{\infty} x^j = 1 + x + x^2 + … = \frac{1}{1-x}$

證明:

Thm 7.19

隨便猜一個初始值 $\vec x^{(0)}$,定義為 $\vec x^{(k)} = T\vec x^{(k-1)} + \vec C$ for $k \ge 1$ 的數列 ${\vec x ^ {(k)}}_{k=0}^{\infty}$ 會收斂到某個特殊的解 $\vec x = T\vec x + \vec C$ iff $\rho(T) < 1$

證明: