欢迎来到天天文库
浏览记录
ID:59595782
大小:85.50 KB
页数:14页
时间:2020-11-14
《多项式插值实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.实验报告一题目:多项式插值摘要:熟悉插值多项式构造,通过计算机解决实验问题;龙格现象的发生、防止,通过拉格朗日插值、分段线性插值以及三次样条插值进行插值效果的比较通过分析、推导,掌握数据插值的思想方法;通过对插值方法的进一步讨论,了解插值的“龙格”现象;熟悉常用的分段线性插值和样条插值的使用方法;掌握上机编程与调试能力。由于高次多项式插值不收敛,会产生Runge现象,本实验在给出具体的实例后,采用分段线性插值和三次样条插值的方法有效的克服了这一现象,而且还取的很好的插值效果。前言:(目的和意义)1.掌握拉格朗日插值法,分段线性
2、插值法,三次样条插值法。2.深刻认识多项式插值的缺点。3.明确插值的不收敛性怎样克服。4.明确精度与节点和插值方法的关系。Word资料.数学原理:在给定n+1个节点和相应的函数值以后构造n次的Lagrange插值多项式,实验结果表明(见后面的图)这种多项式并不是随着次数的升高对函数的逼近越来越好,这种现象就是Rung现象。解决Rung现象的方法通常有分段线性插值、三次样条插值等方法。分段线性插值:设在区间[a,b]上,给定n+1个插值节点a=x03、性质:1),j=0,1,…,n。2)在每个区间[xi,xj]上是线性连续函数。则插值函数称为区间[a,b]上对应n个数据点的分段线性插值函数。三次样条插值:给定区间[a,b]一个分划⊿:a=x04、1+25*x*x);写成如上形式即可,下面给出主程序Lagrange插值源程序:function[p]=Lag_polyfit(X,Y)%Matlab函数文件Lag_polyfit.m%拉格朗日插值法多项式拟合P17%[p]=Lag_polyfit(X,Y)%X拟合自变量%Y拟合函数值%p所得的拟合多项式系数ifsize(X)~=size(Y)error('变量不匹配');end%如果要拟合的函数值与自变量维数不一样,则退出报错Word资料.tic%开始记时formatlongg%设置最合适的数字格式r=size(Y);n=r(5、2);%n为要拟合的数据长度p=zeros(1,n);%保存所得多项式系数p0=p;b=0;%工作变量W=poly(X);%W为以X为根的多项式dW=polyder(W);%dW为对多项式W求导后的多项式系数z=polyval(dW,X);%z为以dW为系数的多项式对X的值A=[11];r=A;%A,r为长度为2的(1,2)向量fori=1:n%计算循环开始A=[1,-X(i)];%A为一次多项式x-x(i)系数[p0,r]=deconv(W,A);%进行多项式除法W/A,p0为商b=Y(i)/z(i);p0=b.*p0;%p06、为累加项p=p+p0;end%循环结束disp(toc)%Word资料.分段线性插值源程序clearn=input('将区间分为的等份数输入:');s=[-1+2/n*[0:n]];%%%给定的定点,Rf为给定的函数m=0;hh=0.001;forx=-1:hh:1;ff=0;fork=1:n+1;%%%求插值基函数switchkcase1ifx<=s(2);l=(x-s(2))./(s(1)-s(2));elsel=0;endcasen+1ifx>s(n);Word资料.l=(x-s(n))./(s(n+1)-s(n));7、elsel=0;endotherwiseifx>=s(k-1)&x<=s(k);l=(x-s(k-1))./(s(k)-s(k-1));elseifx>=s(k)&x<=s(k+1);l=(x-s(k+1))./(s(k)-s(k+1));elsel=0;endendendff=ff+Rf(s(k))*l;%%求插值函数值endm=m+1;f(m)=ff;Word资料.end%%%作出曲线x=-1:hh:1;plot(x,f,'r');gridonholdon三次样条插值源程序:(采用第一边界条件)clearn=input('将8、区间分为的等份数输入:');%%%插值区间a=-1;b=1;hh=0.001;%画图的步长s=[a+(b-a)/n*[0:n]];%%%给定的定点,Rf为给定的函数%%%%第一边界条件Rf"(-1),Rf"(1)v=5000*1/(1+25*a*a)^3-5
3、性质:1),j=0,1,…,n。2)在每个区间[xi,xj]上是线性连续函数。则插值函数称为区间[a,b]上对应n个数据点的分段线性插值函数。三次样条插值:给定区间[a,b]一个分划⊿:a=x04、1+25*x*x);写成如上形式即可,下面给出主程序Lagrange插值源程序:function[p]=Lag_polyfit(X,Y)%Matlab函数文件Lag_polyfit.m%拉格朗日插值法多项式拟合P17%[p]=Lag_polyfit(X,Y)%X拟合自变量%Y拟合函数值%p所得的拟合多项式系数ifsize(X)~=size(Y)error('变量不匹配');end%如果要拟合的函数值与自变量维数不一样,则退出报错Word资料.tic%开始记时formatlongg%设置最合适的数字格式r=size(Y);n=r(5、2);%n为要拟合的数据长度p=zeros(1,n);%保存所得多项式系数p0=p;b=0;%工作变量W=poly(X);%W为以X为根的多项式dW=polyder(W);%dW为对多项式W求导后的多项式系数z=polyval(dW,X);%z为以dW为系数的多项式对X的值A=[11];r=A;%A,r为长度为2的(1,2)向量fori=1:n%计算循环开始A=[1,-X(i)];%A为一次多项式x-x(i)系数[p0,r]=deconv(W,A);%进行多项式除法W/A,p0为商b=Y(i)/z(i);p0=b.*p0;%p06、为累加项p=p+p0;end%循环结束disp(toc)%Word资料.分段线性插值源程序clearn=input('将区间分为的等份数输入:');s=[-1+2/n*[0:n]];%%%给定的定点,Rf为给定的函数m=0;hh=0.001;forx=-1:hh:1;ff=0;fork=1:n+1;%%%求插值基函数switchkcase1ifx<=s(2);l=(x-s(2))./(s(1)-s(2));elsel=0;endcasen+1ifx>s(n);Word资料.l=(x-s(n))./(s(n+1)-s(n));7、elsel=0;endotherwiseifx>=s(k-1)&x<=s(k);l=(x-s(k-1))./(s(k)-s(k-1));elseifx>=s(k)&x<=s(k+1);l=(x-s(k+1))./(s(k)-s(k+1));elsel=0;endendendff=ff+Rf(s(k))*l;%%求插值函数值endm=m+1;f(m)=ff;Word资料.end%%%作出曲线x=-1:hh:1;plot(x,f,'r');gridonholdon三次样条插值源程序:(采用第一边界条件)clearn=input('将8、区间分为的等份数输入:');%%%插值区间a=-1;b=1;hh=0.001;%画图的步长s=[a+(b-a)/n*[0:n]];%%%给定的定点,Rf为给定的函数%%%%第一边界条件Rf"(-1),Rf"(1)v=5000*1/(1+25*a*a)^3-5
4、1+25*x*x);写成如上形式即可,下面给出主程序Lagrange插值源程序:function[p]=Lag_polyfit(X,Y)%Matlab函数文件Lag_polyfit.m%拉格朗日插值法多项式拟合P17%[p]=Lag_polyfit(X,Y)%X拟合自变量%Y拟合函数值%p所得的拟合多项式系数ifsize(X)~=size(Y)error('变量不匹配');end%如果要拟合的函数值与自变量维数不一样,则退出报错Word资料.tic%开始记时formatlongg%设置最合适的数字格式r=size(Y);n=r(
5、2);%n为要拟合的数据长度p=zeros(1,n);%保存所得多项式系数p0=p;b=0;%工作变量W=poly(X);%W为以X为根的多项式dW=polyder(W);%dW为对多项式W求导后的多项式系数z=polyval(dW,X);%z为以dW为系数的多项式对X的值A=[11];r=A;%A,r为长度为2的(1,2)向量fori=1:n%计算循环开始A=[1,-X(i)];%A为一次多项式x-x(i)系数[p0,r]=deconv(W,A);%进行多项式除法W/A,p0为商b=Y(i)/z(i);p0=b.*p0;%p0
6、为累加项p=p+p0;end%循环结束disp(toc)%Word资料.分段线性插值源程序clearn=input('将区间分为的等份数输入:');s=[-1+2/n*[0:n]];%%%给定的定点,Rf为给定的函数m=0;hh=0.001;forx=-1:hh:1;ff=0;fork=1:n+1;%%%求插值基函数switchkcase1ifx<=s(2);l=(x-s(2))./(s(1)-s(2));elsel=0;endcasen+1ifx>s(n);Word资料.l=(x-s(n))./(s(n+1)-s(n));
7、elsel=0;endotherwiseifx>=s(k-1)&x<=s(k);l=(x-s(k-1))./(s(k)-s(k-1));elseifx>=s(k)&x<=s(k+1);l=(x-s(k+1))./(s(k)-s(k+1));elsel=0;endendendff=ff+Rf(s(k))*l;%%求插值函数值endm=m+1;f(m)=ff;Word资料.end%%%作出曲线x=-1:hh:1;plot(x,f,'r');gridonholdon三次样条插值源程序:(采用第一边界条件)clearn=input('将
8、区间分为的等份数输入:');%%%插值区间a=-1;b=1;hh=0.001;%画图的步长s=[a+(b-a)/n*[0:n]];%%%给定的定点,Rf为给定的函数%%%%第一边界条件Rf"(-1),Rf"(1)v=5000*1/(1+25*a*a)^3-5
此文档下载收益归作者所有