资源描述:
《插 值 及 拟合》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验1插值与拟合【实验目的】1、掌握用MATLAB计算拉格朗日、分段线性、牛顿插值和三次样条四种插值的方法,改变节点的数目,对三种插值结果进行初步分析。2、掌握用MATLAB作线性最小二乘的方法。3、通过实例学习如何用插值方法与拟合方法解决实际问题,注意二者的联系和区别。【实验内容】一、插值(1)一维多项式插值yi=interp1(x,y,xi,method);x必须是向量,y可是是向量也可以是矩阵。如果y是向量, 则必须与x具有相同的长度,这时xi可以是标量、向量和任意维矩阵,yi与xi具有 相同的大小;如果y是矩阵,则其大小必须是[n,d1,
2、d2,...,dk](n是向量x的长度) 函数对d1*d2*d3...*dk组y值都进行插值。yi=interp1(y,xi);默认x为1:n,其中n是向量y的长度。yi=interp1(x,y,xi,method);输入变量method用于指定插值方法yi=interp1(x,y,xi,method,'extrap');对超出插值范围的数据指定外推方法'extrap'yi=interp1(x,y,xi,method,extrapval);对超出差值范围的数值返回extrapval的值 一般为0或者NaN(NotaNumber)PP=interp
3、1(x,y,method,'pp');返回值pp为数据y的分段多项式形式。method指定产生 多项式的方法。y=interpft(x,n);“一维快速傅立叶插值”y=interpft(x,n,dim);在dim指定的维度上进行操作interp1_exm.m例1:%用不同方法对一维数据进行插值,并比较其不同。clear;a=5;x=0:1.2:10;y=sin(x);xi=0:0.1:10;yi_nearest=interp1(x,y,xi,'nearest');yi_linear=interp1(x,y,xi);%默认线性插值yi_spline=
4、interp1(x,y,xi,'spline');yi_cubic=interp1(x,y,xi,'cubic');yi_v5cubic=interp1(x,y,xi,'v5cubic');yi_pchip=interp1(x,y,xi,'pchip');holdonsubplot(231),plot(x,y,'ro',xi,yi_nearest),title('最临近插值')subplot(232),plot(x,y,'ro',xi,yi_linear),title('线性插值')subplot(233),plot(x,y,'ro',xi,yi_s
5、pline),title('三次样条插值')subplot(234),plot(x,y,'ro',xi,yi_cubic),title('三次多项式插值')subplot(235),plot(x,y,'ro',xi,yi_v5cubic),title('三次多项式插值matlab5')subplot(236),plot(x,y,'ro',xi,yi_pchip),title('三次厄米多项式插值')(2)拉格朗日插值MATLAB程序程序功能:以下是拉格朗日插值的名为y_lagrl的M文件: functiony=y_lagr1(x0,y0,x)n=le
6、ngth(x0);m=length(x);fori=1:mz=x(i);s=0.0;fork=1:np=1.0;forj=1:nifj~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;end 例2选择函数y=exp(-x2)(-2≤x≤2),在n个节点上(n不要太大,如5~11)用拉格朗日、分段线性、三次样条三种插值方法,计算m个插值点的函数值(m要适中,如50~100)。通过数值和图形输出,将三种插值结果与精确值进行比较。适当增加n,在作比较,由此作初步分析。运行如下程序: n=7
7、;m=61;x=-2:4/(m-1):2;y=exp(-x.^2);x0=-2:4/(n-1):2;y0=exp(-x0.^2);y1=y_lagr1(x0,y0,x);y2=interp1(x0,y0,x);y3=interp1(x0,y0,x,'spline');plot(x,y,'r--',x,y1,'b:',x,y2,'m',x,y3,'b')gtext('y=exp(-x^2)'),gtext('Lagr.'),gtext('Piece.-linear.'),gtext('Spline'),当输入a=[x’y’y1’y2’y3’]时,就能显
8、示下面的表格 运行后,得到各节点和插值点的值如下:Xyy1y2y300.06670.13330.2000……