function [Lw,f]=fifth1(A,b)%输入方程左端系数和右端向量,输出SOR方法的迭代矩阵,
%及另一个系数
s=size(A);%方程组左端系数矩阵的大小
ss=size(b);
f=zeros(ss(1),ss(2));%定义一个与b向量大小相同的向量
L=zeros(s(1),s(2));
U=L;
D=L;
mv1=L;%定义一个与L大小相同的中间矩阵
w=1.1;%松弛因子
for j=1:1:s(1);
D(j,j)=A(j,j);%对D赴A中的对角线值
fori=j+1:1:s(1);
L(i,j)=-A(i,j);%对L赴A的下三角值
U(j,i)=-A(i,j);%对L赴A的上三角值
end
end
mv1=inv(D-w*L);
mv2=(1-w)*D+w*U;
Lw=mv1*mv2;%得到SOR方法的迭代矩阵
f=w*mv1*b;%得到SOR方法另一系数
%主程序:
clc
clear
A=[4 -1 0 -1 0 0;
-1 4 -1 0 -1 0;
0 -1 4 0 0 -1;
-1 0 0 4 -1 0;
0 -1 0 -1 4 -1;
0 0 -1 0 -14];%初值
b=[2;1;2;2;1;2];%初值
N=20;%循环次数
s=size(A);%方程组左端系数矩阵的大小
[Lw,f]=fifth1(A,b);
X=zeros(s(2),1);%定义所求变量的向量
fork=1:1:N;
X=Lw*X+f;%循环,得到的X值覆盖原来的空间
mv3=b-A*X;%定义中间变量向量,以供判断
m=mv3(1);
fori=1:1:(size(X))(1);
if(mv3(i)>m)
m=mv3(i);%找出中间变量中的最大元素
end
end
if(m<0.00001)%判断是否符合要求的精度
break;%若是退出循环,跳出循环是的k值就就是循环次数
end
end
r=inv(A)*b;%调用软件的函数直接求,进行比较