matlab 二维曲面插值,Matlab曲面拟合和插值

41528d3028836879cd698677c3999917.gifMatlab曲面拟合和插值

Matlab曲面拟合和插值 Matlab曲面拟合和插值2010-06-02 13:21插值和拟合都是数据优化的一种方法,当实验数据不够多时经常需要用到这种方法来画图。在matlab中都有特定的函数来完成这些功能。这两种方法的确别在于: 当测量值是准确的,没有误差时,一般用插值; 当测量值与真实值有误差时,一般用数据拟合。 插值: 对于一维曲线的插值,一般用到的函数yi=interp1(X,Y,xi,),其中包括nearst,linear,spline,cubic。 对于二维曲面的插值,一般用到的函数zi=interp2(X,Y,Z,xi,yi,),其中也和上面一样,常用的是cubic。 拟合: 对于一维曲线的拟合,一般用到的函数p=polyfit(x,y,n)和yi=polyval(p,xi),这个是最常用的最小二乘法的拟合方法。 对于二维曲面的拟合,有很多方法可以实现,但是我这里自己用的是Spline Toolbox里面的函数功能。具体使用方法可以看后面的例子。 对于一维曲线的插值和拟合相对比较简单,这里就不多说了,对于二维曲面的插值和拟合还是比较有意思的。 原始数据 x=[1:1:15]; y=[1:1:5]; z=[0.2 0.24 0.25 0.26 0.25 0.25 0.25 0.26 0.26 0.29 0.25 0.29; 0.27 0.31 0.3 0.3 0.26 0.28 0.29 0.26 0.26 0.26 0.26 0.29; 0.41 0.41 0.37 0.37 0.38 0.35 0.34 0.35 0.35 0.34 0.35 0.35; 0.41 0.42 0.42 0.41 0.4 0.39 0.39 0.38 0.36 0.36 0.36 0.36; 0.3 0.36 0.4 0.43 0.45 0.45 0.51 0.42 0.4 0.37 0.37 0.37]; z是一个5乘12的矩阵。 直接用原始数据画图如下: surf(x,y,z) title( Original data Plot ); xlabel( X ),ylabel( Y ),zlabel( Z ), colormap,colorbar; axis([0 15 06 0.15 0.55]) 先考虑插值,需要用到的函数interp2 x1=1:0.2:12; y1=1:0.2:5; [x2,y2]=meshgrid(x1,y1); t11=interp2(x,y,z,x2,y2, cubic ); surf(x1,y1,t11) title( After Fit data Plot ); xlabel( X ),ylabel( Y ),zlabel( Z ), colormap,colorbar; axis([0 15 06 0.2 0.55]) 然后考虑拟合,这个稍微复杂一点: ky=3;knotsy=augknt([0:2.5:13],ky); sp=spap2(knotsy,ky,y,z); yy=0:.5:12;vals=fnval(sp,yy); coefsy=fnbrk(sp, c ); kx=5;knotsx=augknt([1:4:5],kx); sp2=spap2(knotsx,kx,x,coefsy. ); coefs=fnbrk(sp2, c ). ; xv=1:.25:5;yv=1:.5:12; values=spcol(knotsx,kx,xv)*coefs*spcol(knotsy,ky,yv). ; surf(yv,xv,values) title( After Polynal data Plot ); xlabel( X ),ylabel( Y ),zlabel( Z ); colormap,colorbar; axis([0 15 06 0.2 0.55]) 图上面的小圆点使用plot3画出来的原始数据点,具体怎么添加的方法我就不多说了。需要把不等边矩阵转换成等边矩阵然后再画图。 效果从上面三个图上面已经看出来了。基本上满足了现在画图的要求,如果测量值比较精确,我们选择第二种方法插值法来画图,如果觉得测量值不是很精确需要用拟合的方法的话,那当然用第三种方法了。关于Spline Toolbox当然还有更多应用,还有就是里面参数设置为什么要这样设,该怎样设要写下来估计再写一整页都写不完,所以还是大家感兴趣的自己去看帮助文档好了,里面有详细介绍。 这里只是告诉大家一种可行的办法,而且经过我自己的测试也确实得到了想要达到的结果。Matlab是个很强的数学工具,前一段时间我也提到了它在Texture里面做图的应用。以后会有更多地方用到Matlab,感兴趣的朋友可以和我交流。^_^ 附录: Matlab样条工具箱(Spline ToolBox)【信息来源教师博客】 Matlab样条工具箱中的函数提供了样条的建立,操作,绘制等功能; 一.样条函数的建立 第一步是建立一个样条函数,曲线或者曲面。这里的样条函数,根据前缀,分为4类: cs*三次样条 pp*分段多项式样条,系数为t^n的系数 sp*B样条,系数为基函数B_n^i(t)的系数 rp*有理B样条 二.样条操作 样条操作包括:函数操作:求值,算术运算,求导求积分等等 节点操作:主要是节点重数的调节,设定,修改等等 附:样条工具箱函数 1.三次样条函数 csapi插值生成三次样条函数 csape生成给定约束条件下的三次样条函数 csaps平滑生成三次样条函数 cscvn生成一条内插参数的三次样条曲线 getcurve动态生成三次样条曲线 2.分段多项式样条函数 ppmak生成分段多项式样条函数 ppual计算在给定点处的分段多项式样条函数值 3.B样条函数 spmak生成B样条函数 spcrv生成均匀划分的B样条函数 spapi插值生成B样条函数 spap2用最小二乘法拟合生成B样条函数 spaps对生成的B样条曲线进行光滑处理 spcol生成B样条函数的配置矩阵 4.有理样条函数 rpmak生成有理样条函数 rsmak生成有理样条函数 5.样条操作函数 fnval计算在给定点处的样条函数值 fmbrk返回样条函数的某一部分(如断点或系数等) fncmb对样条函数进行算术运算 fn2fm把一种形式的样条函数转化成另一种形式的样条函数 fnder求样条函数的微分(即求导数) fndir求样条函数的方向导数 fnint求样条函数的积分 fnjmp在间断点处求函数值 fnplt画样条曲线图 fnrfn在样条曲线中插入断点。 fntlr生成tarylor系数或taylor多项式 6.样条曲线端点和节点处理函数 augknt在已知节点数组中添加一个或多个节点 aveknt求出节点数组元素的平均值 brk2knt增加节点数组中节点的重次 knt2brk从节点数组中求得节

你可能感兴趣的:(matlab,二维曲面插值)