实验报告三
题目: Rung现象产生和克服
摘要:由于高次多项式插值不收敛,会产生Runge现象,本实验在给出具体的实例后,采用分段线性插值和三次样条插值的方法有效的克服了这一现象,而且还取的很好的插值效果。 前言:(目的和意义)
1. 深刻认识多项式插值的缺点。 2. 明确插值的不收敛性怎样克服。 3. 明确精度与节点和插值方法的关系。 数学原理:
在给定n+1个节点和相应的函数值以后构造n次的Lagrange插值多项式,实验结果表明(见后面的图)这种多项式并不是随着次数的升高对函数的逼近越来越好,这种现象就是Rung现象。
解决Rung现象的方法通常有分段线性插值、三次样条插值等方法。
分段线性插值:
设在区间[a, b]上,给定n+1个插值节点
a=x0 和相应的函数值y0,y1,…,yn,,求作一个插值函数,具有如下性质: 1) ,j=0,1,…,n。 2) 在每个区间[xi, xj]上是线性连续函数。则插值函数称为区间[a, b]上对应n个数据点的分段线性插值函数。 三次样条插值: 给定区间[a, b]一个分划 ⊿:a=x0 1) S(x)在每个区间[xi, xj]上是不高于3次的多项式。 2) S(x)及其2阶导数在[a, b]上连续。则称S(x)使关于分划⊿的三次样条函数。 程序设计: 本实验采用Matlab的M文件编写。其中待插值的方程写成function的方式,如下 function y=f(x); y=1/(1+25*x*x); 写成如上形式即可,下面给出主程序 Lagrange插值源程序: n=input('将区间分为的等份数输入:\\n'); s=[-1+2/n*[0:n]];%%%给定的定点,Rf为给定的函数 x=-1:0.01:1; f=0; for q=1:n+1; l=1;%求插值基函数 for k=1:n+1; if k~=q; l=l.*(x-s(k))./(s(q)-s(k)); else l=l; end end f=f+Rf(s(q))*l;%求插值函数 end plot(x,f,'r')%作出插值函数曲线 grid on hold on 分段线性插值源程序 clear n=input('将区间分为的等份数输入:\\n'); s=[-1+2/n*[0:n]];%%%给定的定点,Rf为给定的函数 m=0; hh=0.001; for x=-1:hh:1; ff=0; for k=1:n+1;%%%求插值基函数 switch k case 1 if x<=s(2); l=(x-s(2))./(s(1)-s(2)); else l=0; end case n+1 if x>s(n); l=(x-s(n))./(s(n+1)-s(n)); else l=0; end otherwise if x>=s(k-1)&x<=s(k); l=(x-s(k-1))./(s(k)-s(k-1)); else if x>=s(k)&x<=s(k+1); l=(x-s(k+1))./(s(k)-s(k+1)); else l=0; end end end ff=ff+Rf(s(k))*l;%%求插值函数值 end m=m+1; f(m)=ff; end %%%作出曲线 x=-1:hh:1; plot(x,f,'r'); grid on hold on 三次样条插值源程序:(采用第一边界条件) clear n=input('将区间分为的等份数输入:\\n');