||
Guass-Seidel(高斯--赛德尔) 迭代法(简称 $G-S$ 迭代)是对 Jacobi 迭代的一种改进.
考查 在方程组(6.42) 式, 计算次序是$x_1{(k+1)}\rightarrow x_2^{(k+1)}\rightarrow x_3^{(k+1)}$, 但在计算 $ x_2^{(k+1)}$ 时并没有利用已经计算出的$x_1^{(k+1)}$,而仍利用$x_1^{(k)}$; 同样, 在计算$x_3^{(k+1)}$ 时, 也没有利用最新计算出的 $x_1^{(k+1)}$,$x_2^{(k+1)}$. 为此, 将$(6.42)$ 改进为
$\begin{cases} x_1^{(k+1)} = \frac{1}{8}(20 + 3x_2^{(k)} - 2x_3^{(k)})\\ x_2^{(k+1)} = \frac{1}{11}(33-4x_1^{(k+1)} + x_3^{(k)})\\ x_3^{(k+1)} = \frac{1}{12}(36-6x_1^{(k+1)} - 3x_2^{(k+1)})\\ \end{cases} ,(k=0,1,2,\cdots.)$
这就是G-S迭代.
考虑一般情形, G-S迭代也就是将 J 迭代公式 $(6.40)$ 改进为
$x_i^{(k+1)} = \frac{1}{a_{i{}i}}\left(b_i-\sum\limits_1^{i-1} a_{i{}j}{}x_j^{(k+1)} -\sum\limits_{j = i +1}^n a_{i{}j}{}x_j^{(k)} \right),(i=1,2,\cdots,n.,k = 1,2,\cdots.) (6.43)$
这是G-S迭代的分量形式.
G-S迭代的矩阵形式即是将 $(6.39)$ 式改为
$\textbfsymbol{D} \textbfsymbol{x}^{(k+1)} = \textbfsymbol{L} \textbfsymbol{x}^{(k+1)}+\textbfsymbol{U} \textbfsymbol{x}^{(k)} + \textbfsymbol{b},(k=0,1,2,\cdots.)$
于是得
$\textbfsymbol{x}^{(k+1)} = (\textbfsymbol{D} - \textbfsymbol{L})^{-1} \textbfsymbol{U} \textbfsymbol{x}^{(k)} + (\textbfsymbol{D} - \textbfsymbol{L})^{-1}\textbfsymbol{b},(k=0,1,2,\cdots.) (6.44)$
即
$\textbfsymbol{x}^{(k+1)} = \textbfsymbol{B}_{GS}\textbfsymbol{x}^{(k)} + \textbfsymbol{f},(k=0,1,2,\cdots.) (6.45)$
其中, 迭代矩阵 $\textbfsymbol{B}_{GS}=(\textbfsymbol{D} - \textbfsymbol{L})^{-1} \textbfsymbol{U}, \textbfsymbol{f}= (\textbfsymbol{D} - \textbfsymbol{L})^{-1}\textbfsymbol{b}$ .
Gauss-Seidel 迭代法的MATLAB程序:
function [x, k] = LinGauSeid(A,b,eps,it_max)
% 求线性方程组的Gauss-Seidel迭代法,调用格式为
% [x, k] = LinGauSeid(A,b,ep,it_max)
% 其中
% A 为线性方程组的系数矩阵,b 为常数项,ep 为精度要求,默认为1e-5,
% it_max 为最大迭代次数,默认为100
% x 为线性方程组的解,k迭代次数
if nargin <4 it_max = 100; end;
if nargin <3 eps = 1e-5; end;
if min(diag(A))<1e-10
error('% 对角元素为0,计算失败!');
end
n = length(b); xk = zeros(n,1); k=1;
B = -tril(A)triu(A,1); f = tril(A)b;
while k<it_max
xk1 = B*xk + f;
if max(abs(xk1-xk))<eps
break;
end
xk = xk1; k = k+1;
end
在命令窗口输入
A = [4 3 0; 3 4 -1;0 -1 4];
b = [24;30;-24];
[x, k] = LinGauSeid(A,b)
x =
3.0000
4.0000
-5.0000
k =
25
说G-S迭代是J迭代的改进,其含义是: 当二者均收敛时, G-S迭代比J迭代收敛速度要快. 然而, 也存在J迭代收敛, 而G-S迭代发散的线性方程组.
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-5-28 02:57
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社