资源描述
高等教育出版社 教育电子音像出版社 作者:任玉杰
第四章 解线性方程组的迭代法的MATLAB程序
第四章 解线性方程组的迭代法
解线性方程组的迭代法是从初始解出发,根据设计好的步骤用逐次求出的近似解逼近精确解.在第三章中介绍的解线性方程组的直接方法一般适合于为低阶稠密矩阵(指n不大且元多为非零)的情况,而在工程技术和科学计算中常会遇到大型稀疏矩阵(指n很大且零元较多)的方程组,迭代法在计算和存贮两方面都适合后一种情况.由于迭代法是通过逐次迭代来逼近方程组的解,所以收敛性和收敛速度是构造迭代法时应该注意的问题.另外,因为不同的系数矩阵具有不同的性态,所以大多数迭代方法都具有一定的适用范围.有时,某种方法对于一类方程组迭代收敛,而对另一类方程组迭代时就发散.因此,我们应该学会针对具有不同性质的线性方程组构造不同的迭代.
4.1 迭代法和敛散性及其MATLAB程序
4.1.2 迭代法敛散性的判别及其MATLAB程序
根据定理4.1和谱半径定义,现提供一个名为pddpb.m的M文件,用于判别迭代公式(4.7)产生的迭代序列的敛散性.
用谱半径判别迭代法产生的迭代序列的敛散性的MATLAB主程序
输入的量:线性方程组的迭代公式(4.7)中的;
输出的量:矩阵的所有特征值和谱半径mH 及其有关迭代法产生的迭代序列的敛散性的相关信息.
function H=ddpbj(B)
H=eig(B);mH=norm(H,inf);
if mH>=1
disp('请注意:因为谱半径不小于1,所以迭代序列发散,谱半径mH和B的所有的特征值H如下:')
else
disp('请注意:因为谱半径小于1,所以迭代序列收敛,谱半径mH和B的所有的特征值H如下:')
end
mH
4.1.3 与迭代法有关的MATLAB命令
(一) 提取(产生)对角矩阵和特征值
可以用表4–1的MATLAB命令提取对角矩阵和特征值.
表4–1 提取(产生)对角矩阵和特征值
MATLAB命令
功 能
DX=diag(X)
若输入向量X,则输出DX是以X为对角元的对角矩阵;
若输入矩阵X,则输出DX是以X的对角元构成的向量;
DX=diag(diag(X))
输入矩阵X,输出DX是以X的对角元构成的对角矩阵,可用于迭代法中从A中提取D.
lm=eig(A)
输入矩阵A,输出lm是A的所有特征值.
(二) 提取(产生)上(下)三角形矩阵
可以用表4–2的MATLAB命令提取矩阵的上三角形矩阵和下三角形矩阵.
表4–2 提取矩阵的上三角形矩阵和下三角形矩阵
MATLAB命令
功 能
U=triu(A)
输入矩阵,输出是的上三角形矩阵.
L=tril(A)
输入矩阵,输出是的下三角形矩阵.
U=triu(A,1)
输入矩阵,输出是的上三角形矩阵,但对角元为0,可用于迭代法中从中提取.
L=tril(A,-1)
输入矩阵,输出是的下三角形矩阵,但对角元为0,可用于迭代法中从中提取.
(三)稀疏矩阵的处理
对稀疏矩阵在存贮和运算上的特殊处理,是MATLAB进行大规模科学计算时的特点和优势之一.可以用表4–3的MATLAB命令,输入稀疏矩阵的非零元(零元不必输入),即可进行运算.
表4–3 稀疏矩阵的MATLAB命令
MATLAB命令
功 能
ZA=sparse(r,c,v,m,n)
表示在第r行、第c列输入数值v,矩阵共m 行n列,输出ZA,给出 (r, c) 及v为一稀疏矩阵.
MA=full(ZA)
输入稀疏矩阵ZA,输出为满矩阵MA(包含零元)
4.2 雅可比(Jacobi)迭代及其MATLAB程序
4.2.2 雅可比迭代的收敛性及其MATLAB程序
根据定理4.3和公式(4.14),现提供一个名为jspb.m的M文件如下:
判别雅可比迭代收敛性的MATLAB主程序
输入的量:线性方程组的系数矩阵;
输出的量:系数矩阵的 的值和有关雅可比迭代收敛性的相关信息.
function a=jspb(A)
[n m]=size(A);
for j=1:m
a(j)=sum(abs(A(:,j)))-2*(abs(A(j,j)));
end
for i=1:n
if a(i)>=0
disp('请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛')
return
end
end
if a(i)<0
disp('请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛 ')
end
例4.2.2 用判别雅可比迭代收敛性的MATLAB主程序,判别由下列方程组的雅可比迭代产生的序列是否收敛?
(1) (2)
解 (1)首先保存名为jspb.m的M文件,然后在MATLAB工作窗口输入程序
>> A=[10 -1 -2;-1 10 -2;-1 -1 5];a=jspb(A)
运行后输出结果
请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛
a =
-8 -8 -1
(2)在MATLAB工作窗口输入程序
>> A=[10 -1 -2;-1 10 -2;-1 -1 0.5];a=jspb(A)
运行后输出结果
请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛
a =
-8.0000e+000 -8.0000e+000 3.5000e+000
4.2.3 雅可比迭代的两种MATLAB程序
利用MATLAB程序和雅可比迭代解线性方程组的常用的方法有两种,一种方法是根据雅可比迭代公式(4.11)、(4.12)式、定理4.3和公式(4.14)编写一个名为jacdd.m的M文件并保存,然后在MATLAB工作窗口输入对应的命令,执行此文件;另一种方法是根据雅可比迭代的定义,利用提取对角矩阵和上、下三角矩阵的MATLAB程序解线性方程组.下面我们分别介绍这两种方法.
(一) 雅可比迭代公式的MATLAB程序
用雅可比迭代解线性方程组的MATLAB主程序
输入的量:线性方程组的系数矩阵和b, 初始向量X0,范数的名称P = 1, 2, inf或 'fro.',近似解X的误差(精度)wucha和迭代的最大次数max1;
输出的量:系数矩阵的 的值和有关雅可比迭代收敛性的相关信息及其的精确解jX和近似解X.
根据雅可比迭代(4.11)、(4.12)式、定理4.3和公式(4.14),现提供一个名为jacdd.m的M文件如下:
function X=jacdd(A,b,X0,P,wucha,max1)
[n m]=size(A);
for j=1:m
a(j)=sum(abs(A(:,j)))-2*(abs(A(j,j)));
end
for i=1:n
if a(i)>=0
disp('请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛')
return
end
end
if a(i)<0
disp('请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛 ')
end
for k=1:max1
k
for j=1:m
X(j)=(b(j)-A(j,[1:j-1,j+1:m])*X0([1: j-1,j+1:m]))/A(j,j);
end
X,djwcX=norm(X'-X0,P); xdwcX=djwcX/(norm(X',P)+eps); X0=X';X1=A\b;
if (djwcX<wucha)&(xdwcX<wucha)
disp('请注意:雅可比迭代收敛,此方程组的精确解jX和近似解X如下:')
return
end
end
if (djwcX>wucha)&(xdwcX>wucha)
disp('请注意:雅可比迭代次数已经超过最大迭代次数max1 ')
end
a,X=X;jX=X1',
例4.2.3 用范数和判别雅可比迭代的MATLAB主程序解例4.2.2 中的方程组,解的精度为0.001,分别取最大迭代次数max1=100,5,初始向量X0=(0 0 0)T,并比较它们的收敛速度.
解 (1)取最大迭代次数max1=100时.
①首先保存名为jacdd.m的M文件,然后在MATLAB工作窗口输入程序
>> A=[10 -1 -2;-1 10 -2;-1 -1 5]; b=[7.2;8.3;4.2];
X0=[0 0 0]'; X=jacdd(A,b,X0,inf,0.001,100)
运行后输出结果
请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛
请注意:雅可比迭代收敛,此方程组的精确解jX和近似解X如下:
a =
-8 -8 -1
jX =
1.1000 1.2000 1.3000
X =
1.0994 1.1994 1.2993
②在MATLAB工作窗口输入程序
>> A=[10 -1 -2;-1 10 -2;-1 -1 0.5]; b=[7.2;8.3;4.2]; X0=[0 0 0]';
X=jacdd(A,b,X0,inf, 0.001,100)
运行后输出结果
请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛
请注意:雅可比迭代收敛,此方程组的精确解jX和近似解X如下:
a =
-8.0000 -8.0000 3.5000
jX =
24.5000 24.6000 106.6000
X =
24.0738 24.1738 104.7974
(2)取最大迭代次数max1=5时,
①在MATLAB工作窗口输入程序
>> A=[10 -1 -2;-1 10 -2;-1 -1 5];
b=[7.2;8.3;4.2]; X0=[0 0 0]'; X=jacdd(A,b,X0,inf,0.001,5)
运行后输出结果
请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,雅可比迭代收敛
请注意:雅可比迭代次数已经超过最大迭代次数max1
a =
-8 -8 -1
jX =
1.1000 1.2000 1.3000
X =
1.0951 1.1951 1.2941
②在MATLAB工作窗口输入程序
>> A=[10 -1 -2;-1 10 -2;-1 -1 0.5]; b=[7.2;8.3;4.2];
X0=[0 0 0]'; X=jacdd(A,b,X0,inf, 0.001,5)
运行后输出结果
请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛
请注意:雅可比迭代次数已经超过最大迭代次数max1
a =
-8.0000 -8.0000 3.5000
jX =
24.5000 24.6000 106.6000
X =
5.5490 5.6490 27.6553
由(1)和(2)可见,如果系数矩阵是严格对角占优的,则雅可比迭代收敛的速度快;如果系数矩阵不是严格对角占优的,则雅可比迭代收敛的速度慢.因此, 的值越小,雅可比迭代收敛的速度越快.
(二)利用雅可比迭代定义编写的解线性方程组的MATLAB程序
利用雅可比迭代定义编写解线性方程组(4.5)的MATLAB程序的一般步骤
步骤1 将线性方程组(4.5)的系数矩阵分解为,其中
,
.
在MATLAB工作窗口输入程序
>> A=[a11 a12 …a1n; a21 a22 …a2n;…; an1 an2 …ann;];
D=diag(A), U=triu(A,1), L=tril(A,-1)
运行后即可输出;
步骤2 若对角矩阵非奇异(即,则(4.5)化为
.
若记
.
则方程组的迭代形式可写作
可以利用下面的MATLAB程序完成
>>dD=det(D);
if dD==0
disp('请注意:因为对角矩阵D奇异,所以此方程组无解.')
else
disp('请注意:因为对角矩阵D非奇异,所以此方程组有解.')
iD=inv(D); B1=iD*(L+U);f1=iD*b;
for k=1:max1
X= B1*X0+ f1; X0=X; djwcX=norm(X-X0,P);
xdwcX=djwcX/(norm(X,P)+eps); X1=A\b;
if (djwcX<wucha)&(xdwcX<wucha)
disp('请注意:雅可比迭代收敛,此方程组的精确解jX和近似解X如下: ')
return
end
end
if (djwcX>wucha)|(xdwcX>wucha)
disp('请注意:雅可比迭代次数已经超过最大迭代次数max1 ')
end
end
a,X=X;jX=X1',
4.3 高斯-塞德尔(Gauss-Seidel)迭代及其MATLAB程序
4.3.3 高斯-塞德尔迭代两种MATLAB程序
利用MATLAB程序和高斯-塞德尔迭代解线性方程组的常用方法有两种,一种方法是根据高斯-塞德尔迭代公式(4.16)、(4.17)、定理4.3和公式(4.14)编写一个名为gsdd.m的M文件并保存,然后在MATLAB工作窗口输入对应的命令,执行此文件;另一种方法是根据高斯-塞德尔迭代的定义,利用提取对角矩阵和上、下三角矩阵的MATLAB程序解线性方程组.下面我们分别介绍这两种方法.
(一) 高斯-塞德尔迭代定义的MATLAB程序1
根据高斯-塞德尔迭代定义,现提供名为gsdddy.m的M文件如下:
用高斯-塞德尔迭代定义解线性方程组的MATLAB主程序1
输入的量:线性方程组的系数矩阵和b, 初始向量X0,范数的名称P = 1, 2, inf, 或 'fro.',近似解X的误差(精度)wucha和迭代的最大次数max1.
输出的量:以系数矩阵的对角元构成的对角矩阵D、A的上三角形矩阵U,但对角元为0、A的下三角形矩阵L,但对角元为0和有关高斯-塞德尔迭代收敛性的相关信息及其的精确解jX和近似解X.
function X=gsdddy(A,b,X0,P,wucha,max1)
D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1); dD=det(D);
if dD==0
disp('请注意:因为对角矩阵D奇异,所以此方程组无解.')
else
disp('请注意:因为对角矩阵D非奇异,所以此方程组有解.')
iD=inv(D-L); B2=iD*U;f2=iD*b;jX=A\b; X=X0; [n m]=size(A);
for k=1:max1
X1= B2*X+f2; djwcX=norm(X1-X,P);
xdwcX=djwcX/(norm(X,P)+eps);
if (djwcX<wucha)|(xdwcX<wucha)
return
else
k,X1',k=k+1;X=X1;
end
end
if (djwcX<wucha)|(xdwcX<wucha)
disp('请注意:高斯-塞德尔迭代收敛,此A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下: ')
else
disp('请注意:高斯-塞德尔迭代发散,并且迭代次数已经超过最大迭代次数max1,方程组的精确解jX和迭代向量X如下: ')
X=X';jX=jX'
end
end
X=X';D,U,L,jX=jX'
例4.3.3 用高斯-塞德尔迭代定义的MATLAB主程序解下列线性方程组,取初始值,要求当时,迭代终止.
(1)(2)
解 (1)首先保存名为gsdddy.m的M文件,然后在MATLAB工作窗口输入程序
>> A=[10 -1 -2;-1 10 -2;-1 -1 0.5]; b=[7.2;8.3;4.2]; X0=[0 0 0]';
X=gsdddy(A,b,X0,inf, 0.001,100)
运行后输出结果
请注意:因为对角矩阵D非奇异,所以此方程组有解.
D =
10.0000 0 0
0 10.0000 0
0 0 0.5000
U =
0 1 2
0 0 2
0 0 0
L =
0 0 0
1 0 0
1 1 0
jX =
24.5000 24.6000 106.6000
X =
24.4996 24.5996 106.5984
请注意:高斯-塞德尔迭代收敛,此A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下:
此近似解与例4.2.3中的(1)中②的解=(24.073 8, 24.173 8, 104.797 4)T比较,在相同的条件下, 高斯-塞德尔迭代比雅可比迭代得到的近似解的精度更高.
(2)在MATLAB工作窗口输入程序
>> A=[3 4 -5 7;2 -8 3 -2;4 51 -13 16;7 -2 21 3];b=[5;2;-1;21];
X0=[0 0 0 0]';X=gsdddy(A,b,X0,inf,0.001,100)
运行后输出结果
请注意:因为对角矩阵D非奇异,所以此方程组有解.
请注意:高斯-塞德尔迭代发散,并且迭代次数已经超过最大迭代次数max1,方程组的精确解jX和迭代向量X如下:
jX =
0.1821 -0.2571 0.7286 1.3036
X = 1.0e+142 *
0.2883 0.1062 0.3622 -3.1374
(二) 高斯-塞德尔迭代公式的MATLAB程序2
根据高斯-塞德尔迭代公式(4.16)、(4.17)、定理4.3和公式(4.14),现提供名为gsdd.m的M文件如下
用高斯-塞德尔迭代解线性方程组的MATLAB主程序2
输入的量:线性方程组的系数矩阵和b, 初始向量X0,范数的名称P = 1, 2, inf, 或 'fro.',近似解X的误差(精度)wucha和迭代的最大次数max1.
输出的量:系数矩阵的 的值和有关高斯-塞德尔迭代收敛性的相关信息及其的精确解jX和近似解X.
function X=gsdd(A,b,X0,P,wucha,max1)
[n m]=size(A);
for j=1:m
a(j)=sum(abs(A(:,j)))-2*(abs(A(j,j)));
end
for i=1:n
if a(i)>=0
disp('请注意:系数矩阵A不是严格对角占优的,此高斯-塞德尔迭代不一定收敛')
return
end
end
if a(i)<0
disp('请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,且高斯-塞德尔迭代收敛 ')
end
for k=1:max1
for j=1:m
if j==1
X(1)=(b(1)-A(1,2:m)*X0(2:m))/A(1,1)
end
if j==m
X(m)=(b(m)-A(m,1:M1)*X(1:M1)')/A(m,m);
end
for j=2:M1
X(j)=(b(j)-A(j,1:j-1)*X(1:j-1) -A(j,j+1:m)*X(j+1:m))/A(j,j);
end
end
djwcX=norm(X'-X0,P);
xdwcX=djwcX/(norm(X',P)+eps); X0=X';X1=A\b;
if (djwcX<wucha)|(xdwcX<wucha)
disp('请注意:高斯-塞德尔迭代收敛,此方程组的精确解jX和近似解X如下: ')
return
end
end
if (djwcX>wucha)&(xdwcX>wucha)
disp('请注意:高斯-塞德尔迭代次数已经超过最大迭代次数max1 ')
end
a,X=X;jX=X1',
4.4 解方程组的超松弛迭代法及其MATLAB程序
用雅可比迭代法和高斯-塞德尔迭代法解线性方程组时,有时收敛速度很慢,为了提高收敛速度,我们介绍超松弛迭代法,它是对高斯-塞德尔迭代的一种加速方法,适用于大型稀疏矩阵方程组的求解.
4.4.2 超松弛迭代法收敛性及其MATLAB程序
根据定理4.5和谱半径定义,现提供名为ddpbj.m的M文件,用于判别超松弛迭代公式(4.23)产生的迭代序列的敛散性.
用谱半径判别超松弛迭代法产生的迭代序列的敛散性的MATLAB主程序
输入的量:线性方程组的系数矩阵和松弛因子om;
输出的量:矩阵的所有特征值和谱半径mH 及其有关超松弛迭代法产生的迭代序列的敛散性的相关信息.
function H=ddpbj(A,om)
D=diag(diag(A));U=-triu(A,1);
L=-tril(A,-1); iD=inv(D-om*L);
B2=iD*(om*U+(1-om)*D);
H=eig(B2);mH=norm(H,inf);
if mH>=1
disp('请注意:因为谱半径不小于1,所以超松弛迭代序列发散,谱半径mH和B的所有的特征值H如下:')
else
disp('请注意:因为谱半径小于1,所以超松弛迭代序列收敛,谱半径mH和B的所有的特征值H如下:')
end
mH
例4.4.1 当取=1.15,5时,判别用超松弛迭代法解下列方程组产生的迭代序列是否收敛?
解 (1)当取=1.15时,首先保存名为ddpbj.m的M文件,然后在MATLAB工作窗口输入程序
>> A=[5 1 -1 -2;2 8 1 3;1 -2 -4 -1;-1 3 2 7]; H=ddpbj(A,1.15)
运行后输出结果
请注意:因为谱半径小于1,所以超松弛迭代序列收敛,谱半径mH和B的所有的特征值H如下:
mH =
0.1596
H =
0.1049 + 0.1203i 0.1049 - 0.1203i -0.1295 + 0.0556i -0.1295 - 0.0556i
(2)当取=5时,然后在MATLAB工作窗口输入程序
>> H=ddpbj(A, 5)
运行后输出结果
请注意:因为谱半径不小于1,所以超松弛迭代序列发散,谱半径mH和B的所有的特征值H如下:
mH =
14.1082
H =
-14.1082 -2.5107 0.5996 + 2.6206i 0.5996 - 2.6206i
4.4.3 超松弛迭代法的MATLAB程序
根据超松弛迭代公式(4.23)和定理4.5,现提供名为cscdd.m的M文件如下:
用超松弛迭代法解线性方程组的MATLAB主程序
输入的量:线性方程组的系数矩阵和b, 初始向量X,范数的名称P = 1, 2, inf, 或 'fro.',松弛因子om,近似解X的误差(精度)wucha和迭代的最大次数max1.
输出的量:谱半径mH,以系数矩阵A的对角元构成的对角矩阵D、A的上三角形矩阵U,但对角元为0、A的下三角形矩阵L,但对角元为0, 迭代次数i,有关超松弛迭代收敛性的相关信息及其的精确解jX和近似解X.
function X=cscdd (A,b,X,om,wucha,max1)
D=diag(diag(A));U=-triu(A,1);
L=-tril(A,-1); jX=A\b;[n m]=size(A);
iD=inv(D-om*L); B2=iD*(om*U+(1-om)*D);
H=eig(B2);mH=norm(H,inf);
for k=1:max1
iD=inv(D-om*L); B2=iD*(om*U+(1-om)*D);
f2= om*iD*b; X1= B2*X+f2;
X=X1; djwcX=norm(X1-jX,inf); xdwcX=djwcX/(norm(X,inf)+eps);
if (djwcX<wucha)|(xdwcX<wucha)
disp('谱半径mH,A的分解矩阵D,U,L和方程组的精确解jX,迭代次数i如下: ')
mH,D,U,L,jX=jX', i=k-1,
return
if i> max1
disp('迭代次数已经超过最大迭代次数max1,谱半径mH,方程组的精确解jX,迭代次数i如下: ')
mH,D,U,L,jX=jX', i=k-1,
end
end
end
if mH>=1
disp('请注意:因为谱半径不小于1,所以超松弛迭代序列发散.')
disp('谱半径mH,A的分解矩阵D,U,L和方程组的精确解jX,迭代次数i和迭代序列X如下:')
i=k-1,mH,D,U,L,jX,
else
disp('因为谱半径小于1,所以超松弛迭代序列收敛,近似解X如下: ')
end
或
function X=cscdd1 (A,b,X,om,wucha,max1)
D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1); jX=A\b;[n m]=size(A);
iD=inv(D-om*L); B2=iD*(om*U+(1-om)*D);
H=eig(B2);mH=norm(H,inf);
for k=1:max1
iD=inv(D-om*L); B2=iD*(om*U+(1-om)*D);
f2= om*iD*b; X1= B2*X+f2; X=X1; djwcX=norm(X1-jX,inf);
xdwcX=djwcX/(norm(X,inf)+eps);
end
if mH>=1
disp('请注意:因为谱半径不小于1,所以超松弛迭代序列发散.谱半径mH,A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下:')
else
disp('请注意:因为谱半径小于1,所以超松弛迭代序列收敛.')
if (djwcX<wucha)|(xdwcX<wucha)
disp('谱半径mH,A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下: ')
mH,D,U,L,jX=jX',
else
disp('迭代次数已经超过最大迭代次数max1,谱半径mH,方程组的精确解jX和迭代向量X如下: ')
mH,D,U,L,X=X1';jX=jX'
return
end
end
例4.4.3 用超松弛迭代法(取=1.15和5)解例4.4.1中的线性方程组.
解 (1)当取=1.15时,首先保存名为cscdd.m的M文件,然后在MATLAB工作窗口输入程序
>> A=[5 1 -1 -2;2 8 1 3;1 -2 -4 -1;-1 3 2 7];b=[4;1;6;-3];
X=[0 0 0 0]';X=cscdd (A,b,X,1.15,0.001,100),
运行后输出结果
谱半径mH,A的分解矩阵D,U,L和方程组的精确解jX,迭代次数i如下:
mH =
0.1596
D =
5 0 0 0
0 8 0 0
0 0 -4 0
0 0 0 7
U =
0 -1 1 2
0 0 -1 -3
0 0 0 1
0 0 0 0
L =
0 0 0 0
-2 0 0 0
-1 2 0 0
1 -3 -2 0
jX =
0.4491 0.2096 -1.4850 -0.0299
i =
3
因为谱半径小于1,所以超松弛迭代序列收敛,近似解X如下:
X =
0.4484
0.2100
-1.4858
-0.0303
(2)当取=5时,保存名为cscdd.m的M文件,然后在MATLAB工作窗口输入程序
>> A=[5 1 -1 -2;2 8 1 3;1 -2 -4 -1;-1 3 2 7];b=[4;1;6;-3];
X=[0 0 0 0]';X=cscdd (A,b,X,5,0.001,100),
运行后输出结果如下:
请注意:因为谱半径不小于1,所以超松弛迭代序列发散.
谱半径mH,A的分解矩阵D,U,L和方程组的精确解jX,迭代次数i和迭代序列X如下:
i = mH =
99 14.1082
D =
5 0 0 0
0 8 0 0
0 0 -4 0
0 0 0 7
U =
0 -1 1 2
0 0 -1 -3
0 0 0 1
0 0 0 0
L =
0 0 0 0
-2 0 0 0
-1 2 0 0
1 -3 -2 0
jX = X =1.0e+114 *
0.4491 -0.3122
0.2096 1.0497
-1.4850 -3.7174
-0.0299 3.9615
59.
展开阅读全文