用jacobi迭代法求解线性方程,求助matlab大师
9x1-x2+x3=10 -x1+10x2-2x3=7 -2x1+x2+10x3=6,设迭代初值为0,精度为10^-6
求助matlab大师啊,,急啊!!!! 展开
找了段代码,稍加改造,供参考:
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位数字的要求。
2024-07-18 广告