3.2Jacobi迭代法和Gauss-Seidel迭代法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算结果为 迭代次数= 10 x= 1.000118598691415 1.999767947010035 - 0.999828142874476 0.999785978460050
3.2.3 Gauss-Seidel迭代法
将Jacobi迭代法的迭代公式 (3.2.2) 改写为
xi
k 1
1 aii
算法3.1的 Matlab 程序
步骤2.2 若 x k 1 x k ,则算法停止,输出
方程组的近似解 xk 1;否则,令 x k : x k 1 , k : k 1 .
步骤3 终止.
输出信息“算法超出最大迭代次数!”,算法
Matlab 程序如下:
%Jacobi.m function x = Jacobi (A, b, x0, eps, N) % 功能:用Jacobi迭代法解n 阶线性方程组 Ax=b n=length(b); x=ones(n,1); k=0;
下面推导Gauss Seidel迭代法的矩阵形式:
据(3.2.3), 将方程组(3.2.1)改写为
( D L U ) x b,

Dx Lx Ux b,
根据式(3.2.10),取迭代公式为
Dxk 1 Lxk 1 Uxk b,
即 x k 1 ( D L)1Ux k ( D L)1 b,
k k x1 2 3
直到 x k 1 x k

103.
计算结果见下表:
k 3 4 5
x1k
k x2
k 0 1 2
x1k
0 0.9000 0.9700
x2k
x3k
0 0.7000 0.9500
0 0.8000 0.9400
0.9950 0.9985 0.9998
0.9850 0.9975 0.9992
xi
k 1
1 aii
n k aij x j bi , i 1, 2, , n. j 1, j i
(3.2.2)
下面推导Jacobi迭代法的矩阵形式:
把系数矩阵A分解成三部分:
A D L U ,
其中
(3.2.3)
D diag(a11, a22 , , ann ),
方程组(3.2.1)的分量形式为
aii 0
a x
j 1 ij
n
j
bi , i 1, 2, , n.
因aii 0, 所以有
1 xi aii
n aij x j bi , i 1, 2, , n. j 1, j i
从而得到Jacobi迭代法的分量形式:
x3k 0.9900
0.9970 0.9995
从计算结果看出,向量序列收敛到方程组的精确解 x* 1, 1, 1 .
T
卡尔.雅可比
以上迭代法称为Jacobi迭代法.
卡尔 雅可比(Carl Gustav Jacobi, 1804--1851) 是一位德国数学家. 1804年生于波茨坦. Jacobi是历史上最伟大的数学家之一,他在数学 方面的突出成就是和挪威数学家 Abel 相互独立地奠 变分法、复变函数论、微分方程和数学史等方面.
0 x , 步骤1 输入系数矩阵A,右端向量b,以及初始向量
精度 , 最大迭代次数 N .令 k 1.
步骤2 当k N时,执行步骤2.1 2.2. 步骤2.1 对i 1, 2,, n,计算
x
k 1 i
1 aii
n k aij x j bi . j 1, j i
x
k 1
Jx f
k
(3.2.8)
称矩阵J 为Jacobi迭代法的迭代矩阵.
J D1 ( L U ) I D1 A
3.2.2
算法3.1 Jacobi迭代法
算法与程序
说明:为简单起见,假定系数矩阵A非奇异,且 aii 0 (i 1, 2, , n) ,且假设Jacobi迭代法收敛.
(3.2.4)
0 a 21 L an 1,1 an1
0 an 2 0 an ,n 1 an 1,2
, 0
0 a12 a1,n 1 0 a2,n 1 U 0
例3.2.2
用Jacobi迭代法程序Jacobi.m求解线性方程组:
10 1 2 0 x1 6 1 11 1 3 x 25 2 . 2 1 10 1 x3 11 x 0 3 1 8 15 4
当 k N时, 执行步骤2.1-2. 2. 步骤 2.1 对 i 1, 2, , n,计算 n 1 i 1 k 1 k 1 k xi : aij x j aij x j bi . aii j 1 j i 1
最大迭代次数N . 令 k 0.
3.2
Jacobi迭代法和Gauss-Seidel 迭代法
本节主要内容
Jacobi迭代法 Gauss-Seidel迭代法
3.2.1
Jacobi迭代法
先看下面一个简单的例子.
例3.2.1 考虑线性方程组 10 1 0 x1 9 1 10 2 x 7 , 2 0 2 10 x3 8
% 功能:用Gauss Seidel迭代法解 n 阶线性方程组 Ax b.
n length b ; x ones n,1 ; k 0;
while k N for i 1: n
x i A i, 1: i 1 * x 1: i 1 A i, i 1: n * x0 i 1: n b i ...
【解】 编写M文件调用函数Jacobi.m,并运行
clc clear all format long A=[10,-1,2,0; -1,11,-1,3; 2,-1,10,-1; 0,3,-1,8]; b=[6;25;-11;15]; x0=[0;0;0;0]; eps=1e-3; N=300; x= Jacobi(A, b, x0, eps, N);
i 1 k a x ij j j 1
aij x j bi , i 1, 2, , n. j i 1
n k
(3.2.9)
注意到计算 x k 1 的第 i 个分量 xik 1 时前面的 ( i 1) 个分量 已经计算出来,如果计算第 i 个分量时,前( i 1)个分量使用 最新的值,则得到
步骤 2.2
若 x k 1 x k ,则算法停止,输出
方程组的近似解 xk 1;否则,令 x k : x k 1 , k : k 1 .
步骤 3 输出信息" 超出最大迭代次数! ",算法终止.
算法3.2的Matlab程序
% Gauss _ Seidel.m
function x=Gauss _Seidel A, b, x0, eps, N
a1n a2 n an 1,n 0
(3.2.5)
于是方程组(3.2.1)改写为
Dx ( L U ) x b

