赞
踩
说明推导见此博客:https://blog..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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。