【Matlab入门】 第三章 图像基础

引言

本章可能是所有使用matlab的同志们最喜欢的吧,谁用这个软件不是为了个直观图像呢。“你不用matlab画图吗”“画”“你不画吗”“画”“这年头哪个用这个的不画图”“下贱!!!!”
学习本章之前,请你务必掌握第一章内容,具体可以到我的matlab专栏查看(小声bb一句:关注点赞收藏更方便查找哦,老爷们赏光啦!)。倘若你是大学生,强烈建议学完高等数学上册再来学习本章内容,如此一定有事半功倍之效。

第三章 图像基础

此章节从二维图形入手,延伸到三维图形;从简单的线性方程,到复杂的曲面图和等高线绘制,不管你是地理工作人员、数学计算者,还是一个简单的大学生,这个系列的笔记都很适合你们。

一、二维图形

1.老生常谈的plot函数

利用plot(x,y)可以绘制出行向量x行向量y(可以理解为不连续的自变量和因变量)之间的二维图形,其中x在横坐标,y在纵坐标。y不光可以为矩阵或者向量/数组,还可以为关于x的函数。

Ⅰ 图像样式修改

进一步可在绘图命令中加入各种选项对图形进行个性化处理,绘图语句拓展为plot(x,y,‘option’),千万不要丢掉option部分的单引号,option处的值具体选项如下:

①颜色类(使用时输入最前方的字母即可,最后方数字代表该颜色相应的RGB值):y-黄色-110;m-紫红色/品红-101;c-青色-011;r-红色-100;g-绿色-010;b-蓝色-001;w-白色-111;k-黑色-000。

②符号类:-表示实线;:表示点线;-.表示点划线;–表示虚线。

③符号标记类:+表示加号;.表示点号;o表示圆圈;x表示叉号;* 表示星号;^表示上三角;>表示右三角;<表示左三角;v表示下三角;s表示方形;d表示菱形;p表示五角星;h表示六角星。需要注意的是,这里说的符号,并不是生成了像这个符号一样的图形,而是x和y的函数关系图像不再由直线描绘,而是由这种类型的符号来描绘。空说无凭,上代码和图片,譬如我现在绘制一个x和y数组的图像:

>> %定义x和y
>> x = linspace(0,10,10);y = linspace(5,20,10);
>> plot(x,y,'h')

在这里插入图片描述
(如果你想要复制图像,可以在figure界面点这样一个小图标:在这里插入图片描述
然后选择弹出窗口的第二个就可以直接复制图像了)

另外还有额外的命令配合plot函数使用,但是不输入option处:grid on命令可在图形上添加网格线,grid off命令取消网格线;hold on命令可以保护当前的坐标系,以后再使用plot函数绘制的图形将叠加再原来的图上,hold off命令则可以取消保护状态,这些代码自行尝试,我不再占用篇幅体现逐步步骤。

Ⅱ plot函数的其他形式

①plot(x),当x是实向量时,绘制出以该向量元素下标为横坐标,元素值为纵坐标的连续曲线,示例如图:

>> x = linspace(0,10,10);
>> plot(x)

在这里插入图片描述

当x为实矩阵时,按照列绘制每列元素相对其下标的曲线,曲线数等于x的列数,如图:

>> x = [1,2,3;4,5,6;7,8,9]

x =

     1     2     3
     4     5     6
     7     8     9

>> plot(x)

在这里插入图片描述

当x是复数矩阵(生成复数矩阵的方式在第二章第九部分)时,按列分别绘制以元素实部为横坐标,以元素虚部为纵坐标的多条曲线,有几列就有几条曲线,如图:

>> x = [1,2,3;4,5,6;7,8,9];
>> y = [0.1,0.2,0.3;0.4,0.5,0.6;0.7,0.8,0.9];
>> z = complex(x,y);
>> plot(z)

在这里插入图片描述
有人会说,这不是一条图线吗,但是有三个不一样的颜色哦。如果想看到其他的效果,你们可以用别的复数矩阵数据试试。