x D ( L U ) x D b.
1
1
0 任取向量 x ,则Jacobi迭代法可写成如下的矩阵形式:
xk 1 D1 ( L U ) xk D1b, k 0, 1, 2, 若记 B D1 (L U ) I D1 A J , f D1b,则有
下面给出Gauss Seidel迭代法的具体步骤:
算法3.2 Gauss-Seidel迭代法
说明:为简单起见,假定系数矩阵A非奇异,且aii 0 (i 1, 2, , n),且假设Gauss Seidel迭代法收敛.
步骤 1
步骤 2
输入系数矩阵A,右端向量b,以及初始向量x 0,精度 ,
3 0 T
x
k
10 . 取初始向量 x 0, 0, 0 ,迭代结果
见表3.2.
表3.2
k 0 0
x
k 1
x2
0
k
x3
k
k 0 3
x1k
0.99570
x2 k
0.99785
x3k
0.99957
1
0.90000 0.70000
0.800Baidu Nhomakorabea0
4
0.99979
0.99989
0.99998
这就是Gauss Seidel迭代法的矩阵形式.
Gauss-Seidel迭代法的迭代矩阵
若记 G ( D L)1 U I ( D L)1 A, f ( D L)1 b,则有 x k 1 Gx k f ,
称G为Gauss Seidel迭代法的迭代矩阵.
定了椭圆函数论的基础.Jacobi的工作还包括代数学、
Jacobi 在数值计算方面的主要贡献是提出求解线性方程组的 迭代法以及求解矩阵的特征值和特征向量的方法等.
aii 0 (i 1, 2, , n)
下面考虑一般的情形:
Ax b,
(3.2.1)
其中A是n阶非奇异矩阵. 且其主对角元素 (i 1, 2, , n).
G ( D L)1 U I ( D L)1 A
例 3.2.3
用Gauss Seidel迭代法解例3.2.1的线性方程组,其迭代公式为
k 1 x1 k 1 x2 k 1 x3
直至 x
k 1
1 k 9 x2 , 10 10 1 k 1 1 k 7 x1 x3 , 10 5 10 1 k 1 4 x2 , 5 5
其精确解为 x 1, 1, 1 .
* T
【解】
把线性方程组改写为
9 10 x1 x2 x1 10 x2 2 x3 7 2 x2 10 x3 8
进一步改写为
1 9 x x 1 10 2 10 1 1 7 x x x 2 1 3 10 5 10 1 4 x3 5 x2 5
2
0.97000 0.95700
0.99140
5
1.00000
0.99999
1.00000
从表3.2可知 x x
*
5
10 ,其中x 1, 1, 1 是方程组
3 * T
的精确解.对于本例子,Gauss Seidel迭代法比Jacobi迭代法收敛 得快.
3.2.4
Gauss-Seidel迭代法的步骤与程序
取 x0 =[0,0,0]T,由上式可构造迭代公式如下
k 1 1 k 9 x1 10 x2 10 k 1 1 k 1 k 7 x2 x1 x3 , 10 5 10 k 1 1 k 4 x3 5 x2 5
k 0, 1, 2,
xi aij x j bi , i 1, 2, , n. j i 1 (3.2.10) 上式即为Gauss Seidel迭代法的分量形式.
k 1
1 aii
i 1 k 1 a x ij j j 1
n
k
Gauss-Seidel迭代法的矩阵形式
while k<=N for i=1:n % 步骤 2 x(i)=(b(i)-A(i,[1:i-1,i+1:n])*x0([1:i-1,i+1:n]))/A(i,i); end k=k+1 If norm(x-x0,inf)<eps, break; end x0=x; end if k>N warning(‘算法超出最大迭代次数!’); else disp([' 迭代次数= ', num2str(k)]) x end
相关文档
最新文档