用jacobi迭代法求解线性方程,求助matlab大师
答案:1 悬赏:80 手机版
解决时间 2021-11-07 08:56
- 提问者网友:自食苦果
- 2021-11-07 04:37
用jacobi迭代法求解线性方程,求助matlab大师
最佳答案
- 五星知识达人网友:長槍戰八方
- 2021-11-07 05:52
找了段代码,稍加改造,供参考:
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;
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求解:
ans =
0.98126951092612
0.93860561914672
0.70239334027055
可以看到,精度满足小数点后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;
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求解:
ans =
0.98126951092612
0.93860561914672
0.70239334027055
可以看到,精度满足小数点后6位数字的要求。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