xxxxxxxxxxxxx学院实验报告课程名称:数学实验课程设计实验名称:山脉数据处理实验类型:验证性□综合性□设计性■实验室名称:数学实验室班级学号:学生姓名:任课教师(教师签名):成绩:实验日期: 2010-7-10一、实验目的1.通过实际操作,更好的了解、学习数学实验的方法、步骤及其实际应用。
2.学习及巩固解决插值与拟合等问题的方法。
3.通过这次的实验设计,认识到拟合也是一种比较好的数学实验的预测模型。
二、实验用仪器设备、器材或软件环境MATLAB7.0 Windows XP三、问题重述、实验原理、方案设计、程序框图、预编程序等1.问题重述:山区地貌:在某山区测得一些地点的高程如下表:(平面区域1200≤x≤4000,1200≤y ≤3600),要求:采用插值方法建立数学模型,用MATLAB软件求解。
(1)试作出该山区的地貌图(不同视角)和等高线图,可采用多种插值方法进行处理,并对你所使用的方法进行比较。
(2)设计某种可行的算法,预测周边400米地方的山脉情况进行预测(或估计),将实际山脉高度和预测山脉高度绘制在一个图中。
山脉数据如下:(单位:米)。
3600 3200 2800 2400 2000 1600 1200 14801500 1550 1510 1430 1300 1200 980 15001550 1600 1550 1600 1600 1600 1550 15001200 1100 1550 1600 1550 1380 1070 15001200 1100 1350 1450 1200 1150 1010 1390 1500 1500 1400 900 1100 1060 950 1320 1450 1420 1400 1300 700 900 850 1130 1250 1280 1230 1040 900 500 700y/x1200 1600 2000 2400 2800 3200 3600 4000 2.实验原理(1)使用二维插值即可解决,引用z=interp2(x,y,z,xi,yi','Method')函数,其中 Method 可以是‘nearest’‘linear’‘spline’‘cubic’中的任意一个。
(2) 对于第二个问题,我们通法进行对周围400米的山脉情况进行估计,方法简介:通过一个方向,对这个方向的一些直线进行拟合,求出800米和4400米的山脉高度,绘制出新的山区山脉地貌图和等高线图。
五、实验步骤、程序调试方法1. 程序(1)编写M文件如下:x=1200:400:4000;y=1200:400:3600;z=[1130 1250 1280 1230 1040 900 500 700;1320 1450 1420 1400 1300 700 900 850;1390 1500 1500 1400 900 1100 1060 950;1500 1200 1100 1350 1450 1200 1150 1010;1500 1200 1100 1550 1600 1550 1380 1070;1500 1550 1600 1550 1600 1600 1600 1550;1480 1500 1500 1510 1430 1300 1200 980];figure(1);mesh(x,y,z)xlabel('X'),ylabel('Y'),zlabel('Z')xi=1200:50:4000;yi=1200:50:3600;figure(2)z1i=interp2(x,y,z,xi,yi','nearest');surfc(xi,yi,z1i)xlabel('X'),ylabel('Y'),zlabel('Z')figure(3)z2i=interp2(x,y,z,xi,yi');surfc(xi,yi,z2i)xlabel('X'),ylabel('Y'),zlabel('Z')figure(4)z3i=interp2(x,y,z,xi,yi','cubic');surfc(xi,yi,z3i)xlabel('X'),ylabel('Y'),zlabel('Z')figure(5)subplot(1,3,1),contour(xi,yi,z1i,15,'r'); subplot(1,3,2),contour(xi,yi,z2i,15,'r'); subplot(1,3,3),contour(xi,yi,z3i,15,'r');四、实验过程中需要记录的实验数据表格在程序(1)运行后可得到五张图,可以进行相互比较。
100020003000400010002000300040004006008001000120014001600XYZ100020003000400010002000300040004006008001000120014001600XYZ100020003000400010002000300040004006008001000120014001600XYZ100020003000400010002000300040000500100015002000XYZ200030004000150020002500300035002000300040001500200025003000350020003000400015002000250030003500通过图形对三种插值法的效果进行比较从上面的三个插值方法通过matlab 软件对山脉地貌,得到了上面几个图形,我们可以从三个插值法所得到的三个图形都能从各个角度来反映到底的山脉地貌情况,通过曲线的疏密情况反映当地山脉的高度变化情况,相对来说高次的插值拟合效果更好,更能反映山脉地貌情况,但其他两种插值也可以基本反映,因而对于不同的实验问题,可以选择不同的插值方法。
2.对于第二小问,我们通过拟合的方法进行对周围400米的山脉情况进行估计,方法简介:通过一个方向,对这个方向的一些直线进行拟合,用matlab软件求出800米和4400米的山脉高度,绘制出新的山区山脉地貌图和等高线图。
编写M1文件如下:x=1200:400:4000;y=1200:400:3600;x2=800:400:4400;y2=800:400:4000;xi=1200:50:4000;yi=1200:50:3600;xi2=800:50:4400;yi2=800:50:4000;z=[1130 1250 1280 1230 1040 900 500 700;...1320 1450 1420 1400 1300 700 900 850;...1390 1500 1500 1400 900 1100 1060 950;...1500 1200 1100 1350 1450 1200 1150 1010;...1500 1200 1100 1350 1600 1550 1380 1070;...1500 1550 1600 1550 1600 1600 1600 1550;...1480 1500 1550 1510 1430 1300 1200 980;];A=zeros(15,3);B=zeros(7,2);%B(x=800,x=4400);C=zeros(2,8);%C(y=800,y=4000);z_new=zeros(9,10);for i=1:7A(i,:)=polyfit(x,z(i,:),2);B(i,1)=polyval(A(i,:),800);B(i,2)=polyval(A(i,:),4400);endfor j=1:8A(j+7,:)=polyfit(y,z(:,j)',2);C(1,j)=polyval(A(j+7,:),800);C(2,j)=polyval(A(j+7,:),4000);endfor m=2:8for n=2:9z_new(m,n)=z(m-1,n-1);endendfor p=2:8z_new(p,1)=B(p-1,1);z_new(p,10)=B(p-1,2);endfor q=2:9z_new(1,q)=C(1,q-1);z_new(9,q)=C(2,q-1);endz_new(1,1)=0.5*(polyval(polyfit(y,B(:,1)',2),800)+polyval(polyfit(x,C(1,:),2),800));z_new(1,10)=0.5*(polyval(polyfit(y,B(:,2)',2),800)+polyval(polyfit(x,C(1,:),2),4400)); z_new(9,1)=0.5*(polyval(polyfit(y,B(:,1)',2),4000)+polyval(polyfit(x,C(2,:),2),800)); z_new(9,10)=0.5*(polyval(polyfit(y,B(:,2)',2),4000)+polyval(polyfit(x,C(2,:),2),4400));figure(1)subplot(2,2,1)meshz(x,y,z)xlabel('X'),ylabel('Y'),zlabel('Z')subplot(2,2,2)meshz(x2,y2,z_new)xlabel('X'),ylabel('Y'),zlabel('Z')subplot(2,2,3)z1i=interp2(x,y,z,xi,yi','nearest');surfc(xi,yi,z1i)xlabel('X'),ylabel('Y'),zlabel('Z')subplot(2,2,4)z1i2=interp2(x2,y2,z_new,xi2,yi2','nearest');surfc(xi2,yi2,z1i2)xlabel('X'),ylabel('Y'),zlabel('Z')figure(2)subplot(2,2,1)z2i=interp2(x,y,z,xi,yi');surfc(xi,yi,z2i)xlabel('X'),ylabel('Y'),zlabel('Z')subplot(2,2,2)z2i2=interp2(x2,y2,z_new,xi2,yi2');surfc(xi2,yi2,z2i2)xlabel('X'),ylabel('Y'),zlabel('Z')subplot(2,2,3)z3i=interp2(x,y,z,xi,yi','cubic');surfc(xi,yi,z3i)xlabel('X'),ylabel('Y'),zlabel('Z')subplot(2,2,4)z3i2=interp2(x2,y2,z_new,xi2,yi2','cubic');surfc(xi2,yi2,z3i2)xlabel('X'),ylabel('Y'),zlabel('Z')figure(3)subplot(2,3,1),contour(xi,yi,z1i,10,'r');subplot(2,3,2),contour(xi,yi,z2i,10,'r');subplot(2,3,3),contour(xi,yi,z3i,10,'r');subplot(2,3,4),contour(xi2,yi2,z1i2,10,'r');subplot(2,3,5),contour(xi2,yi2,z2i2,10,'r');subplot(2,3,6),contour(xi2,yi2,z3i2,10,'r');通过MATLAB运行后得到数据为:1151.1 954.29 1407.1 1532.9 1250 842.86 450 78.571 435.71 341.28 1139.81130 1250 1280 1230 1040 900 500 700273.04 14051320 1450 1420 1400 1300 700 900 850515.71 1566.81390 1500 1500 1400 900 1100 1060 950 818.93 1333.21500 1200 1100 1350 1450 1200 1150 1010 981.79 1180.91500 1200 1100 1350 1600 1550 1380 1070 1126.3 14581500 1550 1600 1550 1600 1600 1600 15501527.7 1383.81480 1500 1550 1510 1430 1300 1200 980 759.11 1280.2 1388.6 1592.9 1752.9 1561.4 1548.6 1435.7 1170 1110 741.43 注:边上范围内绿色的一圈为周围400米预测的高度也得到了一下的图形:六、实验数据处理及结果分析通过上面的800米和4400米的高度情况进行分析,还有通过对前后山脉地貌的情况差异进行分析,我们可以得到一个相对来说比较可观的对周围400米山脉的预测情况,通过应用数学上的拟合方法,通过一个方向的无数条曲线的特点,可以做出延伸部分的曲线情况,但周围400米的预测高度的对角线上几个数据时通过对两条曲线拟合的结果取平均值得到的结果。