Matlab学习笔记

 一视同仁     2019-11-18   6852 words    & views

指令

>> 表达式 ;:不显示运算结果(指令之后加上分号;,不显示计算结果。) >> clc:清屏

算术运算

  • 三角函数:sin(),cos(),tan()
  • 开方:sqrt()
  • 对数:log(),log2(),log10()
  • e:exp(1)

变量

变量:大小写敏感,以字母开头,关键词不能作为变量名。声明方式:>> A=10
>> who:查看变量信息
>> whos:查看变量详细信息
>> clear Variable移除变量Variable >> clear:清除所有变量

变量优先级:

  • Variable
  • Built-in function
  • Subfunction
  • Private function: • MEX-file • P-file • M-file

关键词

预定义变量名 含义
ans 计算结果变量名
pi Π
eps 计算机最小数,当数字小于该值,认为为0(2.2204e-016)
inf/Inf 正无穷
NaN/nan not a number,常为0/0、∞/∞
i/j 虚数单位,$\sqrt{-1}$

>> iskeyword:查看关键词

格式设定

Style Result Example
short Short, fixed-decimal format with 4 digits after thedecimal point. 3.1416
long Long, fixed-decimal format with 15 digits after the decimalpoint fordouble values, and 7 digits afterthe decimal point for single values. 3.141592653589793
shortE Short scientific notation with 4 digits after thedecimal point. 3.1416e+00
longE Long scientific notation with 15 digits after thedecimal point fordouble values, and 7 digits after the decimal point for single values. 3.14159265358979e+00
bank Currency format with 2 digits after the decimalpoint. 3.14
hex Hexadecimal representation of a binary doubleprecisionnumber. 400921fb54442d18
rat Ratio of small integers. 355/113

>> format Style:设定数字显示格式

向量、矩阵

向量输入: >> A=[1 2 3 4] $[1,2,3,4]$

>> A=[1;2;3;4] $\begin{bmatrix}1 \ 2 \ 3 \ 4\end{bmatrix}$

A = [
1 2 3 4;
5 6 7 8;
9 10 11 12;
]

$A=\begin{bmatrix}a_{11} & a_{12} & \cdots & a_{1n} \ a_{21} & a_{22} & \cdots & a_{2n} \ \cdots & \cdots & \cdots & \cdots\ a_{n1} & a_{n2} & \cdots & a_{nn}\end{bmatrix}$

矩阵元素:先行后列(元素从1开始)

A(1,2)=2
A(4)=2
A([1 2 4])=[1 5 2]
A([1,2;1,2])=[1 5;1 5]
A([1 2],[1 2])=[1 2;5 6]
//12行和第12列的交集

Colon Operator

有向图、无向图

在 MATLAB 中,graphdigraph 函数用于构建表示无向图有向图的对象。

创建图的主要方式包括使用邻接矩阵或边列表。

邻接矩阵

要在 MATLAB 中构建无向图,可以输入:

A = [
0 1 2;
1 0 3; 
2 3 0
]
node_names = {'A','B','C'}
G = graph(A,node_names)

边列表

边列表通过列举边来表示一个图,但如果该图有断开的节点,边列表中将不会列出这些节点,需要单独指定它们。

在 MATLAB 中,边列表按列划分为源节点和目标节点。对于有向图,边的方向(从源到目标)很重要;但对于无向图,源节点和目标节点是可以互换的。

使用边列表构建该图的一种方法是,对源节点、目标节点和边权重使用单独的输入:

>> source_nodes = {'A','A','B'};
>> target_nodes = {'B','C','C'};
>> edge_weights = [1 2 3];
>> G = graph(source_nodes, target_nodes, edge_weights);
//起点、终点、(边的权值:可选)

下面可以创建一个有向图。st 中的对应元素用于定义图中每条边的源节点和目标节点。

>> s = [1 1 2 2 3];
>> t = [2 4 3 4 4];
>> G = digraph(s,t)

图的属性编辑、查看

构建图 G 后,可以通过G.Nodes 查看节点。通过将变量 Name 添加到 G.Nodes 表中来向图中添加节点名称。

>> G.Nodes.Name = {'First' 'Second' 'Third' 'Fourth'}';

也可以使用命令 G.Edges 查看边(源节点、目标节点、权值)。这些边在 G.Edges 中的顺序首先按源节点排列,其次按目标节点排列。对于无向图,索引较小的节点列为源节点,索引较大的节点列为目标节点。

>> P.Edges

ans =

  6×2 table

     EndNodes     Weight
    __________    ______

    'A'    'B'    1     
    'A'    'C'    2     
    'B'    'A'    1     
    'B'    'C'    3     
    'C'    'A'    2     
    'C'    'B'    3 

添加自定义属性

原则上,我们可以将任何变量添加到 G.NodesG.Edges 中,来定义图节点或边的属性。

例如,可以向 G.Edges 添加名为 Power 的变量,来指示每条边是 'on' 还是 'off'

>> G.Edges.Power = {'on' 'on' 'on' 'off' 'off'}';
>> G.Edges
ans=5×3 table
          EndNodes          Weight    Power
    ____________________    ______    _____

    'First'     'Second'      10      'on' 
    'First'     'Fourth'      20      'on' 
    'Second'    'Third'       30      'on' 
    'Second'    'Fourth'      40      'off'
    'Third'     'Fourth'      50      'off'

