数学建模获奖技巧――MATLAB画图篇(含代码演示)

您所在的位置:网站首页 matlab画图规定取值范围 数学建模获奖技巧――MATLAB画图篇(含代码演示)

数学建模获奖技巧――MATLAB画图篇(含代码演示)

2022-05-16 21:39| 来源: 网络整理| 查看: 265

全文13364个字,建议收藏,以备比赛时查看

再过几天国赛数学建模就要开始了,到时候一定会遇到用Matlab画图的问题,那时候画不出来是非常难受的,一边画一边查?但是比赛时候不能够这样浪费时间啊,那么就总结一下吧!

图像是结果的一种可视化表现,它能直观的体现你的结果,并且能体现你获得结果的准确性,在建模过程中,将你的分析可视化进行直观多维的展示数据,可以让考官更好的发现并且记住你的作品,因此数学建模你的图好看,有B格,离获奖就不远了!

(文末教大家用matlab实现的樱花林)

1. 二维数据曲线图

1.1 绘制二维曲线的基本函数

1.plot()函数

plot函数用于绘制二维平面上的线性坐标曲线图,要提供一组x坐标和对应的y坐标,可以绘制分别以x和y为横、纵坐标的二维曲线。

例:

2. 含多个输入参数的plot函数

plot函数可以包含若干组向量对,每一组可以绘制出一条曲线。含多个输入参数的plot函数调用格式为:plot(x1,y1,x2,y2,…,xn,yn)

例:

3. 含选项的plot函数

Matlab提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号。这些选项如表所示:

例: 用不同的线型和颜色在同一坐标内绘制曲线 及其包络线。

在该plot函数中包含了3组绘图参数,第一组用黑色虚线画出两条包络线,第二组用蓝色双划线画出曲线y,第三组用红色五角星离散标出数据点。

例: 设置正弦曲线的线宽为 3,设置上三角形进行数据点的标记,并设置标记点边缘为黑色,设置标记点填充颜色为红色,设置标记点的尺寸为 10,则 MATLAB 代码 如下:

例: 利用五角星标记例两曲线的交叉点

4. 双纵坐标函数plotyy

在Matlab中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy函数,它能把具有不同量纲,不同数量级的两个函数绘制在同一个坐标中,有利于图形数据的对比分析。使用格式为:plotyy(x1,y1,x2,y2)

x1,y1对应一条曲线,x2,y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左边的对应x1,y1数据对,右边的对应x2,y2。

1.2 绘制图形的辅助操作

1. 图形标注

title、xlabel和ylabel函数分别用于说明图形和坐标轴的名称。

text函数是在坐标点(x,y)处添加图形说明。

legend函数用于绘制曲线所用线型、颜色或数据点标记图例,图例放置在空白处,用户还可以通过鼠标移动图例,将其放到所希望的位置。

除legend函数外,其他函数同样适用于三维图形,在三维中z坐标轴说明用zlabel函数。

例:绘制正弦和余弦曲线,设置图形的标题、x 轴和 y 轴的标注,设置曲线标 准。

2. 坐标控制

axis([xmin xmax ymin ymax zmin zmax])

如果只给出前四个参数,则按照给出的x、y轴的最小值和最大值选择坐标系范围,绘制出合适的二维曲线。如果给出了全部参数,则绘制出三维图形。

axis函数的功能丰富,其常用的用法有:

axis equal:纵横坐标轴采用等长刻度

axis square:产生正方形坐标系(默认为矩形)

axis auto:使用默认设置

axis off:取消坐标轴

axis on:显示坐标轴

axis tight:按紧凑方式显示坐标轴范围,即坐标轴范围为绘图数据的范围

grid on/off:命令控制画还是不画网格线

例:观察曲线 y=cos(tan(πx))在 x=0.5 附近的图形曲线

subplot(m,n,p)

该函数把当前窗口分成m×n个绘图区,m行,每行n个绘图区,区号按行优先编号。其中第p个区为当前活动区。每一个绘图区允许以不同的坐标系单独绘制图形。

1.3 绘制二维图形的其他函数

1. 对数坐标图

在实际应用中,经常用到对数坐标,Matlab提供了绘制对数和半对数坐标曲线的函数,其调用格式为:

semilogx(x1,y1,选项1,x2,y2,选项2,…)

semilogy(x1,y1,选项1,x2,y2,选项2,…)

