matlab

笔记来自于《MATLAB2018从入门到精通》

向量与多项式

向量

向量的生成

直接输入法
冒号法
利用函数linspace创建向量
1
linspace(first_value, last_value, number)
利用函数logspace创建对数分割的向量
1
logspace(first_value, last_value, number)

向量元素的引用

格式 说明
x(n) 表示向量中的第n个元素
x(n1:n2) 表示向量中的第n1至n2个元素

向量运算

四则运算
点积运算
格式 说明
dot(a,b) 返回向量a与b的点积。a和b必须同维,当a、b都是列向量时,dot(a,b)等同于a.*b
dot(a,b,dim) 返回向量a和b在dim维的点积
叉积运算
格式 说明
cross(a,b) 返回向量a与b的叉积。a和b必须是三维的向量
cross(a,b,dim) 返回向量a和b在dim维的点积。a和b需要有相同的维数,size(a,dim)和size(b,dim)的结果必须为3
混合积运算

多项式

多项式的创建

1
poly2sym(p) %p为多项式的系数

多项式四则运算

乘法

conv(p1,p2)

除法
1
[k,r]=deconv(p,q)

k是p除以q的商,r是余式。 上式等价于

1
p=conv[q,k]+r;

多项式导数运算

1
polyder(p) %p为多项式的系数

矩阵运算

矩阵创建

利用M文件创建

利用文本创建

创建特殊矩阵

矩阵元素的运算

矩阵元素的修改

命令名 说明
D=[A;B C] A为原矩阵,B、C中包含要扩充的元素,D为扩充后的矩阵
A(m;:)=[] 删除A的第m行
A(:,n) 删除A的第n列
A(m,n)=a; A(m,:)=[a b ...]; A(:,n)=[a b ...] 对A的第m列第n行的元素赋值;对A的第m行赋值;对A的第n列赋值

矩阵的变维

矩阵的变向

命令名 说明
Rot(90) 将A逆时针方向旋转90°
Rot(90,k) 将A逆时针方向旋转90° *k,k可为正整数或负整数
Fliplr(X) 将X左右翻转
flipud(X) 将X上下翻转
flipdim(X,dim) dim=1时对行翻转,dim=2时对列翻转

矩阵的抽取

矩阵的抽取主要是指对角元素和上(下)三角阵的抽取。

矩阵的数学运算

加减

只有相同维度的矩阵才能进行计算 减法只需将+改成-

乘法

数乘
矩阵乘法
点乘

除法

计算左除A,A的行数要与B的行数一致,计算右除A/B时,A的列数要与B的列数一致。

左除
右除

矩阵运算

幂函数

另外还有指数函数,对数函数,平方根函数等。

矩阵的逆

操作的对象必须是方阵

矩阵的条件数

矩阵的范数

二维绘图

二维绘图

plot

plot(x)

plot(x,y)

subplot(x,y)

plot(x,y,s) s用来设置所画数据点的类型、大小、颜色以及数据点之间连线的类型、粗细、颜色等。

plot(x1,y1,s1,x2,y2,s2,···) 运行此命令等价于依次执行plot(xi,yi,si),i=1,2,...

fplot

  fplot命令也是MATLAB提供的一个画图命令,它是一个专门用于画一元函数图像的命令。
  虽然plot命令也可以画一元函数图像,但plot命令是依据我们给定的数据点来作图的,而在实际情况中,一般并不清楚函数的具体情况,因此依据我们所选取的数据点作的图像可能会忽略真实函数的某些重要特性,给科研工作造成不可估计的损失。MATLAB提供了专门绘制一元函数图像的fplot命令,它用来指导数据点的选取,通过其内部自适应算法,在函数变化比较平稳处,它所取的数据点就会相对稀疏一点,在函数变化明显处所取的数据点就会自动密一些,因此用fplot命令所作出的图像要比用plot命令作出的图像光滑准确。

ezplot

ezplot可以很容易地将一个符号函数图形化

不同坐标系下的绘图命令

极坐标系下绘图

图形标注

图形属性设置

坐标系与坐标轴

坐标系的调整

  MATLAB的绘图函数可根据要绘制的曲线数据的范围自动选择合适的坐标系,使得曲线尽可能清晰的显示出来。所以,一般情况下用户不必自己选择绘图坐标。但是有些图形,如果用户感觉自动选择的坐标不合适,则可以利用函数axis()选择新的坐标系。
  函数axis()的调用格式为:axis(xmin,xmax,ymin,ynax,zmin,zmax}   这个函数格式的功能是设置x, y, z 坐标的最小值和最大值。函数输入参数可以是4个,也可以是6个,分别对应于二维或三维坐标系的最大和最小值。

