使用matlab实现Jacobi迭代法与Gauss-Seidel迭代法求解线性方程组

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)

实验结果
使用matlab实现Jacobi迭代法与Gauss-Seidel迭代法求解线性方程组

上一篇:halcon-通过视觉提取血管造影中血管并测量直径


下一篇:Regularization for Logistic Regression: L1, L2, Gauss or Laplace?