loglog(x1,y1,选项1,x2,y2,选项2,…)

这些函数中选项的定义和plot函数完全一样,所不同的是坐标轴的选取。

semilogx函数使用半对数坐标,x轴为常用对数刻度,而y轴仍保持线性刻度。semilogy恰好和semilogx相反。

loglog函数使用全对数坐标,x、y轴均采用对数刻度。

例:绘制函数 y=exx

1. 饼图

-pie(x):绘制数据 x 的饼图,x 可以是向量或者矩阵,x 中的每一个元素将代表饼图的一个扇区,同时饼图中显示各元素总和的比例。

-pie(x, explode):绘制数据 x 的饼图,其中参数 explode 可以用来设置饼图中某个重要的扇区进行抽取式重点显示,这里需要注意的是,explode 向量的长度与 x 中的元素个数相等,并与 x 中的元素意义对应,explode 元素为非零值,对应的元素扇区将从饼图中分离显示,通常非零值都设置为 1。

-pie(x, labels):绘制数据 x 的饼图,其中参数 labels 可以用来设置饼图中各个扇区的显示标注,注意参数 labels 应该为字符串或者数字利用向量 X中的数据描绘饼图

例:有一位研究生,在一年中平均每月的费用为生活费 190 元,资料费 33 元, 电话费 45 元,购买衣服 42 元,其他费用 45 元。请以饼图表示出他每月的消费比例,并在 饼图中分离出使用最多的费用和使用最少的费用的切片。

2. 条形图

条形图是用宽度相同的直线条的高低或长短来表示统计指标数值的大小.

条形图根据表现资料的内容可分为单式条形图、复式条形图、结构条形图.

单式条形图反映统计对象随某一因素变化而改变的情况;复式条形图可以反映统计对象随两个因素变动而变动的情况;结构条形图则反映不同统计对象内部结构的变化情况.

命令有bar,bar3,barh 和bar3h,其中bar 和bar3 分别用来绘制二维和三维竖直方图,barh 和bar3h 分别用来绘制二维和三维水平直方图

直方图:

将观测数据的取值范围分为若干个区间, 计算落在每个区间的频数或频率.在每个区间上画一个矩形, 以估计总体的概率密度.

以上两种图形设置颜色:使用colormap()

挑选以下几种色图类型:

其实越朴素的颜色越好看。

3. 排列图

排列图又称累托(Pareto)图,由一 个横坐标、两个纵坐标、多个按高低顺序 排列的条形和一条折线组成。其中,横坐 标表示各因素,左纵坐标表示频数,右纵 坐标表示频率,折线表示累积的频率。该 图能较好地分析各因素的重要性,可用于 寻找主要问题或主要原因。在MATLAB 中 pareto()函数用于绘制排列图,其调用格式如下:

pareto(y):绘制数据y的排列图。y值的大小用排列图条形的高度表示。pareto(y,x):绘制数据y的排列图。当x为数值时,用于指定数值型的横坐标。当 x 为字符串时,用于指定字符串型的横坐标。

1.4数据的其他可视化(盒图,阶梯图,火柴图)

1.盒图

盒图是由五个数值点组成:最小值,下四分位数,中位数,上四分位数,最大值.中间的盒子是从Q1延伸到Q3,盒子里的直线标示出中位数的位置,盒子两端有直线往外延伸到最小数与最大数.

2.阶梯图

3.火柴图

4.二维与三维数据可视化

散点图

1.5符号函数画图

如果遇到符号函数,怎么画图呢?今天就遇到了,所以查了一些方法。

1.使用ezplot

ezplot即:Easy to use function plotter。它是一个易用的一元函数绘图函数 。特别是在绘制含有符号变量的函数的图像时。

有几种方式:

1、ezplot(fun):在默认区间-2π

2、plot(fun,[xmin,xmax]):在区间 xmin

3、ezplot(fun2):在默认区间-2π

4、ezplot(fun2,[xymin,xymax]):在xymin

5、ezplot(fun2,[xmin,xmax,ymin,ymax]):在xmin

6、ezplot(funx,funy):在默认区间0

7、ezplot(funx,funy,[tmin,tmax]):在默认区间tmin

8、ezplot(…,figure_handle):在句柄图像定义的图像窗口绘制特定区间的给定函数图像。

9、ezplot(axes_handle,…):用坐标轴句柄绘制而不是当前坐标轴句柄(gca)绘制函数图像。

