matlab使用教程(15)—图论基础

这篇具有很好参考价值的文章主要介绍了matlab使用教程(15)—图论基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.有向图和无向图

1.1什么是图?

        图是表示各种关系的节点和边的集合:
        • 节点 是与对象对应的顶点。
        • 是对象之间的连接。
        • 图的边有时会有权重 ,表示节点之间的每个连接的强度(或一些其他属性)。
        这些定义是概括性的,因为节点和边在图中的确切含义取决于具体的应用情形。例如,您可以使用图为社交网站中的朋友关系建模。图节点表示人,边表示朋友关系。图与物理对象和各种情况的自然对应关系意味着,您可以使用图对各种系统进行建模。例如:
        • 网页链接 - 图节点代表网页,边表示网页之间的超链接。
        • 机场 - 图节点代表机场,边表示机场之间的航班。在 MATLAB 中,graph digraph 函数用于构建表示无向图和有向图的对象。
        • 无向图的边没有方向。这些边指示双向关系,因为每条边都可以在两个方向上穿过。下图显示了一个包含三个节点和三条边的简单无向图。
matlab使用教程(15)—图论基础,从0开始学Matlab,matlab,图论,数据结构
        • 有向图的边带有方向。这些边指示单向关系,因为每条边只能在单个方向上穿过。下图显示了一个包含三个节点和两条边的简单有向图。
matlab使用教程(15)—图论基础,从0开始学Matlab,matlab,图论,数据结构
        边在图中的确切位置、长度或方向通常没有含义。换言之,只要基础结构不变,就可以通过重新排列节点和/或使边扭曲,以多种不同的方式显示同一个图。

1.2 自环和多重图

        使用 graph digraph 创建的图可以有一个或多个自环,自环是指一条边的两端为同一个节点。此外,图可以具有多条有相同源节点和目标节点的边,这样的图称为多重图。多重图可能包含自环,也可能不包含。
        对于 MATLAB 中的图算法函数来说,如果图中包含的节点只有一个自环,则不属于多重图。但是,如果图中包含的节点具有多个自环,则属于多重图。
        例如,下图显示了具有多个自环的无向多重图。节点 A 有三个自环,节点 C 有一个。该图包含以下三个条件,任何一个条件都满足多重图的条件。
        • 节点 A 有三个自环。
        • 节点 A 和 B 之间有五条边。
        • 节点 A 和 C 之间有两条边。
matlab使用教程(15)—图论基础,从0开始学Matlab,matlab,图论,数据结构
        要确定给定的图是否为多重图,请使用 ismultigraph 函数。

2.创建图

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

2.1 邻接矩阵

        有一种表示图中信息的方法是使用方形邻接矩阵。邻接矩阵中的非零项表示两个节点之间的边,条目值表示边的权重。邻接矩阵的对角线元素通常为零,但非零对角线元素表示自环或通过边与其自身相连的节点。
        • 当您使用 graph 创建无向图时,邻接矩阵必须对称。但在实践中,为避免重复,这些矩阵通常为三角形。要仅使用邻接矩阵的上三角或下三角构建无向图,请使用 graph(A,'upper')
graph(A,'lower')
        • 当您使用 digraph 创建有向图时,邻接矩阵不需要对称。
        • 对于大型图,邻接矩阵包含许多零并且通常为稀疏矩阵。
        • 您不能从邻接矩阵创建多重图。
        例如,考虑创建如下无向图。

 matlab使用教程(15)—图论基础,从0开始学Matlab,matlab,图论,数据结构

        可以通过下面的邻接矩阵表示该图:
matlab使用教程(15)—图论基础,从0开始学Matlab,matlab,图论,数据结构  
        要在 MATLAB 中构建该图,请输入:
A = [0 1 2; 1 0 3; 2 3 0];
node_names = { 'A' , 'B' , 'C' };
G = graph(A,node_names)
G =
graph with properties:
Edges: [3×2 table]
Nodes: [3×1 table]
        您可以使用邻接矩阵通过 graph digraph 函数来创建图,也可以使用 adjacency 函数求预先存在的图的加权或未加权的稀疏邻接矩阵。