图节点 ID

默认情况下,系统会对使用 graphdigraph 创建的图的所有节点进行编号,编号从1开始。因此,可以通过数值节点索引(即编号)来引用它们。

如果图具有节点名称('A'),则还可以使用节点名称来表示图中的节点。因此,可以通过节点索引或节点名称来表示图中的已命名节点。

常用函数

图的常用函数如下:

函数 功能
addedge 在图中添加一条或多条边
rmedge 从图中删除一条或多条边
addnode 在图中添加一个或多个节点
rmnode 从图中删除一个或多个节点
findnode 查找图中的特定节点
findedge 查找图中的特定边
numnodes 计算图中的节点数
numedges 计算图中的边数
findnode 查找图中的特定节点
findedge 查找图中的特定边

添加节点

在G中添加五个节点

>> G = addnode(G,5)
G = 
  graph with properties:

    Edges: [4x1 table]
    Nodes: [9x0 table]

删除节点

删除节点 3、5 和 6,对图中剩余的六个节点重新进行编号,以反映新的节点数量。

>> G = rmnode(G,[3 5 6])
G = 
  graph with properties:

    Edges: [2x1 table]
    Nodes: [6x0 table]

添加边

使用 addedgeG 添加两条边。第一条边位于节点 1 和节点 5 之间,第二条边位于节点 2 和节点 5 之间。该命令将向 G.Edges 添加两个新行。

>> G = addedge(G,[1 2],[5 5]) //(,起点,终点)
G = 
  graph with properties:

    Edges: [4x1 table]
    Nodes: [6x0 table]

删除边

使用 rmedge 删除节点 1 和节点 3 之间的边。。

>> G = rmedge(G,1,3)
G = 
  graph with properties:

    Edges: [3x1 table]
    Nodes: [6x0 table]

查找边

确定节点 1 和 5 之间的边的边索引。边索引 eiG.Edges 中的行号。

>> ei = findedge(G,1,5)
ei = 2

查找节点

在图中添加节点名称,然后确定节点 'd' 的节点索引。数值节点索引 niG.Nodes 中的行号。

>> G.Nodes.Name = {'a' 'b' 'c' 'd' 'e' 'f'}';
>> ni = findnode(G,'d')
ni = 4

图的绘制

我们使用 plot 函数绘制 graphdigraph 对象。

默认情况下,plot 会检查图的大小和类型,以确定要使用的布局。

如果调用 plot 并指定输出参数,则此函数将返回 GraphPlot 对象的句柄。

随后,我们可以使用该对象调整绘图的属性。例如,可以更改边的颜色或样式、节点的大小和颜色等。

>> A = [
0 1 2;
1 0 3; 
2 3 0
];
>> G=graph(A) //创建3x3无向图
>> G.Nodes.Name = {'First' 'Second' 'Third' }';//节点命名
>> p=plot(G) //绘图

同时,我们可以看到对象句柄的属性:

  GraphPlot - 属性:

     NodeColor: [0 0.4470 0.7410] 
    MarkerSize: 4
        Marker: 'o'
     EdgeColor: [0 0.4470 0.7410]
     LineWidth: 2
     LineStyle: '-'
     NodeLabel: {'First'  'Second'  'Third'}
     EdgeLabel: {}
         XData: [-0.3454 -0.7305 1.0759]
         YData: [1.0429 -0.8206 -0.2223]
         ZData: [0 0 0]

GraphPlot 属性控制所绘制图的外观和行为。通过更改属性值,可以修改图显示的各个方面。以下列出几个比较简单的属性,具体可查阅GraphPlot属性

NodeLabel -节点标签,EdgeLabel-边标签:用于显示边、节点相关信息。

>> plot(G,'NodeLabel',G.Nodes.Name) 
//将节点名称作为其标签
>> plot(G,'EdgeLabel',G.Edges.Weight)
//将边标签指定为权值(即显示权值)

ShowArrows - 切换显示有向边上的箭头,指定为 ‘on’ 或 ‘off’。

对于有向图,默认值为 ‘on’,即显示箭头,但您可以指定值 ‘off’,以隐藏有向边上的箭头。对于无向图,ShowArrows 始终为 ‘off’。

颜色名称 短名称 RGB 三元组 十六进制颜色代码 外观
'red' 'r' [1 0 0] '#FF0000' img
'green' 'g' [0 1 0] '#00FF00' img
'blue' 'b' [0 0 1] '#0000FF' img
'cyan' 'c' [0 1 1] '#00FFFF' img
'magenta' 'm' [1 0 1] '#FF00FF' img
'yellow' 'y' [1 1 0] '#FFFF00' img
'black' 'k' [0 0 0] '#000000' img
'white' 'w' [1 1 1] '#FFFFFF' img

突出显示最短路径

以红色高亮显示沿此路径的边,并增大路径的节点的大小。输入如下:

p=plot(G)
highlight(p,[1,2])
highlight(p,[1,2],'EdgeColor','r')

绘图模板

A=[
1 0 3;
2 0 1;
3 3 1;
]
G=digraph(A,{'A','B','C'})
p=plot(G,'EdgeLabel',G.Edges.Weight,'LineWidth',0.5)

s = {'A','A','B'}
t = {'B','C','C'}
G = graph(s, t)
p=plot(G)