基于matlab的jacobi(雅可比)迭代法求解线性方程组

说明推导见此博客:https://blog.csdn.net/zengxyuyu/article/details/53054880

源码见下面:

main.m

clear
clc
A = [8 -3 2;4 11 -1;6 3 12];
b = [20;33;36];
[x, n] = jacobi(A,b,[0,0,0]',1.0e-7,30)

jacobi.m 

function [x,n] = jacobi(A,b,x0,eps,it_max)
%  求线性方程组的Jacobi迭代法,调用格式为

%  [x, k] = jacobi(A,b,x0,eps,it_max)

%  其中, A 为线性方程组的系数矩阵,b 为常数项,eps 为精度要求,默认为1e-6,

%  it_max 为最大迭代次数,默认为200

%  x 为线性方程组的解,k迭代次数
if nargin ==3
    eps = 1.0e-6;
    M = 200;
elseif nargin<3
    disp('输入参数数目不足3个');
    return
elseif nargin ==5
    M = it_max;
end
D = diag(diag(A));%求A的对角矩阵
L = -tril(A,-1);%求A的下三角矩阵
U = -triu(A,1);%求A的上三角矩阵
B = D\(L+U);
f = D\b;
x = B*x0+f;
n = 1;%迭代次数
while norm(x-x0)>=eps
    x0 = x;
    x = B*x0+f
    n = n+1;
    if(n>=M)
        disp('Warning:迭代次数太多,可能不收敛!')
        return;
    end
end

猜你喜欢

转载自blog.csdn.net/han____shuai/article/details/83618336