坐标轴的调整

axis命令用于控制坐标轴的显示、刻度、长度等特征

图形注释

填充图形

fill 函数用于填充二维封闭多边形,其函数格式如下所示。

注释图形标题及轴名称

MATLAB中,title命令用于给图形对象加标题。

说明:可以利用gcf 与gca 来获取当前图形窗口与当前坐标轴的旬柄。

  对坐标轴进行标注,相应的命令为xlabel、ylabel、zlabel,作用分别是对x轴、y轴、z轴进行标注,它们的调用格式都是一样的。

图形标注

  在给所绘得的图形进行详细的标注时,最常用的两个命令是text与gtext,它们均可以在图形的具体部位进行标注。

text命令

上表中的这些属性及相应的值都可以通过get 命令来查看,以及用set 命令来修改。

gtext命令

  gtext命令可以让鼠标在图形的任意位置进行标注。当光标进入图形窗口时,会变成一个大十字架形,等待用户的操作。调用格式如下:

1
gtext ('string','property', propertyvalue,···)

  调用这个函数后,图形窗口中的鼠标指针会成为十字光标,通过移动鼠标来进行定位,即光标移到预定位置后按下鼠标左键或键盘上的任意键都会在光标位置显示指定文本“string”。由于要用鼠标操作,该函数只能在MATLAB命令行窗口中进行。

图例标注

  当在一幅图中出现多种曲线时,用户可以根据自己的需要,利用legend 命令对不同的图例进行说明。

分隔线控制

特殊图形

统计图形

条形图

  绘制条形图时可分为二维情况和三维情况,其中绘制二维条形图的命令为bar(竖直条形图)与barh(水平条形图);绘制三维条形图的命令为bar3(竖直条形图)与bar3h(水平条形图)。它们的调用格式都是一样的,因此我们只介绍bar的调用格式

面积图

  面积图在实际中可以表现不同部分对整体的影响。在MATLAB中,绘制面积图的命令是area,它的调用格式见表

饼图

  饼图用来显示向量或矩阵中各元素所占的比例,它可以用在一些统计数据可视化中。在二维情况下,创建饼图的命令是pie,三维情况下创建饼图的命令是pie3,二者的调用格式也非常相似,因此我们只介绍pie的调用格式。

柱状图

MATLAB中,绘制柱状图的命令有两个:
hist命令:它用来绘制直角坐标系下的柱状图。
rose命令:它用来绘制极坐标系下的柱状图。

实例一一各个季度所占营利总额的比例统计图

注意:饼图的标注比较特别,其标签是作为文本图形对象来处理的,如果要修改标注文本字符串或位置,则首先要获取相应对象的字符串及其范围,然后再加以修改。

实例一一绘制柱状图

离散数据图形

  除了上面提到的统计图形外,MATLAB还提供了一些在工程计算中常用的离散数据图形,例如误差棒图、火柴杆图与阶梯图等。

误差棒图

MATLAB 中绘制误差棒图的命令为errorbar

实例一一绘制铸件尺寸误差棒图

