一、实验内容及目的
设区间[-1,1]上函数 f(x)=1/(1+25x2)。
考虑区间[-1,1]的一个等距划分,分点为xi= -1 + 2i/n,i=0,1,2,…,n,
则拉格朗日插值多项式为
.
其中,li(x),i=0,1,2,…,n是n次Lagrange插值基函数。
在一个固定的区间上用插值逼近一个函数,显然Lagrange插值中使用的节点越多,插值多项式的次数就越高。我们自然关心插值多项式的次数增加时,Ln(x)是否也更加靠近被逼近的函数。Runge给出的一个例子是极著名并富有启发性的。
二、程序代码及实验结果
1.代码
function t_charpt2
% 输入:函数式选择,插值结点数
% 输出:拟合函数及原函数的图形
promps = {'请选择实验函数,若选f(x),请输入f,若选h(x),请输入h,若选g(x),请输入g:'};
titles = 'charpt_2';
result = inputdlg(promps,'charpt 2',1,{'f'});
Nb_f = char(result);
if(Nb_f ~= 'f' & Nb_f ~= 'h' & Nb_f ~= 'g')errordlg('实验函数选择错误!');return;end
result = inputdlg({'请输入插值结点数N:'},'charpt_2',1,{'10'});
Nd = str2num(char(result));
if(Nd <1)errordlg('结点输入错误!');return;end
switch Nb_f
case 'f'
f=inline('1./(1+25*x.^2)'); a = -1;b = 1;
case 'h'
f=inline('x./(1+x.^4)'); a = -5; b = 5;
case 'g'
f=inline('atan(x)'); a = -5; b= 5;
end
x0 = linspace(a, b, Nd+1); y0 = feval(f, x0);
x = a:0.1:b; y = Lagrange(x0, y0, x);
fplot(f, [a b], 'co');
hold on;
plot(x, y, 'b--');
xlabel('x'); ylabel('y = f(x) o and y = Ln(x)--');
%--------------------------------------------------------------------
%--以下函数需要创建函数文件
function y=Lagrange(x0, y0, x);
% Lagrange插值
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 = s + p*y0(k);
end
y(i) = s;
end
2.实验结果
(1)f(x)=1/(1+〖25x〗^2 )
节点数对称时,插值函数也是对称的,节点数越多,附近的区域拟合越好;节点数越多,两端误差越大。
(2)h(x)=x/(1+x^4 )
当节点为均匀节点时:插值图像对称,不收敛,但是节点数越多,0附近的拟合效果越好,同时两端的误差较大。 当节点为切比雪夫点时:插值点数目为奇数、偶数,图像对称,但是可以收敛,节点数越多,拟合效果越好。
三、实验总结
1.插值结点的数目不一定是越多拟合的越好,通常情况下会出现发散现象。
因为从差值余项上看,n增大,其分母(n+ 1) !增大,而分子也在不断的增大,哪个的影响更大是和结点的选取直接相关的,不一定就谁大。
2.对称节点的选取,得到的插值函数的对称性与被插值函数相同;节点的位置不对称,则得到的插值函数也不对称,节点位置的选取会影响插值函数的收敛性和误差。
结语
此分享仅为各位同学借鉴之处,只供交流学习,不提倡有同学直接进行抄袭,特别是有可能会看见此篇文章的直系学弟学妹。仅供参考。因为听说直接抄袭被查出来会直接挂哦。