主要内容

描述

对象表示无向图,其中有连接节点的无向边。创建图形对象后,可以通过使用对象函数对对象执行查询来了解更多关于图形的信息。例如,您可以添加或删除节点或边,确定两个节点之间的最短路径,或定位特定的节点或边。

G = graph([1 1], [2 3]);e = G. edges G = addedge(G,2,3) G = addnode(G,4) plot(G)

创建

描述

例子

G=图创建一个空的无向图对象,G,它没有节点或边。

例子

G=图(一个使用正方形对称邻接矩阵创建图形,一个

  • 对于逻辑邻接矩阵,图没有边权。

  • 对于非逻辑邻接矩阵,图具有边权。每个非零入口的位置一个为图形指定一条边,该边的权值等于条目的值。例如,如果A(2,1) = 10,然后G包含节点2和节点1之间的边,权值为10。

例子

G=图(一个节点名另外,指定节点名。元素的数量节点名必须等于大小(1)

G=图(一个NodeTable使用表指定节点名称(可能还有其他节点属性),NodeTable.表的行数必须与一个.使用table变量指定节点名的名字

例子

G=图(一个___类型指定在构造图时使用的邻接矩阵的一个三角形。您必须指定一个还可以指定节点名NodeTable.只使用…的上或下三角形一个为了构造这个图,类型两者都可以“上”“低”

例子

G=图(一个___, ' omitselfloops ')的对角元素被忽略一个并返回一个没有任何自循环的图。您可以使用前面语法中的任何输入参数组合。

例子

G=图(s t指定图的边(s, t)在节点对中。年代而且t可以指定节点索引或节点名称。对边缘进行排序G首先是源节点,然后是目标节点。如果你的边属性的顺序和年代而且t,使用语法G = graph(s,t,EdgeTable)传入边缘属性,以便它们在结果图中以相同的方式排序。

例子

G=图(s t权重还指定数组的边权值权重

例子

G=图(s t权重节点名使用字符向量或字符串数组的单元格数组指定节点名称,节点名年代而且t不能包含不在中的节点名称节点名

G=图(s t权重NodeTable使用表指定节点名称(可能还有其他节点属性),NodeTable.方法指定节点名称的名字表变量。年代而且t不能包含不在中的节点名称NodeTable

例子

G=图(s t权重全国矿工工会指定具有数值标量的图中的节点数全国矿工工会

G=图(s t___, ' omitselfloops ')不向图中添加任何自循环。也就是说,任何k满足S (k) == t(k)将被忽略。您可以使用前面语法中的任何输入参数组合。

G=图(s tEdgeTable___使用表来指定边缘属性,而不是指定权重.的EdgeTableInput必须是一个表,其中每个对应的元素对都有一行年代而且t.使用table变量指定边权值重量

例子

G=图(EdgeTable使用表格EdgeTable来定义这个图。在这种语法中,第一个变量EdgeTable必须命名EndNodes,它必须是一个定义图的边列表的两列数组。

例子

G=图(EdgeTableNodeTable另外,使用表指定图节点的名称(可能还有其他属性),NodeTable

G=图(EdgeTable___, ' omitselfloops ')不向图中添加自循环。也就是说,任何k满足EdgeTable.EndNodes(k,1) == EdgeTable.EndNodes(k,2)将被忽略。您必须指定EdgeTable还可以指定NodeTable

输入参数

全部展开

邻接矩阵,指定为完整或稀疏的数值矩阵。里面的条目一个指定图节点之间的连接网络(边)。每个非零入口的位置一个指定两个节点之间的边。该条目的值提供了边权值。逻辑邻接矩阵的结果是一个无加权图。

的主对角线上的非零项一个指定self-loops,或者是用边与自身相连的节点。使用“omitselfloops”输入选项忽略对角线项。

一个必须对称,除非类型指定输入。使用issymmetric来确认矩阵的对称性。对于三角邻接矩阵,指定类型只使用上三角形或下三角形。

例子:A = [0 1 5;1 0 0;5 0 0]描述一个有三个节点和两条边的图。节点1和节点2之间的边的权值为1,节点1和节点3之间的边的权值为5

数据类型:||逻辑

节点名称,指定为字符向量或字符串数组的单元格数组。节点名长度一定等于numnodes (G)以便它为图中的每个节点包含一个非空的惟一名称。

例子:G = graph(A,{'n1','n2','n3'})为3 × 3邻接矩阵指定三个节点名,一个

数据类型:细胞|字符串

邻接矩阵的类型,指定为任意一种“上”“低”

例子:G =图(A,'upper')只使用的上三角形一个为了构造这个图,G

节点对,指定为节点索引或节点名。中相应节点之间创建边年代而且t,它们必须都是数值型的,或者都是字符向量、字符向量的单元格数组、字符串数组或类别数组。在所有情况下,年代而且t必须有相同数量的元素。

  • 如果年代而且t为数值,则对应图节点的索引。数值型节点索引必须是大于或等于1的正整数。

  • 如果年代而且t是字符向量、字符向量的单元格数组或字符串数组,然后它们为节点指定名称。的节点属性是一个包含的名字带有节点名的变量,G.Nodes.Name

  • 如果年代而且t是类别数组吗,那么类别在吗年代而且t用作图中的节点名。这可以包括不是元素的类别年代t

  • 如果年代而且t在相同的两个节点之间指定多条边,则结果为a油印

这个表显示了通过数值节点索引或节点名称引用一个或多个节点的不同方法。

形式 单独的节点 多个节点
节点索引

标量

例子:1

向量

例子:[1 2 3]

节点名称

特征向量

例子:“一个”

字符向量的单元格数组

例子:{' a ' ' b ' ' c '}

字符串标量

例子:“一个”

字符串数组

例子:[" a " " b " " c "]

分类数组

例子:分类(“”)

分类数组

例子:绝对的(["A" "B" "C"])

例子:G = graph([1 2 3],[2 4 5])创建一个具有五个节点和三条边的图。

例子:{'波士顿' '纽约' '华盛顿特区'},{'纽约' '新泽西' '匹兹堡'})创建具有五个命名节点和三条边的图。

边权值,指定为标量、向量、矩阵或多维数组。权重必须是一个标量或具有相同数量元素的数组年代而且t

将边权值存储为重量变量G.Edges属性表。要在创建图形后添加或更改权重,可以直接修改表变量,例如,G.Edges.Weight = [25 50 75]'

如果你指定权重作为空数组[],则忽略它。

例子:G = graph([1 2],[2 3],[100 200])创建一个具有三个节点和两条边的图。边的权值是One hundred.而且200

数据类型:|

图节点数,指定为正标量整数。全国矿工工会必须大于或等于中最大的元素年代而且t

例子:G = graph([1 2],[2 3],[],5)创建具有三个连接节点和两个隔离节点的图。

边缘信息表。如果不指定年代而且t,那么第一个变量EdgeTable是需要一个双列矩阵,单元格数组的字符向量,或字符串数组称为EndNodes它定义了图的边。对于边权值,使用变量重量,因为这个表变量名被一些图函数使用。如果有一个变量重量,那么它一定是一个数值列向量。看到表格有关构造表的更多信息。

图创建完成后,使用查询边缘信息表G.Edges

例子:EdgeTable = table([1 2;2 3;3 5;4 5], VariableNames, {' EndNodes '})

数据类型:表格

节点信息表。NodeTable可以包含任意数量的变量来描述图节点的属性。对于节点名,使用变量的名字,因为这个变量名被一些图函数使用。如果有一个变量的名字,则它必须是字符向量的单元格数组或在每行中指定唯一名称的字符串数组。看到表格有关构造表的更多信息。

图创建完成后,查询节点信息表G.Nodes

例子:NodeTable = table({'a';“b”;“c”;' d '}, VariableNames,{'名字'})

数据类型:表格

属性

全部展开

图的边,作为表返回。默认情况下,这是一个——- - - - - -1表,是图中边的个数。中的边列表G.Edges.EndNodes首先按源节点排序,然后按目标节点排序。

  • 中创建一个新变量,可向图中添加新的边缘属性边缘表格

  • 方法可向图中添加或删除边addedgermedge对象的功能。

例子:G.Edges返回一个列出图中的边的表

例子:G.Edges.Weight返回边权值的数字向量。

例子:G.Edges.Weight = [10 20 30 55]'指定图的新边权值。

例子:g.g edgs . normweight = g.g edgs . weight /sum(g.g edgs . weight)向包含边的归一化权值的表中添加一个新的边属性。

数据类型:表格

图的节点,作为表返回。默认情况下,这是一个空值N——- - - - - -0表,N是图中的节点数。

  • 中创建一个新变量,即可向图中添加新的节点属性节点表格

  • 方法可向图中添加或删除节点addnodermnode对象的功能。

例子:G.Nodes返回一个列出图的节点属性的表。默认情况下,该表为空。

例子:G.Nodes.Names = {'Montana', 'New York', 'Washington', 'California'}'通过添加变量将节点名添加到图中的名字节点表格

例子:G.Nodes.WiFi = logical([1 0 0 1 1]')添加变量无线网络节点表格此属性指定某些机场具有无线互联网覆盖。

数据类型:表格

对象的功能

全部展开

addedge 为图形添加新边
rmedge 从图中删除边
addnode 向图中添加新节点
rmnode 从图中删除节点
findedge 在图中定位边
findnode 在图中定位节点
numedges 图中的边数
numnodes 图中的节点数
edgecount 两个节点之间的边数
reordernodes 对图节点重新排序
子图 提取子图
中心 测量节点重要性
conncomp 连通图组件
biconncomp 双连通图组件
bctree 块切割树图
isisomorphic 确定两个图是否同构
同构 计算两个图之间的同构
ismultigraph 判断图是否有多条边
简化 将多图化简为简单图
bfsearch 广度优先图搜索
dfsearch 深度优先图搜索
shortestpath 两个单节点之间的最短路径
shortestpathtree 从节点出发的最短路径树
距离 所有节点对的最短路径距离
maxflow 图中最大流量
minspantree 图的最小生成树
allpaths 找出两个图节点之间的所有路径
hascycles 确定图是否包含循环
allcycles 找出图中所有的循环
cyclebasis 图的基本循环基
邻接 图邻接矩阵
发病率 图关联矩阵
拉普拉斯算子 图拉普拉斯矩阵
学位 图节点度
邻居 图节点邻域
最近的 半径内最近的邻居
outedges 从节点传出的边
情节 绘制图节点和边

例子

全部折叠

创建一个具有三个节点和两条边的对象。一条边在节点1和节点2之间,另一条边在节点1和节点3之间。

G = graph([1 1],[2 3])
G =具有属性的图:边:[2x1表]节点:[3x0表]

查看图的边表。

G.Edges
ans =2×1表EndNodes ________ 1 2 1 3

向图中添加节点名,然后查看新节点和边缘表。每条边的结束节点现在使用它们的节点名表示。

G.Nodes.Name = {“一个”“B”“C”} ';G.Nodes
ans =3×1表名称_____ {'A'} {'B'} {'C'}
G.Edges
ans =2×1表EndNodes ______________ {'A'} {'B'} {'A'} {'C'}

控件中添加或修改额外的变量节点而且边缘表来描述图节点或边的属性。但是,您不能通过修改这些表直接更改图中的节点或边的数量。相反,请使用addedgermedgeaddnode,或rmnode函数修改图中节点或边的数量。

例如,在节点2和节点3之间的图中添加一条边,并查看新的边列表。

G = adedge (G,2,3)
G =具有属性的图:边:[3x1表]节点:[3x1表]
G.Edges
ans =3×1表EndNodes  ______________ {' 一个“}{B} {A} {' C '} {B} {' C '}

创建一个对称的邻接矩阵,一个,这就创建了一个完整的4阶图。使用逻辑邻接矩阵创建一个没有权重的图。

A = ones(4) - diag([1,1,1])
一个=4×40 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0
G =图(A~=0)
G =具有属性的图:边:[6x1表]节点:[4x0表]

查看图的边列表。

G.Edges
ans =6×1表EndNodes ________ 1 2 1 3 1 4 2 3 2 4 3

创建一个上三角邻接矩阵。

魔术(4)
一个=4×416 2 3 13 0 11 10 8 0 0 6 12 0 0 0 1

使用邻接矩阵创建一个带有命名节点的图。指定“omitselfloops”忽略对角线上的条目一个,并指定类型作为“上”为了表明一个是上三角。

Names = {“α”“β”“伽马”“δ”};G =图(A,人名,“上”“omitselfloops”
G =具有属性的图:边:[6x2表]节点:[4x1表]

查看边缘和节点信息。

G.Edges
ans =6×2表EndNodes重量  ______________________ ______ {' α’}{“beta”}2{“α”}{“伽马”}3{“α”}{“δ”}13{“beta”}{“伽马”}10{“beta”}{“δ”}8{“伽马”}{“δ”}12
G.Nodes
ans =4×1表的名字  _________ {' α’}{“beta”}{“伽马”}{“δ”}

使用每条边的结束节点列表创建并绘制立方体图。

S = [1 1 1 2 2 3 3 4 5 5 6 7];T = [2 4 8 3 7 4 6 5 6 8 7 8];G =图(s,t)
G =具有属性的图:边:[12x1表]节点:[8x0表]
情节(G)

图中包含一个axes对象。axes对象包含一个graphplot类型的对象。

使用每条边的结束节点列表创建并绘制立方体图。指定节点名和边权值作为单独的输入。

S = [1 1 1 2 2 3 3 4 5 5 6 7];T = [2 4 8 3 7 4 6 5 6 8 7 8];Weights = [10 10 1 10 1 10 1 1 12 12 12 12];Names = {“一个”“B”“C”' D '“E”“F”‘G’“H”};G =图(s,t,权重,名称)
G =具有属性的图:边:[12x2 table]节点:[8x1 table]
情节(G,“EdgeLabel”G.Edges.Weight)

图中包含一个axes对象。axes对象包含一个graphplot类型的对象。

使用每条边的结束节点列表创建一个加权图。指定图应该总共包含10个节点。

S = [1 1 1 1 1];T = [2 3 4 5 6];Weights = [5 5 5 6 9];G =图(s,t,weights,10)
G =具有属性的图:边:[5x2表]节点:[10x0表]

画出图表。额外的节点与主连接组件断开连接。

情节(G)

图中包含一个axes对象。axes对象包含一个graphplot类型的对象。

创建一个空的图形对象,G

G =图;

向图中添加三个节点和三条边。对应的条目年代而且t定义图边的结束节点。addedge如果适当的节点尚未出现,则自动将它们添加到图中。

S = [1 2 1];T = [2 3 3];G = adedge (G,s,t)
G =具有属性的图:边:[3x1表]节点:[3x0表]

查看边缘列表。每一行描述图中的一条边。

G.Edges
ans =3×1表EndNodes ________ 1 2 1 3 2 3

为了获得最佳性能,请使用单个调用一次性构造所有图.对于大型图来说,在循环中添加节点或边可能比较慢。

创建一个包含变量的边表EndNodes重量,代码.然后创建一个包含变量的节点表的名字而且国家.每个表中的变量指定图节点和边的属性。

S = [1 1 1 2 3];T = [2 3 4 3 4];Weights = [6 6.5 7 11.5 17]';代码= {“1/44”“1/49”“1/33”“44/49”“49/33”} ';EdgeTable = table([s' t'],weights,code,...“VariableNames”,{“EndNodes”“重量”“代码”})
EdgeTable =5×3表EndNodes重量代码  ________ ______ _________ 1 2 6{“1/44”}1 3 6.5{“1/49”}1 4 7{“1/33”}2 3 11.5{“44/49”}3 4 17{“49/33”}
Names = {“美国”“GBR”“德吴”联邦铁路局的} ';Country_code = {' 1 '“44”“49”“33”} ';NodeTable = table(name,country_code,“VariableNames”,{“名字”“国家”})
NodeTable =4×2表国家的名字  _______ _______ {' 美国‘}{1}{的GBR}{“44”}{‘德吴}{“49”}{联邦铁路局的}{“33”}

使用节点表和边表创建一个图。使用国家代码作为节点和边缘标签绘制图形。

G = graph(EdgeTable,NodeTable);情节(G,“NodeLabel”G.Nodes.Country,“EdgeLabel”G.Edges.Code)

图中包含一个axes对象。axes对象包含一个graphplot类型的对象。

兼容性的考虑

全部展开

在R2018a中,行为发生了变化

扩展功能

在R2015b中引入