2.2 边列表

        表示图信息的另一种方法是列出所有边。例如,考虑创建与上面相同的无向图。现在用边列表来表示该图
matlab使用教程(15)—图论基础,从0开始学Matlab,matlab,图论,数据结构
        从边列表中很容易得出以下结论:该图包含三个唯一节点 A BC,这三个节点通过三条列出的边相连。如果该图有断开的节点,边列表中将不会列出这些节点,您需要单独指定它们。 在 MATLAB 中,边列表按列划分为源节点和目标节点。对于有向图,边的方向(从源到目标)很重要;但对于无向图,源节点和目标节点是可以互换的。使用边列表构建该图的一种方法是,对源节点、目标节点和边权重使用单独的输入:
source_nodes = { 'A' , 'A' , 'B' };
target_nodes = { 'B' , 'C' , 'C' };
edge_weights = [1 2 3];
G = graph(source_nodes, target_nodes, edge_weights);
        graph digraph 都允许使用边列表构造简单图或多重图。构建图 G 后,可以使用命令 G.Edges 查看边(及其属性)。这些边在 G.Edges 中的顺序首先按源节点(第一列)排列,其次按目标节点(第二列)排列。对于无向图,索引较小的节点列为源节点,索引较大的节点列为目标节点。由于 graph digraph 的底层实现取决于稀疏矩阵,因此许多相同的索引创建成本均适用。使用前述方法之一基于三元对组 (source,target,weight) 一次性构建图比先创建空图再以迭代方式添加更多节点和边要快。为获得最佳性能,请尽量减少对 graphdigraphaddedgeaddnodermedgermnode 的调用次数。

3.图节点 ID

        默认情况下,系统会对使用 graph digraph 创建的图的所有节点进行编号。因此,您始终可以通过数值节点索引来引用它们。如果图具有节点名称(即 G.Nodes 包含变量 Name),则您还可以使用节点名称来表示图中的节点。因此,可以通过节点索引或节点名称来表示图中的已命名节点。例如,可以调用节点 1'A'。术语节点 ID 同时包含节点标识的两个方面的内容。节点 ID 既表示节点索引,也表示节点名称。为方便起见,MATLAB 会记住您在调用大多数图函数时使用的节点 ID 的类型。因此,如果您使用节点索引表示图中的节点,则大多数图函数返回的数值答案也会通过节点索引来表示这些节点。
A = [0 1 1 0; 1 0 1 0; 1 1 0 1; 0 0 1 0];
G = graph(A,{ 'a' , 'b' , 'c' , 'd' });
p = shortestpath(G,1,4)
p =
1 3 4
        但是,如果使用节点名称来表示节点,则大多数图函数返回的答案也会通过节点名称来表示这些节点(包含在字符向量元胞数组或字符串数组中)。
p1 = shortestpath(G, 'a' , 'd' )
p1 =
1×3 cell array
{'a'} {'c'} {'d'}
        使用 findnode 查找给定的节点名称的数值节点 ID。反过来,对于给定的数值节点 ID,请创建指向G.Nodes.Name 的索引以确定对应的节点名称。

4.修改或查询现有图

        构造 graph digraph 对象后,您可以使用各种函数来修改图结构或确定图有多少个节点或多少条边。下表列出了一些可用于修改或查询 graph digraph 对象的函数。

matlab使用教程(15)—图论基础,从0开始学Matlab,matlab,图论,数据结构

matlab使用教程(15)—图论基础,从0开始学Matlab,matlab,图论,数据结构文章来源地址https://www.toymoban.com/news/detail-648980.html

