分别运用高斯赛德尔迭代法和超松弛迭代法解线性方程组:⎪⎪⎪⎭⎫ ⎝⎛-=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--243024410143034321x x x 。
1. 高斯赛德尔迭代法
编程思路:高斯赛德尔迭代法实在雅克比迭代法的基础上进行优化得到的,即在进行迭代时,将已经算得的第k+1步的迭代值代入第k+1步后边的变量的计算当中去,从而加快了迭代速度。
程序代码:
function varargout=Gauss_Seidelli(varargin)
A=[4 3 0;3 4 -1;0 -1 4];
b=[24 30 -24]';
x0=[0;0;0];
x=Gauss_Seidel(A,b,x0)
function x=Gauss_Seidel(A,b,x0)
n=100;%最大迭代次数
ee=0.0001;%精度
n1=length(b);
for i=1:n
x1=x0;
for j=1:n1
s=0;
for k=1:n1
if k~=j
s=s+A(j,k)*x0(k);
end
end
x0(j)=(b(j)-s)/A(j,j);
end
if norm(x1-x0)<ee
break
end
end
x=x0;
2. 超松弛迭代法
该方法是在高斯赛德尔迭代法的基础上将前一步的结果)(k i x 和)1( k i x 进行适当的线性组合以加速收敛,松弛因子ω的选择是关键,当1<ω<2时,即为超松弛迭代法。
程序代码:
function varargout=SORli(varargin)
clc
A=[4 3 0;3 4 -1;0 -1 4];
b=[24;30;-24];
x0=[0;0;0];w=1.3;
x=SOR(A,b,x0,w);
for i=1:3
fprintf('%4.2f ',x(i));
end
fprintf('\n');
function x=SOR(A,b,x0,w)
%AX=b
%x0初始点
%w 为 松弛因子
n=100;%最大迭代次数
ee=0.0001;%精度
n1=length(b);
for i=1:n
x1=x0;
for j=1:n1
s=0;
for k=1:n1
if k~=j
s=s+A(j,k)*x0(k);
end
end
x0(j)=(1-w)*x0(j)+w*(b(j)-s)/A(j,j);
end
if norm(x1-x0)<ee
break
end
end
x=x0;。