jacobi.m
function [y,n]=jacobi(A,b,x0,ep) %A:系数矩阵;b:常数矩阵;x0:迭代初值;ep:迭代精度;
D=diag(diag(A)); %取A的主对角线上的元素建立对角矩阵;
L=-tril(A,-1); %取A的主对角线以下(不包括主对角线)的元素建立下三角矩阵;
U=-triu(A,1); %取A的主对角线以上(不包括主对角线)的元素建立上三角矩阵;
B=D\(L+U);
f=D\b;
y=B*x0+f;
n=1;
while norm(y-x0)>=ep %用范数判断误差是否满足精度要求
x0=y;
y=B*x0+f;
n=n+1;
end
%fprintf('%d\n',n);
gauseidel.m
function [y,n]=gauseidel(A,b,x0,ep) %A:系数矩阵;b:常数矩阵;x0:迭代初值;ep:迭代精度;
D=diag(diag(A));
L=-tril(A,-1);
U=-triu(A,1);
B=(D-L)\U;
f=(D-L)\b;
y=B*x0+f;
n=1;
while norm(y-x0)>=ep %用范数判断误差是否满足精度要求
x0=y;
y=B*x0+f;
n=n+1;
end
main.m
clear
clc
%A为线性方程组的系数矩阵
A = [4,-1,0,-1,0,0;
-1,4,-1,0,-1,0;
0,-1,4,-1,0,-1;
-1,0,-1,4,-1,0;
0,-1,0,-1,4,-1;
0,0,-1,0,-1,4];
%b为常数项
b = [0,5,-2,5,-2,6]';
%x0为迭代初始值
x0 = [0,0,0,0,0,0]';
%N为迭代次数
[x,n] = jacobi(A,b,x0,1.0e-6)
[x1,n1] = gauseidel(A,b,x0,1.0e-6)
实验结果