2016-02-27 回答
我这有个例子挺好看看应该明白!
e(x0,y0,x)
n=length(x0);m=length(x);
for i=1:m
z=x(i);
s=0.0;
for k=1:n
p=1.0;
for j=1:n
if j~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
y(i)=s;
end
sor迭代法的matlab程序
function [x]=sor_iterative(a,b)
% 用sor迭代求解线性方程组,矩阵a是方阵
x0=zeros(1,length(b)); % 赋初值
tol=10^(-2); % 给定误差界
n=1000; % 给定最大迭代次数
[n,n]=size(a); % 确定矩阵a的阶
w=1; % 给定松弛因子
k=1;
% 迭代过程
while k=n
x(1)=(b(1)-a(1,2:n)*x0(2:n)')/a(1,1);
for i=2:n
x(i)=(1-w)*x0(i)+w*(b(i)-a(i,1:i-1)*x(1:i-1)'-a(i,i+1:n)*x0(i+1:n)')/a(i,i);
end
if max(abs(x-x0))=tol
fid = fopen('sor_iter_result.txt', 'wt');
fprintf(fid,'\n********用sor迭代求解线性方程组的输出结果********\n\n');
fprintf(fid,'迭代次数: %d次\n\n',k);
fprintf(fid,'x的值\n\n');
fprintf(fid, '%12.8f \n', x);
break;
end
k=k+1;
x0=x;
end
if k==n+1
fid = fopen('sor_iter_result.txt', 'wt');
fprintf(fid,'\n********用sor迭代求解线性方程组的输出结果********\n\n');
fprintf(fid,'迭代次数: %d次\n\n',k);
fprintf(fid,'超过最大迭代次数,求解失败!');
fclose(fid);
end