资源描述:
《数据插值和函数逼近matlab实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数据插值和函数逼近1数据插值由已知样本点,以数据更为平滑为目标,求出其他点处的函数值。在信号处理与图像处理上应用广泛。求解方法:y1=interp1(x,y,x1,'方法')z1=interp2(x,y,z,x1,y1,'方法')1.1一维数据的插值例:假设样本点来自,进行插值处理,得到平滑的曲线。x=0:0.1:1;y=(x.^2-3*x+5).*exp(-5*x).*sin(x);plot(x,y,'*');holdon ;xs=0:0.01:1;y1=interp1(x,y,xs) ;%线性插值y2=interp1(x,y,xs,'
2、cubic')%分段3次Hermite插值y3=interp1(x,y,xs,'spline')%分段三次样条插值plot(xs,y1,'r',xs,y2,'g',xs,y3,'b');例:草图样条曲线功能。functionsketch()x=[];y=[];gca;holdon;axis([01,01]);while1[x0,y0,button]=ginput(1);if(isempty(button))break;end;x=[xx0];y=[yy0];plot(x,y,'*');end;xx=[x(1):(x(end)-x(1))/
3、100:x(end)];yy=interp1(x,y,xx,'spline');plot(xx,yy,x,y,'*');end1.2二维网格数据的插值例3:假设样本点来自,进行插值处理,得到平滑的曲面。[x,y]=meshgrid(-3:0.6:3,-2:0.4:2);z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);mesh(x,y,z);[x1,y1]=meshgrid(-3:0.2:3,-2:0.2:2);z1=interp2(x,y,z,x1,y1);mesh(x1,y1,z1);z1=interp2(x,y,
4、z,x1,y1,'cubic');mesh(x1,y1,z1);z1=interp2(x,y,z,x1,y1,'spline');mesh(x1,y1,z1);1.3二维一般分布数据的插值例4:假设样本点来自,进行插值处理,得到平滑的曲面。x=-3+6*rand(200,1);y=-2+4*rand(200,1);z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);plot3(x,y,z,'*');[x1,y1]=meshgrid(-3:0.2:3,-2:0.2:2);z1=griddata(x,y,z,x1,y1,'c
5、ubic');mesh(x1,y1,z1) ;z1=griddata(x,y,z,x1,y1,'v4');mesh(x1,y1,z1) ;2样条插值函数逼近由已知样本点,求能对其较好拟合的函数表达式。求解方法:S=csapi(x,y);%定义一个三次样条函数类S=spapi(k,x,y);%定义一个k次B样条函数类ys=fnval(S,xs);%计算插值结果fnplt(S);%绘制插值结果例:从中取样本点,计算三次样条函数。%准备样本点x=[0,0.4,1,2,pi,1.5*pi,2*pi];y=sin(x);%计算三次样条函数S=csa
6、pi(x,y);fnplt(S,'r');holdon;ezplot('sin(t)',[02*pi]);plot(x,y,'o') ;6个曲线段的参数方程的系数S.coefs:-0.1393-0.02501.00590-0.1393-0.19230.91890.3894-0.0268-0.44310.53770.84150.1766-0.5236-0.42890.90930.06880.0813-0.93390.00000.06880.4053-0.1697-1.0000第2个曲线段的参数方程:练习:利用上例中的变量S,生成各个曲线段的
7、参数方程,并绘制图形。functionFS=GetAllFun(S) symsx; fori=1:S.pieces FS(i)=S.coefs(i,1)*(x-S.breaks(i))^(S.order-1); forj=2:S.order FS(i)=FS(i)+S.coefs(i,j)*(x-S.breaks(i))^(S.order-j); end end%绘制所有的曲线段 figure; holdon; fori=1:S.pieces ezplot(FS(i
8、),[S.breaks(i),S.breaks(i+1)]); end axis([0S.breaks(end)-11]);例:从中取样本点,计算三次B样条函数。%准备样本点x=[0,0.