火柴杆图

  用线条显示数据点与x轴的距离,用一小圆圈(默认标记〉或用指定的其他标记符号与线条相连,并在y轴上标记数据点的值,这样的图形称为火柴杆图。在二维情况下,实现这种操作的命令是stem。

在三维情况下,也有相应的画火柴杆图的命令stem3。

实例一一绘制火柴杆图

阶梯图

  阶梯图在电子信息工程以及控制理论中用得非常多,在MATLAB 中,实现这种作图的命令是stairs。

实例一一给制阶梯图

向量图形

  由于物理等学科的需要,在实际中有时需要绘制一些带方向的图形,即向量图。对于这种图形的绘制, MATLAB 中也有相关的命令,本小节就来学一下几个常用的命令。

罗盘图

  罗盘图即起点为坐标原点的二维或三维向量,同时还在坐标系中显示圆形的分隔线。实现这种作图的命令是compass。

羽毛图

  羽毛图是在横坐标上等距地显示向量的图形,看起来就像鸟的羽毛一样。它的绘制命令是feather。

实例一一罗盘图与羽毛图

箭头图

  上面两个命令绘制的图也可以叫做箭头图,但即将要讲的箭头图比上面两个箭头图更像数学中的向量,即它的箭头方向为向量方向,箭头的长短表示向量的大小。这种图的绘制命令是quiver与quiver3 ,前者绘制的是二维图形,后者绘制是三维图形。它们的调用格式也十分相似,只是后者比前者多一个坐标参数,因此我们只介绍一下quiver的调用格式。

quiver与quiver3这两个命令经常与其他的绘图命令配合使用,见下例。

实例一一绘制箭头图形

三维绘图

三维绘图

  在实际的工程设计中, 二维绘图功能在某些场合往往无法更直观地表达数据的分析结果,常常需要将结果表示成三维图形。MATLAB 为此提供了相应的三维绘图功能,三维绘图与二维绘图功能有异曲同工之效。用于三维绘图的MATLAB 高级绘图函数中,对于上述许多问题都设置了默认值,应尽量使用默认值。
  为了显示三维图形, MATLAB 提供了各种各样的函数。有一些函数可在三维空间中画线,而另一些可以画曲面与线格框架。另外,颜色可以用来代表第四维。当颜色以这种方式使用时,不但它不再具有像照片中那样显示色彩的自然属性,而且也不具有基本数据的内在属性,所以把它称作为彩色。本章主要介绍三维图形的作图方法和效果。

三维曲线绘图命令

plot3

  plot3命令是二维绘图plot命令的扩展,因此它们的使用格式也基本相同,只是在参数中多加了一个第三维的信息。例如plot(x,y,z)与plot3(x,y,z,s)的意义是一样的,前者绘的是二维图,后者绘的是三维图,后面的参数s也是用来控制曲线的类型、粗细、颜色等。

实例一一绘制空间直线 实例一一绘制三维曲线

ezplot3

  同二维情况一样, 三维绘图里也有一个专门绘制符号函数的命令ezplot3。

三维网格命令

mesh

  该命令生成的是由X、Y和Z指定的网线面,而不是单根曲线。

  在演示之前,我们先来学一个常用的命令meshgrid,它用来生成二元函数z=f(x,y)中xy平面上的矩形定义域中数据点矩阵X和Y,或者是三元函数u=f(x,y,z)中立方体定义域中的数据点矩阵X、Y和Z。

实例一一绘制网格面

  对于一个三维网格图,有时用户不想显示背后的网格,这时可以利用hidden 命令来实现这种要求。它的使用格式也非常简单。

实例一一绘制山峰曲面

  MATLAB还有两个同类的函数:meshc与meshz。meshc用来画图形的网格图加基本的等高线图,meshz用来画图形的网格图与零平面的网格图。

实例一一绘制函数曲面

ezmesh

  该命令专门用来绘制符号函数f(x, y) (即f是关于x 、y 的数学函数的字符串表示)的网格图形。

实例一一绘制符号函数曲面

三维曲面命令

surf

  surf命令的调用格式与mesh命令完全一样,这里就不再详细说明了。下面给出几个例子。

实例一一绘制山峰表面

  如果想查看曲面背后图形的情况,可以在曲面的相应位置打个洞孔,即将数据设置为NaN,所有的MATLAB作图函数都忽略NaN的数据点,在该点出现的地方留下一个洞孔。

实例一一绘制带洞孔的山峰表面

ezsurf

  该命令专门用来绘制符号函数f(x,y)(即f是关于x、y的数学函数的字符串表示)的表面图形。

绘制参数曲面

柱面与球面

  在MATLAB中,有专门绘制柱面与球面的命令cylinder与sphere,它们的使用格式也非常简单。首先来看cylinder命令。

实例一一绘制柱面

小技巧:用cylinder可以作棱柱的图像,例如运行cylinder(2,6)将绘出底面为正六边形、半径为2的棱柱。

  sphere命令用来生成三维直角坐标系中的球面。

实例一一绘制球面

三维图形等值线

  在军事、地理等学科中经常会用到等值线。在MATLAB中有许多绘制等值线的命令,我们主要介绍以下几个。

contour3

  contour3是三维绘图中最常用的绘制等值线的命令,该命令生成一个定义在矩形格栅上曲面的三维等值线图。

实例一一三维等值线图

contour

  contour3用于绘制二维图时就等价于contour,后者用来绘制二维等值线,可以看作是一个三维曲面向xy平面上的投影。

实例一一绘制二维等值线图

contourf

  此命令用来填充二维等值线图,即先画出不同等值线,然后将相邻的等值线之间用同一颜色进行填充,填充用的颜色决定于当前的色图颜色。

实例一一绘制二维等值线图及颜色填充

contourc

  该命令计算等值线矩阵C,该矩阵可用于命令contour、contour3 和contourf等。矩阵Z中的数值确定平面上的等值线高度值,等值线的计算结果用由矩阵Z维数决定的间隔的宽度。

clabel

  clabel命令用来在二维等值线图中添加高度标签。

对上面的使用格式,需要说明的一点是,若命令中有h,则会对标签进行恰当的旋转,否则标签会竖直放置,且在恰当的位置显示一个“+” 号。

实例一一绘制等值线

ezcontour

  该命令专门用来绘制符号函数f(x,y)(即f是关于x、y的数学函数的字符串表示)的等值线图。

实例一一绘制符号函数等值线图

ezsurfc

  该命令用来绘制函数f(x,y)的带等值线的三维表面图,其中函数f是一个以字符串形式给出的二元函数。

实例一一绘制带等值线的三维表面图

三维图像修饰处理

视角处理

  在现实空间中,从不同角度或位置观察某一事物就会有不同的效果,即会有“横看成岭侧成峰”的感觉。三维图形表现的正是一个空间内的图形,因此在不同视角及位置都会有不同的效果,这在工程实际中也是经常遇到的。MATLAB 提供的view 命令能够很好地满足这种需要。   view 命令用来控制三维图形的观察点和视角。

  对于这个命令需要说明的是,方位角az与仰角el为两个旋转角度。做一通过视点和z轴平行的平面,与xy平面有一交线,该交线与y轴的反方向的、按逆时针方向(从z轴的方向观察)计算的夹角,就是观察点的方位角az;若角度为负值,则按顺时针方向计算。在通过视点与z轴的平面上,用一直线连接视点与坐标原点,该直线与xy平面的夹角就是观察点的仰角el;若仰角为负值,则观察点转移到曲面下面。

实例一一绘制网格面视图

颜色处理

色图明暗控制命令

MATLAB中,控制色图明暗的命令是brighten命令。

色轴刻度

  caxis命令控制着对应色图的数据值的映射图。它通过将被变址的颜色数据(CData)与颜色数据映射(CDataMapping)设置为scaled,影响着任何的表面、块、图像:该命令还改变坐标轴图形对象的属性Clim与ClimMode。

实例一一映射球面表里颜色

  在MATLAB中,还有一个画色轴的命令colorbar,这个命令在图形窗口的工具条中有相应的图标。

实例一一渲染图形

颜色映像使用

  语句colormap(M)将矩阵M作为当前图形窗口所用的颜色映像。例如,colormap(cool)装入了一个有64个输入项的cool颜色映像。colormap default装入了默认的颜色映像(hsv)。
  函数plot、plot3、contour和contour3不使用颜色映像,它们使用列在plot颜色和线形表中的颜色。而大多数其他绘图函数,比如mesh、surf、fill、pcolor和它们的各种变形函数,使用当前的颜色映像。
  接受颜色参量的绘图函数中的颜色参量通常采用以下3 种形式之一:

  1. 字符串,代表plot颜色或线型表中的一种颜色,比如'r'代表红色。
  2. 3个输入的行向量,它代表一个单独的RGB值,比如[.25 .50 .75]。
  3. 矩阵,如果颜色参量是一个矩阵,其元素做了调整,并把它们用作当前颜色映射的下标。

实例一一颜色映像

光照处理

  在MATLAB中绘制三维图形时,我们不仅可以画出带光照模式的曲面,还能在绘图时指定光线的来源。

带光照模式的三维曲面

  surfl命令用来画一个带光照模式的三维曲面图,该命令显示一个带阴影的曲面,结合了周围的、散射的和镜面反射的光照模式。想获得较平滑的颜色过渡,则需要使用有线性强度变化的色图(如gray、copper、bone、pink等)。

  对于这个命令的调用格式需要说明的一点是,参数X, Y, Z确定的点定义了参数曲面的“里面”和“外面”,若用户想曲面的“里面”有光照模式,只要使用surfl(X',Y',Z')即可。

实例一一三维图形添加光照

光源位置及照明模式

  在绘制带光照的三维图像时,可以利用light命令与lightangle命令来确定光源位置,其中light命令使用格式非常简单,即为:
  light('color',s1,'style',s2,'position',s3),其中color、style与position的位置可以互换,s1、s2、s3为相应的可选值。例如,light(’position’,[1 0 0])表示光源从无穷远处沿x轴向原点照射过来。

  在确定了光源位置后,用户可能还会用到一些照明模式,这一点可以利用lighting命令来实现,它主要用四种使用格式,即有四种照明模式。

实例一一色彩变幻