1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > matlab 拟合等高线图 利用已知数据拟合三维图以及等高线 matlab 数学建模

matlab 拟合等高线图 利用已知数据拟合三维图以及等高线 matlab 数学建模

时间:2020-03-19 21:10:30

相关推荐

matlab 拟合等高线图 利用已知数据拟合三维图以及等高线 matlab 数学建模

Description

给定所有三维的离散坐标(xi, yi, zi)的数据集,如国赛A题附件1 [1] ,请绘制出三维图

思路

因为给定的是离散点求解三维地势图,如果只用 plot3() 的话只能得到三维曲线,并不能拟合成曲面图,所以需要先插值再曲面拟合。

对于插值方面,interp2() 只能处理网格型数据。所以对于离散点数据,我选择的插值方法是 griddata(x, y, z, XI, YI),其中XI,YI是期望的插值位置,与[XI, YI] = meshgrid(XI, YI) 效果相同。

griddata 的语法为 [...] = griddata(..., method),method指定的是插值使用的算法,其值可以是以下几种类型:(1)nearest:线性最近项插值(2)linear:线性插值(默认)(3)cubic:双三次插值(4)v4:MATLAB 4.0 版本中提供的插值算法

得到了插值点集合,绘制曲面图的话可以用 mesh()、surf(),前者得到的是网格划分的三维曲面图,后者得到的是平滑着色的三维曲面图。在这里我选择surf(),用mesh()也是可以的。

之后是绘制等高线、城区分类与图例。

难点是在绘制图例,我采用的办法是使用函数 legend() 。首先利用 plot() 绘制五个线条并返回创建的图线条对象。然后,legend()通过将第一个输入参数指定为要包含的图线条对象的向量,创建一个只包括其中两个线条的图例。更多图例方法请参考 [2] 。

以国赛A题附件1 [1] 为例,matlab脚本代码如下:

clear all,clc;

data= load('data1.txt');

x= data(:, 1);

y= data(:, 2);

z= data(:, 3);

d= data(:, 4);

[X,Y,Z]= griddata(x,y,z,linspace(min(x),max(x))',linspace(min(y),max(y)),'v4'); %插值

subplot(1,2,1);

surfc(X,Y,Z);%三维曲面

xlabel('X'); ylabel('Y'); zlabel('海拔/m');

title('地势图')

axis tight

N= 15;

subplot(1,2,2);

[c, h]= contour(X, Y, Z, [0:30:308]);

clabel(c, h); xlabel('X'); ylabel('Y');

hold onfor i = 1:1:length(x)

switch d(i)

case1p1= plot(x(i), y(i), 'ro');

case2p2= plot(x(i), y(i), 'khexagram');

case3p3= plot(x(i), y(i), 'g^');

case4p4= plot(x(i), y(i), 'y*');

case5p5= plot(x(i), y(i), 'gx');

end

end

legend([p1, p2, p3, p4, p5],'生活区', '工业区', '山区', '交通区', '公园绿地区', 'Location', 'northeastoutside');

hold off

title('等高线以及城区分类')

效果如下:

国赛A题附件1插值拟合出来的三维地势图

国赛A题附件1的等高线以及城市分区

参考

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。