南昌航空大学数学与信息科学学院实验报告
20001500Z100050004000300030002000Y100010002000X4000
350035003500300030003000250025002500200020002000150015001500200030004000200030004000200030004000
通过图形对三种插值法的效果进行比较
从上面的三个插值方法通过matlab软件对山脉地貌,得到了上面几个图形,我
第 5 页
南昌航空大学数学与信息科学学院实验报告
们可以从三个插值法所得到的三个图形都能从各个角度来反映到底的山脉地貌情况,通过曲线的疏密情况反映当地山脉的高度变化情况,相对来说高次的插值拟合效果更好,更能反映山脉地貌情况,但其他两种插值也可以基本反映,因而对于不同的实验问题,可以选择不同的插值方法。
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:7
A(i,:)=polyfit(x,z(i,:),2); B(i,1)=polyval(A(i,:),800); B(i,2)=polyval(A(i,:),4400); end
for j=1:8
A(j+7,:)=polyfit(y,z(:,j)',2); C(1,j)=polyval(A(j+7,:),800); C(2,j)=polyval(A(j+7,:),4000); end
第 6 页
南昌航空大学数学与信息科学学院实验报告
for m=2:8 for n=2:9
z_new(m,n)=z(m-1,n-1); end end
for p=2:8
z_new(p,1)=B(p-1,1); z_new(p,10)=B(p-1,2); end
for q=2:9
z_new(1,q)=C(1,q-1); z_new(9,q)=C(2,q-1); end
z_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')
第 7 页
南昌航空大学数学与信息科学学院实验报告
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.8 1130 1250 1280 1230 1040 900 500 700 273.04 1405 1320 1450 1420 1400 1300 700 900 850 515.71 1566.8 1390 1500 1500 1400 900 1100 1060 950 818.93 1333.2 1500 1200 1100 1350 1450 1200 1150 1010 981.79 1180.9 1500 1200 1100 1350 1600 1550 1380 1070 1126.3 1458 1500 1550 1600 1550 1600 1600 1600 1550 1527.7 1383.8 1480 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米预测的高度
也得到了一下的图形:
第 8 页
南昌航空大学数学与信息科学学院实验报告
第 9 页