作业帮 > 综合 > 作业

用jacobi迭代法求解线性方程,求助matlab大师

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/19 02:37:01
用jacobi迭代法求解线性方程,求助matlab大师
用jacobi迭代法求解线性方程
9x1-x2+x3=10 -x1+10x2-2x3=7 -2x1+x2+10x3=6,设迭代初值为0,精度为10^-6
找了段代码,稍加改造,供参考:
 
function [x,n]=jacobi(A,b,eps,x0)
% Jacobi迭代法求解线性方程组,其中
%  A --- 方程组的系数矩阵
%  b --- 方程组的右端项
%  eps --- 精度要求,缺省为1e-6
%  x0 --- 解的初值,可省略
%  x ---  方程组的解
%  n ---  迭代次数
if nargin < 2,error('输入参数数量不足'); end
if nargin < 4,x0 = zeros(length(b),1); end
if nargin < 3,eps= 1.0e-6; end
 
M = 200;         % 最大迭代次数
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

 
调用示例:
A = [
    9  -1 3
    -1 10 -2
    -2 1  10
];
b=[10; 7; 6];
jacobi(A,b,1e-6)
 
得到结果:
ans =
   0.98126975286522
   0.93860544813362
   0.70239327635714

 
直接用A\b求
ans =
   0.98126951092612
   0.93860561914672
   0.70239334027055

可以看到,精度满足小数点后6位数字的要求.