满意答案
qin2710236
2016.05.20
采纳率:40% 等级:10
已帮助:468人
你这个程序有几处错误,如函数有输出参数时,结果会自动出现,没必要用fprintf输出。如须要用fprintf输出到屏幕上,则定义函数时可把输出参数去掉,如:function jacobi(A,b,ep,it_max)
当x有多个值时,要单独用一次fprintf ,对你的程序改下:
function jacobi(A,b,ep,it_max)
%function [x,k]=jacobi(A,b,ep,it_max)
%利用jacobi 迭代法解线性方程组AX=b,
if nargin < 4
it_max=100;
end
if nargin<3
ep=1e-5;
end
d=diag(A);
L=-tril(A,-1);
U=-triu(A,1);
if min(abs(d))<1e-10
error ('%对角元素为0,计算失败!');
end
n=length(b);
x=zeros(n,1);
k=1;
invD=spdiags(1./d,0,n,n);
B=invD*(L+U);
f=invD*b;
while k
y=B*x+f;
if norm(y-x,inf)
break;
end
x=y;
k=k+1;
%fprintf('k=%2d,x=%.8e\n',k,x);
fprintf('k=%2d\n',k);
fprintf('x=%.8e\n',x);
end
%test.m clc; clear; A=[10 -1 2 0;-1 11 -1 3;2 -1 10 -1;1 3 -1 8]; b=[6 25 -11 15]';jacobi(A,b)
00分享举报