②plot(x,y)的复杂情况:x、y为同维向量时,和开头介绍一致;若x为向量y是有一维与x等维的矩阵时,绘制出多根不同颜色的曲线,曲线数目等于y矩阵的另一个维数,x作为这些曲线的横坐标,这里以x向量和3*3的y矩阵为例:

>> y = [1,2,3;4,5,6;7,8,9];
>> x = [1,2,3];
>> plot(x,y)

在这里插入图片描述

若x为矩阵,y为向量,和上方情况相同,但是以y为横坐标,不再赘述;

若x,y为同维矩阵,以x对应的列元素为横坐标,以y对应的列元素为纵坐标分别绘制曲线,曲线数等于矩阵的列数,这个类型和上方讲到的虚数类型十分雷同,还是两个矩阵的输入,所以生成的图像基本相似,自行尝试,不再放图片。

③plot(x1,y1,x2,y2):该函数功能时绘制多条曲线,在这种用法里,xi和yi必须是成对出现的,这条命令相当于逐次执行plot(xi,yi)。这种用法在三角函数变换内使用居多,譬如使用了同一个变量x,但是绘制了不同的cosx和sinx:

>> x1 = linspace(-2*pi,2*pi,100);y1 = sin(x1);
>> x2 = linspace(0,2*pi,100);y2 = cos(x2);
>> plot(x1,y1,x2,y2)

在这里插入图片描述

④plot(x1,y1,‘option’,x2,y2,‘option’)-上一种复杂形式的变式,可以对图像样式进行修改同时生成多个图像,但是要注意不要输错前功尽弃哦。如果不能保证,还是输入hold on命令一个图像一个图像输入吧。

2.图例的标注和备注方式

Ⅰ 添加标题

title()命令可在绘制的图形上添加标题:

>> x = linspace(0,2*pi,100); y = cos(x); plot(x,y)
>> title('余弦函数')

在这里插入图片描述

Ⅱ x轴和y轴标注

xlabel()命令和ylabel()命令可以为横坐标和纵坐标添加标注:

xlabel('x轴');ylabel('cosx')

在这里插入图片描述

此两类函数的用法和hold on相同,是在plot函数体外执行的。

Ⅲ 图例标注

同样的,matlab也可以添加图例,具体格式为:legend(‘option1’,‘option2’,‘option3’……),千万注意括号中逗号为英文逗号:

>> x1 = linspace(-2*pi,2*pi,100);y1 = sin(x1);
>> x2 = linspace(0,2*pi,100);y2 = cos(x2);
>> plot(x1,y1,x2,y2)
>> legend('sinx','cosx')

在这里插入图片描述

3.双坐标轴图形的绘制

利用plotyy(x,y1,x,y2)函数来绘制双纵轴图形,虽然两函数的自变量相同,但是x依然要输入两次。例如,同时绘制出y=sinx和y=0.01cosx的曲线:

>> x = linspace(0,2*pi,100); y1 = sin(x); y2 = 0.01*cos(x);
>> plotyy(x,y1,x,y2)

在这里插入图片描述

不过貌似没办法规定plotyy中的曲线样式,如果你有办法,请留言或者私信我。

4.除plot函数之外的二维图形绘制函数

bar():条形图,格式为bar(x,y),这里仅展示一下图像的模样:
在这里插入图片描述

stem():这个图像的术语我不太了解,格式和bar一样,还是上图让你们看:
在这里插入图片描述

5.隐函数图形绘制

隐函数的概念如何理解我不在这里过多赘述,大部分高校的高等数学上册有清晰的解释。在Matlab中利用ezplot(‘表达式’)来绘制隐函数图形(注意不要丢单引号),我以y^5+2y-x-3x ^ 7=0为例使用这个函数:

>> ezplot('y^5+2*y-x-3*x^7')

在这里插入图片描述
是的,你没有看错,我在输入代码的时候没有写等于0,这是因为matlab默认输入的隐函数表达式就是等于0的,所以在输入时一定要将现实中的式子化简到一侧为0,方便运算还不易引发混乱。

二、三维图像的绘制

