资源描述:
《数学建模插值及拟合详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数学实验报告(二)插值和拟合实验目的:了解数值分析建模的方法,掌握用Matlab进行曲线拟合的方法,理解用插值法建模的思想,运用Matlab一些命令及编程实现插值建模。实验要求:理解曲线拟合和插值方法的思想,熟悉Matlab相关的命令,完成相应的练习,并将操作过程、程序及结果记录下来。实验内容:一、插值1.插值的基本思想·已知有n+1个节点(xj,yj),j=0,1,…,n,其中xj互不相同,节点(xj,yj)可看成由某个函数y=f(x)产生;·构造一个相对简单的函数y=P(x);·使P通过全部节点,即P(xk)=yk,
2、k=0,1,…,n;·用P(x)作为函数f(x)的近似。2.用MATLAB作一维插值计算yi=interp1(x,y,xi,'method')注:yi—xi处的插值结果;x,y—插值节点;xi—被插值点;method—插值方法(‘nearest’:最邻近插值;‘linear’:线性插值;‘spline’:三次样条插值;‘cubic’:立方插值;缺省时:线性插值)。注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。练习1:机床加工问题机翼断面下的轮廓线上的数据如下表:x035791112131415y01.
3、21.72.02.12.01.81.21.01.6·用程控铣床加工机翼断面的下轮廓线时·每一刀只能沿x方向和y方向走非常小的一步。·表3-1给出了下轮廓线上的部分数据·但工艺要求铣床沿x方向每次只能移动0.1单位.·这时需求出当x坐标每改变0.1单位时的y坐标。·试完成加工所需的数据,画出曲线.步骤1:用x0,y0两向量表示插值节点;步骤2:被插值点x=0:0.1:15;y=y=interp1(x0,y0,x,'spline');步骤3:plot(x0,y0,'k+',x,y,'r')gridon答:x0=[035791
4、112131415];y0=[01.21.72.02.12.01.81.21.01.6];x=0:0.1:15;y=interp1(x0,y0,x,'spline');plot(x0,y0,'k+',x,y,'r')gridon7数学实验报告(二)3.用MATLAB作网格节点数据的插值(二维)z=interp2(x0,y0,z0,x,y,’method’)注:z—被插点值的函数值;x0,y0,z0—插值节点;x,y—被插值点;method—插值方法(‘nearest’:最邻近插值;‘linear’:双线性插值;‘cubi
5、c’:双三次插值;缺省时:双线性插值)。注意:要求x0,y0单调;x,y可取为矩阵,或x取行向量,y取为列向量,x,y的值分别不能超出x0,y0的范围。4.用MATLAB作散点数据的插值计算cz=griddata(x,y,z,cx,cy,‘method’)注:cz—被插点值的函数值;x,y,z—插值节点;cx,cy—被插值点;method—插值方法(‘nearest’:最邻近插值;‘linear’:双线性插值;‘cubic’:双三次插值;'v4‘:Matlab提供的插值方法;缺省时:双线性插值)。练习2:航行区域的警示线
6、·某海域上频繁地有各种吨位的船只经过。·为保证船只的航行安全,有关机构在低潮时对水深进行了测量,下表是他们提供的测量数据:·水道水深的测量数据x129.0140.0103.588.0185.5195.0105.5y7.5141.523.0147.022.5137.585.5z4868688x157.5107.577.081.0162.0162.0117.5y-6.5-81.03.056.5-66.584.0-33.5z99889497数学实验报告(二)·其中(x,y)为测量点,z为(x,y)处的水深(英尺),水深z是区域
7、坐标(x,y)的函数z=z(x,y),·船的吨位可以用其吃水深度来反映,分为4英尺、4.5英尺、5英尺和5.5英尺4档。·航运部门要在矩形海域(75,200)×(-50,150)上为不同吨位的航船设置警示标记。·请根据测量的数据描述该海域的地貌,并绘制不同吨位的警示线,供航运部门使用。x=[129140103.588185.5195105.5157.5107.57781162162117.5];y=[7.5141.52314722.5137.585.5-6.5-81356.5-66.584-33.5];z=[-4-8-6
8、-8-6-8-8-9-9-8-8-9-4-9];cx=75:0.5:200;cy=-70:0.5:150;cz=griddata(x,y,z,cx,cy','cubic');meshz(cx,cy,cz),rotate3dxlabel('X'),ylabel('Y'),zlabel('Z')%pausefigure(