Matlab来绘制三维曲面图、等高线图等 文章目录前言一、Matlab插值1.Meshgrid函数2.Griddata函数二、绘制1.使用函数1linspace函数2peaks函数3polt3函数4mesh函数5surf函数6contour函数2.步骤1常见数学函数绘图2离散数据绘图引用出处前言最近需要用到Matlab来绘制三维的地形图等即通过已知的山地海拔数据利用Matlab软件使用插值法绘制三维曲面图、等高线图。一、Matlab插值插值就是在已知数据之间计算估计值的过程,是一种实用的数值方法,是函数逼近的重要方法。在信号处理和图形分析中,插值运算的应用较为广泛。而matlab中常用的有interpmeshgridgriddata等函数。我在这里仅使用meshgrid和griddata函数关于Matlab插值的其他方法有兴趣可以看 Matlab 之meshgrid, interp, griddata 用法和实例(转).以及Matlab中插值函数汇总和使用说明。1.Meshgrid函数Meshgrid用于从数组a和b产生网格生成用于画三维图形的矩阵数据。生成的网格矩阵A和B大小是相同的。它也可以是更高维的。这里的大小指的是size()函数的大小size()函数返回的是一个向量 那么size(A) size(B)。[A,B]meshgrid(a,b)生成size(b)Xsize(a)大小的矩阵A和B。它相当于a从一行重复增加到size(b)行把b转置成一列再重复增加到size(a)列。meshgrid 和 mesh 方法的差别在于是否会画出栅格线。生成绘制3D图形所需的网格数据。因为在计算机中进行绘图操作时往往需要一些采样点然后根据这些采样点来绘制出整个图形。涉及到a、b这两组数据可以看做是在 Oxy 平面内对坐标进行采样得到的坐标对(a, b)。1解释输出 X 的每一行的数值都是复制的x的值输出 Y 的每一列的数值都是复制的y的值。 所以若x-1xm维, y-1xn维则[X,Y]为 mxn 维 也就是说在 XOY 平面上用m个x和n个y通过不断做垂线产生交点从而生成小的矩形网格的方法生成网格图。[X,Y]meshgrid(x) 与 [X,Y]meshgrid(x,x) 是等同的2.Griddata函数用二元函数zf(x,y)的曲面拟合有不规则的数据向量x,y,z。griddata 将返回曲面z 在点XI,YI处的插值。曲面总是经过这些数据点x,y,z的。输入参量XI,YI通常是规则的格点像用命令meshgrid 生成的一样。XI 可以是一行向量这时XI 指定一有常数列向量的矩阵。类似地YI 可以是一列向量它指定一有常数行向量的矩阵。格式(1)vq griddata(x,y,v,xq,yq)vq griddata(x,y,v,xq,yq) 使 v f(x,y) 形式的曲面与向量 (x,y,v) 中的散点数据拟合。griddata 函数在 (xq,yq) 指定的查询点对曲面进行插值并返回插入的值 vq。曲面始终穿过 x 和 y 定义的数据点。(2)vq griddata(x,y,z,v,xq,yq,zq)vq griddata(x,y,z,v,xq,yq,zq) 拟合 v f(x,y,z) 形式的超曲面。(3)vq griddata(___,method)vq griddata( ,method) 使用上述语法中的任何输入参数指定计算 vq 所用的插值方法。method 可以是 ‘linear’、‘nearest’、‘natural’、‘cubic’ 或 ‘v4’。默认方法为 ‘linear’。详细使用方法参考官网帮助中心griddata函数。二、绘制1.使用函数1linspace函数用法linspace(x1,x2,n)功能linspace是Matlab中的一个指令用于产生x1,x2之间的n点行矢量(生成线性间距向量)。其中x1、x2、n分别为起始值、中止值、元素个数。若缺省n默认点数为100。y linspace(x1,x2)返回包含 x1 和 x2 之间的 100 个等间距点的行向量。y linspace(x1,x2,n)生成 n 个点。这些点的间距为 (x2-x1)/(n-1)。linspace 类似于冒号运算符“:”但可以直接控制点数并始终包括端点。2peaks函数MATLAB 提供了一个 peaks 函数包含两个变量的示例函数,可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点其本质是二元高斯分布的概率密度函数。语法2Z peaks;Z peaks(n);Z peaks(V);Z peaks(X,Y);peaks(…)[X,Y,Z] peaks(…);说明peaks 是从高斯分布转换和缩放得来的包含两个变量的函数在演示 mesh、surf、pcolor、contour 等函数中很有用。Z peaks; 返回一个 49×49 矩阵。Z peaks(n); 返回一个 n×n 矩阵。Z peaks(V); 返回一个 n×n 矩阵其中 n length(V)。Z peaks(X,Y); 在给定的 X 和 Y必须大小相同处计算 peaks 并返回大小相同的矩阵。peaks(…)无输出参数使用 surf 绘制 peaks 函数。使用先前语法中的任意输入参数组合。[X,Y,Z] peaks(…); 返回另外两个矩阵 X 和 Y 用于参数绘图例如 surf(X,Y,Z,del2(Z))。如未作为输入参数给出基础矩阵 X 和 Y 是[X,Y] meshgrid(V,V)其中 V 是给定向量或者 V 是长度为 n 的向量其元素从 -3 到 3 均匀间隔。如果未给出输入参数默认的 n 是 49。peaks%默认n为49生成图像及函数如下3polt3函数plot3函数只能绘制出三维的曲线并不能绘制出三维曲面。plot3(X,Y,Z)plot3(X,Y,Z) 绘制三维空间中的坐标。要绘制由线段连接的一组坐标请将 X、Y、Z 指定为相同长度的向量。要在同一组坐标轴上绘制多组坐标请将 X、Y 或 Z 中的至少一个指定为矩阵其他指定为向量。plot3(X,Y,Z,LineSpec)plot3(X,Y,Z,LineSpec) 使用指定的线型、标记和颜色创建绘图。如官方案例%创建两组 x、y 和 z 坐标。 t0:pi/500:pi;xt1sin(t).*cos(10*t);yt1sin(t).*sin(10*t);zt1cos(t);xt2sin(t).*cos(12*t);yt2sin(t).*sin(12*t);zt2cos(t);%调用 plot3 函数并指定连续的XYZ三元组。plot3(xt1,yt1,zt1,xt2,yt2,zt2)4mesh函数使用mesh函数可以生成三维网格曲面图mesh即网格网状物。meshc网格曲面图下的等高线图用法同mesh。meshz带帷幕的网格曲面图用法同mesh。语法mesh(X,Y,Z)mesh(X,Y,Z) 创建一个网格图该网格图为三维曲面有实色边颜色无面颜色。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。边颜色因 Z 指定的高度而异。mesh(Z)mesh(Z) 创建一个网格图并将 Z 中元素的列索引和行索引用作 x 坐标和 y 坐标。mesh(Z,C)mesh(Z,C) 进一步指定边的颜色。5surf函数surf三维着色曲面图surfc三维着色曲面图下的等高线图surfl具有基于颜色图的光照的三维着色曲面图其中surfl如下图在图中以XOY面为向光面用高亮(橙)黄色标出光线照射不到的地方即背阴处用蓝色着色。语法surf(X,Y,Z)surf(X,Y,Z) 创建一个三维曲面图它是一个具有实色边和实色面的三维曲面。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。曲面的颜色根据 Z 指定的高度而变化。surf(X,Y,Z,C)此外surf(X,Y,Z,C) 还指定曲面的颜色。surf(Z)surf(Z) 创建一个曲面图并将 Z 中元素的列索引和行索引用作 x 坐标和 y 坐标。6contour函数contour矩阵的二维等高线图contour3三维等高线图contourf填充的二位等高线图contour(Z)contour(Z) 创建一个包含矩阵 Z 的等值线的等高线图其中 Z 包含 x-y 平面上的高度值。Matlab 会自动选择要显示的等高线。Z 的列和行索引分别是平面中的 x 和 y 坐标。contour(X,Y,Z)contour(X,Y,Z) 指定 Z 中各值的 x 和 y 坐标。2.步骤首先就是要进行数据处理详细的来说就是要对数据进行处理得到三维曲面上的点坐标组。可以得到真实地形的高程数据来做出真实的三维地形曲面图具体请看三维地形图建模仿真。1常见数学函数绘图将函数通过三维来表示出来1.先将变量离散如xxmin:dx:xmax yymin:dy:ymax2.使用meshgrid来创建网格矩阵3.用zfxy来求出z4.用mesh或者surf函数绘图。例如画出函数zx2y2mesh和surf都可以注意在matlab中.^2 是矩阵中的每个元素都求平方^2是求矩阵的平方或两个相同的矩阵相乘。x-20:20[X,Y]meshgrid(x)ZX.^2Y.^2mesh(X,Y,Z)%如图所示还有些画出来很有意思的函数如x2y2z2z25-x2-y2, z25-sqrt(x2y2),x2y2z225等等。2离散数据绘图再有就是获得地形数据或者离散数据我们该怎样去绘制1.先将数据存入矩阵2.读出数据1.2.可省略3.对数据的x轴y轴方向进行插值4.用meshgrid生成网格矩阵5.用griddata函数对数据进行拟合6.用mesh或surf函数绘制例如 得到数据如1.4863.0590.1;2.1214.0410.1;2.5703.9590.1;3.4394.3960.1;4.5053.0120.1;3.4021.6040.1;2.5702.0650.1;2.1501.9700.1;1.7943.0590.2;2.1213.6150.2;2.5703.4730.2;3.4214.1600.2;4.2713.0360.2;3.4111.8760.2;2.5612.5620.2;2.1792.4200.2;2.7573.0240.3;3.4393.9700.3;4.0843.0360.3;3.4022.0770.3;2.8793.0360.4;3.4213.7930.4;3.9533.0360.4;3.4022.2190.4;3.0003.0470.5;3.4303.6390.5;3.8223.0120.5;3.4112.3850.5;3.1033.0120.6;3.4303.4620.6;3.7103.0360.6;3.4022.5620.6;3.2243.0470.7;3.4113.2600.7;3.5423.0240.7;3.3932.7630.7;通过上述方法来执行a[1.4863.0590.1;2.1214.0410.1;2.5703.9590.1;3.4394.3960.1;4.5053.0120.1;3.4021.6040.1;2.5702.0650.1;2.1501.9700.1;1.7943.0590.2;2.1213.6150.2;2.5703.4730.2;3.4214.1600.2;4.2713.0360.2;3.4111.8760.2;2.5612.5620.2;2.1792.4200.2;2.7573.0240.3;3.4393.9700.3;4.0843.0360.3;3.4022.0770.3;2.8793.0360.4;3.4213.7930.4;3.9533.0360.4;3.4022.2190.4;3.0003.0470.5;3.4303.6390.5;3.8223.0120.5;3.4112.3850.5;3.1033.0120.6;3.4303.4620.6;3.7103.0360.6;3.4022.5620.6;3.2243.0470.7;3.4113.2600.7;3.5423.0240.7;3.3932.7630.7;];xa(:,1);ya(:,2);za(:,3);xtemplinspace(min(x),max(x),100);ytemplinspace(min(y),max(y),100);[X,Y]meshgrid(xtemp,ytemp);Zgriddata(x,y,z,X,Y,v4);mesh(X,Y,Z)%如图所示若文章有错误或不妥之处欢迎大家指正谢谢 。引用出处meshgrid ↩︎peaks函数 ↩︎