1.三维曲线绘制

利用plot()函数的扩展plot3()函数可以用于绘制三维曲线,函数格式为:plot(x,y,z,‘option’),option处的内容参照本章对plot()函数的介绍。bar和stem函数同理,也可拓展为三维图线,后面几章还会介绍,在这里只介绍plot3(),代码的含义很简单,不再做过多解释:

>> x = linspace(0,2*pi,100); y = cos(x);z = sin(x);
>> plot3(x,y,z)

在这里插入图片描述
这个图像类型对于学习高精尖数学的同志可能非常有用。

2.三维曲面的绘制

如果已知一个二元函数:z=f(x,y),则可以利用surf(x,y,z)或者mesh(x,y,z)来绘制出三维曲面图,前者绘制的时曲面表面图,后者绘制的是曲面网格图。但是在调用这两个曲面函数时,要先利用[x,y]=meshgrid(u,v)函数生成x与y的网格矩阵数据(相当于将x和y的范围限制到u和v两个向量所围成的网格中,可以理解为定义了x和y)然后再利用矩阵的点运算得到z矩阵。例如:绘制二元函数z=(x^ 2 -2x)e^ (-x^ 2-y^2-xy)的三维曲面图:

>> [x,y]= meshgrid(-3:0.1:2,-2:0.1:2);
>> z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
>> surf(x,y,z)
>> mesh(x,y,z)

在这里插入图片描述
在这里插入图片描述
通过这两幅图,相信你也可以看出这两个图有何不同。我们回看代码,发现表达式中用了点乘而不是数乘,这是因为我们的x和y是用冒号表达式定义的网格数据矩阵,倘若用数乘将转化为矩阵乘法,完全不能达到求每一点z数据的目的,反而点乘可以很好的计算出每个x和y坐标乘积的数据。

3.等高线绘制

在已知三维网格数据x,y,z的前提下,可以通过contour()函数绘制三维数据的等高线,具体调用格式为contour(x,y,z,n),n为等高线条数。n并不是必须的输入元素。
我们可以发现,等高线绘制和曲面的绘制要求一样:需要三维网格数据。所以可以直接调用刚介绍的meshgird用法,生成三维网格矩阵数据,然后用contour代替surf或者mesh即可,我们还用上个部分的例子,画出等高线图:

>> [x,y]= meshgrid(-3:0.1:2,-2:0.1:2);
>> z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
>> contour(x,y,z)

在这里插入图片描述

得到图形后可以使用[C,h]=contour(x,y,z)语句生成句柄h和等高线信息C,利用返回的信息可进一步在等高线上加入高度信息:补充语句clabel(C,h)可得到带有等高线信息的等高线图

>> [C,h] = contour(x,y,z);
>> clabel(C,h)

在这里插入图片描述

三、子图的绘制方法

有时候需要在同一个窗口放置不同的图形进行比对,且用hold on在一张图里画多条图像的效果并不好,这个时候就可以考虑使用子图:这是一种在单一窗口生成多个坐标系和多个函数图像的方法。几乎适用于本章介绍的任何图像绘制函数,只要你想,都可以放到同一个figure中。绘制子图使用的函数为用 subplot(m,n,s)函数,m为同一个窗口中包含子图的行数,n表示列数,s指的是横向数图像位于第几个位置,还是放代码和图片供各位直观理解,譬如我要在一个窗口里放置4个三角函数的子图,具体格式如下:

>> x = linspace(-2*pi,2*pi,100);y1 = sin(x);y2 = cos(x);y3 = asin(x);y4 = acos(x);
>> subplot(2,2,1),plot(x,y1)
>> subplot(2,2,2),plot(x,y2)
>> subplot(2,2,3),plot(x,y3)
>> subplot(2,2,4),plot(x,y4)

在这里插入图片描述

下章预告:解各类方程。感兴趣的不妨点个赞、收藏或者关注。欢迎各位大佬反馈问题,我会及时修改和补充。

本章节更新记录

2024.2.15首次发布。
2024.2.16补充了子图的绘制方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值