10、h = ezplot(…)返回所有绘制图像的句柄。

一般就画如下函数图:

ezplot颜色怎么调??直接调是不可行的!!那么就得获取句柄,然后设置就可以了!!

三维曲面

1.平面网格坐标矩阵的生成

当绘制z=f(x,y)所代表的三维曲面图时,先要在xy平面选定一矩形区域,假定矩形区域为D=[a,b]×[c,d],然后将[a,b]在x方向分成m份,将[c,d]在y方向分成n份,由各划分点做平行轴的直线,把区域D分成m×n个小矩形。生成代表每一个小矩形顶点坐标的平面网格坐标矩阵,最后利用有关函数绘图。

产生平面区域内的网格坐标矩阵有两种方法:

利用矩阵运算生成。

经过上述语句执行后,矩阵X的每一行都是向量x,行数等于向量y的元素个数,矩阵Y的每一列都是向量y,列数等于向量x的元素个数。

利用meshgrid函数生成;

语句执行后,所得到的网格坐标矩阵和上法,相同,当x=y时,可以写成meshgrid(x)

2.绘制三维曲面的函数

Matlab提供了mesh函数和surf函数来绘制三维曲面图。mesh函数用来绘制三维网格图,而surf用来绘制三维曲面图,各线条之间的补面用颜色填充。其调用格式为:

一般情况下,x,y,z是维数相同的矩阵,x,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。c省略时,Matlab认为c=z,也即颜色的设定是正比于图形的高度的。这样就可以得到层次分明的三维图形。当x,y省略时,把z矩阵的列下标当作x轴的坐标,把z矩阵的行下标当作y轴的坐标,然后绘制三维图形。当x,y是向量时,要求x的长度必须等于z矩阵的列,y的长度必须等于必须等于z的行,x,y向量元素的组合构成网格点的x,y坐标,z坐标则取自z矩阵,然后绘制三维曲线。

例515 用三维曲面图表现函数 :

为了便于分析三维曲面的各种特征,下面画出3种不同形式的曲面。

程序执行结果分别如上图所示。从图中可以发现,网格图(mesh)中线条有颜色,线条间补面无颜色。曲面图(surf)的线条都是黑色的,线条间补面有颜色。进一步观察,曲面图补面颜色和网格图线条颜色都是沿z轴变化的。用plot3 绘制的三维曲面实际上由三维曲线组合而成。可以分析plot(x’,y’,z’)所绘制的曲面的特征。

例516 绘制两个直径相等的圆管相交的图形。

例517 分析由函数 构成的曲面形状与平面z=a的交线。

此外,还有两个和mesh函数相似的函数,即带等高线的三维网格曲面函数meshc和带底座的三维网格曲面函数meshz,其用法和mesh类似。不同的是,meshc还在xy平面上绘制曲面在z轴方向的等高线,meshz还在xy平面上绘制曲面的底座。

surf函数也有两个类似的函数,即具有等高线的曲面函数surfc和具有光照效果的曲面函数surfl。

例518 在xy平面内选择[-8, 8]×[-8, 8]绘制函数,

3.标准三维曲面

Matlab提供了一些函数用于绘制标准三维曲面,这些函数可以产生相应的绘图数据,常用于三维图形的演示。如,sphere函数和cylinder函数分别用于绘制三维球面和柱面。sphere函数的调用格式为:

[x,y,z]=sphere(n);

