Matlab中图论工具箱的应用
Matlab图论工具箱的命令见表1
表1 matlab图论工具箱的相关命令
|
命令名 |
功能 |
|
graphallshortestpaths |
求图中所有顶点对之间的最短距离 |
|
graphconncomp |
找无向图的连通分支,或有向图的强弱连通分支 |
|
graphisdag |
测试有向图是否含有圈,不含圈返回1,否则返回0 |
|
graphisomorphism |
确定两个图是否同构,同构返回1,否则返回0 |
|
graphisspantree |
确定一个图是否是生成树,是返回1,否则返回0 |
|
graphmaxflow |
计算有向图的最大流 |
|
graphminspantree |
在图中找最小生成树 |
|
graphpred2path |
把前驱顶点序列变成路径的顶点序列 |
|
graphshortestpath |
求图中指定的一对顶点间的最短距离和最短路径 |
|
graphtopootder |
执行有向无圈图的拓扑排序 |
|
graphtraverse |
求从一顶点出发,所能遍历图中的顶点 |
1.图的最短路径graphallshortestpaths函数的命令格式:
[dist]=graphallshortestpaths(G)
[dist]=graphallshortestpaths(G,...’Directed’,DirectedValue,...)
[dist]=graphallshortestpaths(G,...’Weights’,WeightsValue,...)
G是代表一个图的N*N稀疏矩阵,矩阵中的非零值代表一条边的权值:DirectedValue属性表示图是否为有向图,false代表无向图,true代表有向图,默认为true。WeightsValue是矩阵G中边的自定义权值列向量,该属性可以使我们使用零权值。输出[dist]是一个N*N的矩阵,每一个元素代表两点之间最短距离,对角线上的元素总为零,不在对角线上的零表示起点和终点的距离为零,inf值表示没有路径。
(1)创建并显示一个含有6个结点11条边的有向图
w=[41 99 51 32 15 45 38 32 36 29 21];%权值向量 dg=sparse([6 1 2 2 3 4 4 5 5 6 1],[2 6 3 5 4 1 6 3 4 3 5],w)%构造的稀疏矩阵表示图 h=view(biograph(dg,[],'ShowWeights','on'))%显示图的结构 dist=graphallshortestpaths(dg)%显示图中每对结点之间的最短路径
dist =
0 136 53 57 21 95
111 0 51 66 32 104
60 94 0 15 81 53
45 79 67 0 66 38
81 115 32 36 0 74
89 41 29 44 73 0