到了这里,关于matlab使用教程(15)—图论基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MATLAB App Designer基础教程 Matlab GUI入门(四)

    绘制函数图像 显示图像(jpg png tiff) App designer中 plot 和命令行中的 plot函数的不同; 如何在坐标轴空间中显示两个函数图像; 智能缩进 (Ctrl + I) 颜色选项: r -红色 g - 绿色 b - 蓝色 w - 白色 k - 黑色 去除边框技巧(隐藏边框技巧),界面设置(代码设置)框样式 更改网格

    2024年02月12日
    浏览(37)
  • 数学建模中所需要使用到的Matlab(从零开始介绍)

    注意事项 :只有将Matlab的工作目录切换到当前文件夹中,才能运行当前程序。

    2024年02月13日
    浏览(80)
  • matlab最基础教程(六):编程习惯

    matlab最基础教程(六):编程习惯 前言:matlab的基本使用方法差不多介绍完了,确定问题类型(数值/符号),编程(函数/脚本)并运行即可。但具体编程过程中,良好的习惯非常重要,一方面便于调试,另一方面便于代码维护和升级。 1.注释 matlab提供两种注释,分别是%%和

    2024年02月16日
    浏览(24)
  • 从零开始学MATLAB强化学习工具箱使用(五):Simulink+强化学习设计器

    建立Simulink环境,导入强化学习设计器里,添加代理,进行训练 首先准备好你的Simulink模型,这里还用上节用到的水箱模型。 RL Agent模块报错是由于还没有给其绑定代理,后续会在强化学习设计器里配置,暂时不用理会。 下一步,在MATLAB命令行窗口或脚本里为环境指定状态空

    2024年04月09日
    浏览(44)
  • MATLAB——图论合集

    本帖总结一些经典的图论问题,通过MATLAB如何计算答案。近期在复习考研,以此来巩固一下相关知识——虽然考研肯定不能用MATLAB代码哈哈,不过在实际应用中解决问题还是很不错的,比C++易上手得多~ 此外,本帖图论中非常重要的知识点——最小生成树。作为数据结构的理

    2024年02月08日
    浏览(26)
  • 快速上手MATLAB:科研、工程、数据分析,MATLAB入门(下)教你基础知识!分享《MATLAB初学者教程 MATLAB编程-菜鸟入门(清晰版)》

    1、《MATLAB完全学习手册(视频+课件+代码)》 2、《MATLAB入门》 3、《详解MATLAB在科学计算中的应用》 4、《案例二 MATLAB与Excel交互》 5、《MATLAB初学者教程 MATLAB编程-菜鸟入门(清晰版)》 6、《MATLAB常用函数参考 MATLAB函数汇总 精通MATLAB》 7、等等。。。。 前两天,我们在(

    2024年02月07日
    浏览(56)
  • 图论——Dijkstra算法matlab代码

    Dijkstra算法步骤 (1)构造邻接矩阵 (2)定义起始点 (3)运行代码

    2024年02月03日
    浏览(34)
  • Matlab绘图系列教程-基础绘图:柱状图 (bar函数 )

    4.1 介绍 4.1.1 引言 柱状图是一种常用的数据可视化方式,用于比较不同类别的数据或展示数据的分布。在Matlab中,使用 bar 函数可以轻松地绘制出精美的柱状图。本篇博客将为您介绍如何使用Matlab绘制优雅的柱状图,展示数据的视觉效果和科研价值。 4.1.2 目标和受众 本篇博客

    2024年02月12日
    浏览(34)
  • 详细介绍MATLAB中的图论算法

    MATLAB是一种功能强大的编程语言和环境,提供了许多用于图论算法的工具和函数。图论是研究图及其属性和关系的数学分支,广泛应用于计算机科学、网络分析、社交网络分析等领域。在MATLAB中,我们可以使用图论算法来解决各种问题,如最短路径问题、最小生成树问题、最

    2024年02月16日
    浏览(34)
  • matlab编程实践14、15

    目录 数独 \\\"四独\\\"游戏 解的存在和唯一性 算法 常微分方程          采用 蛮力试凑法 来解决数独问题。(采用 单选数 ,以及计算机科学技术中的 递推回溯法 )         以上的数独是图14-2的两个矩阵的和,左侧的矩阵可以由 kron和magic函数 建立起来,前一个函数用来求

    2024年02月14日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包