该函数将产生(n+1)×(n+1矩阵x,y,z 。采用这三个矩阵可以绘制出圆心位于原点、半径为1的单位球体。若在调用该函数时不带输出参数,则直接绘制所需球面。n决定了球面的圆滑程度,其默认值为20。若n值取的比较小,则绘制出多面体的表面图。

cylinder函数的调用格式为:

其中R是一个向量,存放柱面各个等间隔高度上的半径,n表示在圆柱圆周上有n个间隔点,默认有20个间隔点。如:cylinder(3)生成一个圆柱,cylinder([10,1])生成一个圆锥。而t=0:pi/100:4*pi; R=sin(t); cylinder(R,30);生成一个正弦圆柱面。

另外Matlab还提供了一个peaks函数,称为多峰函数,常用于三维曲面的演示。该函数可以用来生成绘图数据矩阵,矩阵元素由函数:

在矩形区域[-3 3]×[-3 3]的等分网格点上的函数值确定。如:z=peaks(30)

将生成一个30×30矩阵,

例519 绘制标准三维曲面图形

3.其他三维图形。

在介绍二维图形时,曾经提到条形图、杆图、饼图和填充图等特殊图形,它们还可以以三维形式出现,其函数分别为bar3,stem3,pie3和fill3。

bar3绘制三维条形图,常用格式为:

在第一种格式中,y的每个元素对应于一个条形。第二种格式在x指定的位置上绘制y中元素的条形图。

stem3函数绘制离散序列数据的三维杆图,常用格式为:

第一种格式将数据序列z表示为从xy平面向上延伸的杆图,x和y自动生成。第二种格式在x和y指定的位置上绘制数据序列z的杆图,x,y,z的维数要相同。

pie3函数绘制三维饼图,常用格式为:

x为向量,用x中的数据绘制一个三维饼图。

fill3函数可在三维空间内绘制出填充过的多边形,常用格式为:

用x,y,z做多边形的顶点,而c指定了填充的颜色。

例520 绘制三维图形。

1绘制魔方阵的三维条形图2以三维杆图形式绘制曲线y=2sinx 3已知x =[2347,1827,2043,3025] ,绘制三维饼图 4用随机的顶点坐标值画出5个黄色三角形

除了上面讨论的三维图形外,常用的图形还有瀑布图和三维曲面的等高线图。绘制瀑布图用waterfall函数,用法和meshz函数相似,只是它的网格线在x轴方向出现,具有瀑布效果。等高线图分二维和三维两种形式,分别使用函数contour和contour3绘制。

例521 绘制多峰函数的瀑布图和等高线图。

三.三维图形的精细处理

一.视点处理

在日常生活中,从不同的角度观察物体,所看到的物体形状是不一样的。同样,从不同视点绘制的三维图形的形状也是不一样的。视点位置可由方位角和仰角表示。

方位角

Matlab提供了设置视点的函数view,其调用格式为:

其中az为方位角,el为仰角,它们均以度为单位。系统默认的视点定义为方位角为-37.5度,仰角30度。

例522 从不同视点绘制多峰函数曲面。

例绘制两个球面,其中一个在另一个里面,将外面的球裁掉一部分,以便能看到里面的球。

色图中使用三种颜色,外面的球是绿色,里面的球采用深浅不同的两种红色。

隐函数作图

如果给定了函数的显式表达式,可以先设置自变量向量,然后根据表达式计算函数向量,从而用plot等函数绘制出图形。但是当函数采用隐函数形式时,如: ,则很难利用上述方法绘制图形。Matlab提供了一个ezplot函数绘制隐函数图形。用法如下:

对于函数f=f(x),ezplot的调用格式为:

ezplot(f),在默认区间(-2pi,2pi)绘制图形。

ezplot(f,[a,b]),在区间(a,b)绘制

对于隐函数f=f(x,y),ezplot的调用格式为;

ezplot(f),在默认区间(-2pi,2pi),(-2pi,2pi)绘制f(x,y)=0的图形。

ezplot(f,[xmin,xmax,ymin,ymax]);在区间 绘制图形。

ezplot(f,[a,b]),在区间(a,b),(a,b)绘制

对于参数方程x=x(t),y=y(t),ezplot函数的调用格式为:

ezplot(x,y),在默认区间 绘制x=x(t),y=y(t)图形。

ezplot(x,y,[tmin,tmax]),在区间(tmin,tmax)绘制x=x(t),y=y(t)图形。

例隐函数绘图举例。

3.图形修饰辅助操作

看到这第三部分,我想不管是二维曲线三维曲线还是曲面。应该大差不差了吧!那些图应该大家都能做出来了,但是我们的目标可不是做出图来,是要做出好看的,能吸引考官的图,俗话说,人靠衣装,马靠鞍,图也是,我们做出图之后就需要对图进行修饰,比如给做好的图形加个标题,加个注释,接下来的部分我将将列举经常使用的并且很有用的图形修饰辅助操作。

基础绘图指令

除去上文所述plot等绘图函数命令之外,还有有一些其它修饰图形的常用命令

这些呢是一些常用的辅助绘图指令,没有参数,直接在脚本输入就行,功能已经列在表中非常明确,大家可以自行练习查看实用效果。

接下来是一些带参数的绘图指令,它们可以帮你进行图形标注、坐标控制等等一系列功能,非常实用,记得好好学习。

值得一提的是,上面这些函数的使用方法远不及示例这么简单,它们都有非常多的参数可供选择使用,示例只是列出最简单、最常用的方法,下面是两段代码:

图形窗口分割函数subplot

其中,m和n指定将窗口分成mXn个绘图区,p指定的是当前图像所在区域,如m=2,n=3,则一个figure窗口被分成2行三列供6个绘图区,可以容纳6个图形。若p=3,说明当前图像要被画进第三个窗口,也就是第二行第一列的窗口内。p小于等于mXn,如:

图形修饰处理

前面写了一些基本绘图指令,可以对我们的图形进行简单的修整,让其变得更完备更好看,接下来是一些对图形修饰的方法。

视点处理

方位角:视点与原点连线在xy平面上的投影与y轴负方向形成的角度,正值表示逆时针,负值表示顺时针。

仰角:视点与原点连线与xy平面的夹角,正值表示视点在xy平面上方,负值表示视点在xy平面下方。

view函数

其中az为方位角,el为仰角。系统默认的视点定义为方位角-37.5°,仰角30°。

色彩处理

默认的,向量元素在[0,1]范围内取值,3个元素一次表示红、绿、蓝三种颜色的相对亮度,称为RGB三元组即[R G B],如[0 0 1]是蓝色,[1 0 0]是红色,[1 1 1]是白色,[0 0 0]是黑色。(当然,也有在[0,255]内取值的,不再介绍)

色图(Colormap)

首先,创建一个色图矩阵方法如下:

其中,parula是内建色图中包含的一个种类,其中参数5可以是任何一个数值,它关系着色图矩阵的范围,一般来说使用的时候省略就好。内建色图如下:

指定当前图形使用的色图

我们也可以不使用系统的色图矩阵,可以自定义任何色图矩阵。如创建一个灰色系列的色图矩阵:

用shading函数来改变着色方式

参数如下:

示例:使用同一色图,以不同着色方式绘制圆锥体

图形的裁剪处理

将图形中需要裁剪部分对应的函数值设置成NaN,这样在绘制图形时,函数值为NaN的部分将不显示出来,从而达到对图形进行裁剪的目的。

示例如下:

其它

其实在Matlab中还有两个非常重要的函数:

set和get,它们两个能非常方便的创建、修改图形的各种属性,如改变坐标轴范围、设置字体和刻度点、设定线条风格等等,不过它们涉及到的使用更深入,在这里不再展开叙述,而事实上,对于我们非常熟知的figure,它也能加上参数来对窗格进行设置,这都是我们经常使用的,但也是经常忽略它们其它功能的函数,如果有兴趣,你可以继续的深入探索下去,更深入的学习能更方便的为我们所用。

总结

好了,感谢你能看到这里,对于这篇文章,它可能的侧重点不是完全教会我们怎么作图,而更多的也可能是提醒我们在Matlab里面可以进行如此操作,对于新手而言,很多没有系统的学习过Matlab的使用,可能里面的很多东西不是我们不会用,而是根本不知道,所以这篇文章大致列出来了很多非常常用的函数方法等,其中的示例仅仅是个示例,它们的用法还有很多,希望大家能够进行再次开拓,深入的了解每个方法的使用。最后,如果你觉得本篇文章对你有用,请点个赞,谢谢!

番外篇

matlab实现的樱花林

上述代码用于返回每个树枝结点坐标,并且保证相连两个树枝的向量夹角大于0度小于90度

用于矩阵列复制,复制结果如下

输入根节点和第一个枝干长度,绘出一棵樱花树图,这里建议根节点坐标位于x属于(-600,600)y属于(-300,-200)间,树枝长度位于50到80(树枝长度太大会导致运行特别慢,使电脑变卡,弱弱说一句我试过将树枝长度设置为100,然后我电脑变卡,最后强制关机了,树枝长度较小的话,图画效果不好)。

下面这句代码自接在命令行窗口使用就会得到如下的这棵樱花树。

这里就是调用前一个函数绘制樱花林:

这里把图窗打开为全屏的效果较好。运行这张图可能需要30秒左右,

如果遇到长时间(大于1分钟吧)没运行出来,你就点一下命令行窗口,按下ctrl+c这个组合键就可以强制停止了。

有些算法不是特别好,运行较慢,如果大家有更好的算法,还请多多指教

参加国赛的小伙伴可以加群一起讨论学习,建议用非报名的qq加群



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3