(2)创建无向图,结点信息同上
ug=tril(dg+dg');%要求生成的无向图是一个下三角矩阵 view(biograph(ug,[],'ShowArrows','off','ShowWeights','on')); dist=graphallshortestpaths(ug,'directed',false)
dist =
0 53 53 45 21 82
53 0 51 66 32 41
53 51 0 15 32 29
45 66 15 0 36 38
21 32 32 36 0 61
82 41 29 38 61 0

2.最小生成树graphminspantree函数的调用格式:
[Tree,pred]=graphminspantree(G)
[Tree,pred]=graphminspantree(G,R)
[Tree,pred]=graphminspantree(...,’Method’,MethofValue,...)
[Tree,pred]=graphminspantree(...,’Weights’,WeightsValue,...)
该函数用来寻找一个无循环的节点集合,连接无详图的全部节点,并且总的权值最小。Tree是一个代表生成树的稀疏矩阵,pred是包含最小生成的祖先节点的向量。G是无向图,R代表根节点,取值为1到节点数目,Method可以选择‘Kruskal’,’Prim’算法。
(1)构造无向图
w=[ 41 29 51 32 50 45 38 32 36 29 21]; dg=sparse([1 1 2 2 3 4 4 5 5 6 6],[2 6 3 5 4 1 6 3 4 2 5],w) ug=tril(dg+dg'); view(biograph(ug,[],'ShowArrows','off','ShowWeights','on'));

[st,pred]=graphminspantree(ug)%生成最小生成树 h=view(biograph(st,[],'ShowArrows','off','ShowWeights','on')); Edges=getedgesbynodeid(h);%提取无向图h的边集 set(Edges,'LineColor',[0 0 0]);%设置颜色属性 set(Edges,'LineWidth',1.5)%设置边值属性

3.计算有向图的最大流graphmaxflow,函数格式为:
[MaxFlow,FlowMatrix,Cut]=graphmaxflow(G,SNode,TNode)
[...]=graphmaxflow(G,SNode,TNode,...’Capacity’,CapacityValue,...)
[...]=graphmaxflow(G,SNode,TNode,...’Method’,MethodValue,...)
G是N*N的稀疏矩阵,表示有向图,SNode和TNode都是G中的节点,分别表示起点和目标点,CapacityValue为每条边自定义容量的列向量;MethodValue可以取‘Edmonds’和‘Goldberg’算法。输出MaxFlow表示最大流,FlowMatrix是表示每条边数据流值的稀疏矩阵,Cut表示连接SNode到TNode的逻辑向量,如果有多个解时,Cut是一个矩阵。
(1)构造带有节点和边的有向图
cm=sparse([1 1 2 2 3 3 4 5],[2 3 4 5 4 5 6 6],[2 3 3 1 1 1 2 3 ],6,6); %6个节点8条边 [M,F,K]=graphmaxflow(cm,1,6);%计算第1个到第6个节点的最大流 h=view(biograph(cm,[],'ShowWeights','on'));%显示原始有向图的图结构

h1=view(biograph(F,[],'ShowWeights','on'));%显示计算最大流矩阵的图结构

4.图的遍历函数graphtraverse,命令格式如下:
[disc,pred,closed]=graphtraverse(G,S)
[...]=graphtraverse(G,S,...’Directed’,DirectedValue,...)
[...]=graphtraverse(G,S,...’Depth’,DepthValue,...)
[...]=graphtraverse(G,S,...’Method’,MethodValue,...)
G是有向图,S为起始节点,disc是节点索引向量,pred是祖先节点索引向量
(1)创建一个有向图
DG=sparse([1 2 3 4 5 5 5 6 7 8 8 9],[2 4 1 5 3 6 7 9 8 1 10 2],true,10,10) h1=view(biograph(DG));

order=graphtraverse(DG,4)%使用深度优先算法从第4个节点开始遍历 order2=graphtraverse(DG,4,'Method','BFS')%使用广度优先遍历 index=graphtraverse(DG,4,'depth',2)%标记与节点4邻近的深度为2的节点
order =
4 5 3 1 2 6 9 7 8 10
order2 =
4 5 3 6 7 1 9 8 2 10
index =
4 5 3 6 7
Matlab中图论工具箱的应用的更多相关文章
- matlab中gatbx工具箱的添加
1. 从http://crystalgate.shef.ac.uk/code/下载工具箱压缩包gatbx.zip 2. 解压gatbx.zip,将其子文件夹genetic放在matlab安装目录too ...
- MATLAB中拟合算法刚入门
%%%1.拟合问题:(做预测,主要使用的范围是样本比较小,拟合效果会好,样本比较多,拟合的效果就不是很好) 1.应用预测的场景:已经知道10年的样本,预测第11年以内的数据 2.用拟合的到关系式:样本 ...
- MATLAB 中 ksvdbox和ompbox 工具箱的安装和使用
下载工具箱 链接: http://www.cs.technion.ac.il/~ronrubin/software.html 下载好工具箱之后, 要将解压后的文件夹添加到MATLAB的安装目录下的to ...
- 相机标定简介与MatLab相机标定工具箱的使用(未涉及原理公式推导)
相机标定 一.相机标定的目的 确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数. 二.通用摄像机模型 世界坐标系.摄像机坐标 ...
- matlab中的卷积——filter,conv之间的区别
%Matlab提供了计算线性卷积和两个多项式相乘的函数conv,语法格式w=conv(u,v),其中u和v分别是有限长度序列向量,w是u和v的卷积结果序列向量. %如果向量u和v的长度分别为N和M,则 ...
- paper 75:使用MATLAB的神经网络工具箱创建神经网络
% 生成训练样本集 clear all; clc; P=[110 0.807 240 0.2 15 1 18 2 1.5; 110 2.865 240 0.1 15 2 12 1 2; 110 2.5 ...
- MATLAB中如何使用遗传算法
matlab有遗传算法工具箱. 核心函数: (1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成 ...
- matlab添加M_map工具箱(转 http://blog.sina.com.cn/s/blog_491b86bf0100srt9.html)
之前转载过matlab画世界地图的博文.最近正好用到.首先试了matlab自带的worldmap,感觉画出来的图形不尽如人意,比较杂乱.如下图. 略查阅了些资料,请教了Liangjing,一致推荐m_ ...
- Matlab计算机视觉/图像处理工具箱推荐
Matlab计算机视觉/图像处理工具箱推荐 转载http://cvnote.info/matlab-cv-ip-toolbox/ 计算机视觉/图像处理研究中经常要用到Matlab,虽然其自带了图像处理 ...
随机推荐
- Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现
前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇到一个问题,jenkins构建出来的镜像部署后,需要通过ip:port去访问,有什么更好的 ...
- css3渐变之线性渐变
css3定义了两种类型的渐变,即线性渐变和径向渐变.这里我要说的是线性渐变. 为了创建一个线性渐变,你必须至少定义两种颜色结点.颜色结点即你想要呈现平稳过渡的颜色.同时,你也可以设置一个起点和一个方向 ...
- 算法,java代码实现打印万年历
万年历 以1900年1月1号星期一为时间原点 星期日 第一天 星期一 第二天 星期二 第三天 星期三 第四天 星期四 第五天 星期五 第六天 星期六 第七天 1.计算出当前日 ...
- 我的第一个python web开发框架(21)——小结
这个小网站终于成功上线,小白除了收获一笔不多的费用外,还得到女神小美的赞赏,心中满满的成就感.这一天下班后,他请老菜一起下馆子,兑现请吃饭的承诺,顺便让老菜点评一下. 小白:老大,在你的指导下终于完成 ...
- SSM手把手整合教程&测试事务
自打来了博客园就一直在看帖,学到了很多知识,打算开始记录的学习到的知识点 今天我来写个整合SpringMVC4 spring4 mybatis3&测试spring事务的教程,如果有误之处,还请 ...
- 解决spring定时任务执行2次和tomcat部署缓慢的问题
spring定时任务执行2次 问题重现和解析 最近使用quartz定时任务框架,结果发现开发环境执行无任何问题,部署到服务器上后,发现同一时间任务执行了多次.经过搜索发现是服务器上tomcat的配置文 ...
- 织梦DedeCMS v5.7 实现导航条下拉菜单
首先将下面这段代码贴到templets\default\footer.htm文件里(只要在此文件里就行,位置无所谓) <</span>script type='text/javasc ...
- CSAPP 第二章随笔
类型转换问题 (1)int -> short 二进制位高位截断,低位保持不变 (2)同类型 unsign -> sign 记住二进制位是不变的 (3)P101页提到的编译器乘法优化问题,一 ...
- Struts2 04--- 值栈 ognl(S标签)
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整 ...
- Linux的运行级别详细说明
Linux 7个运行级别 # 0 - 停机(千万不要把initdefault设置为0 ) # 1 - 单用户模式 # 2 - 多用户,但是没有NFS # 3 - 完全多用 ...