“利用Matlab实践关联矩阵与邻接矩阵的转换”

假设网络图G=(V,E)的顶点集为V={v1,v2,…,vn},边集为E={e1,e2,…,em},则该网络图的关联矩阵L就是一个n×m矩阵,其中元素gij表示顶点vi与边ej相关联,而邻接矩阵A是一个n阶方阵,其中元素aij表示连接顶点vi与vj的边。从关联矩阵和邻接矩阵的定义来看,二者均是以矩阵形式表示网络图结构,同一网络图可以有关联矩阵和邻接矩阵的两种表达方式,即可依据其各自定义进行关联矩阵和邻接矩阵的相互转换。通过Matlab进行脚本编码实现无向图与有向图中的关联矩阵和邻接矩阵的转换,进一步熟悉二者矩阵的定义与含义,并掌握用计算机语言操作矩阵运算的编码方法。

首先在无向图中实现关联矩阵和邻接矩阵的转换,定义一个转换函数,通过控制参数实现“关联矩阵->邻接矩阵”与“邻接矩阵->关联矩阵”的转换功能。然后考虑连接边的方向问题,在有向图中同样定义一个转换参数,实现“关联矩阵->邻接矩阵”与“邻接矩阵->关联矩阵”的转换功能。

01

无向图中关联矩阵和邻接矩阵的转换函数

在无向图中,由于连接边的无向性,因而对于顶点连接关系与顶点/边关联关系的转换相对较为容易。

“邻接矩阵->关联矩阵”:先由邻接矩阵得出网络图中所有连接边的数量与顶点的数量,然后在邻接矩阵中搜索不为0的元素,即对应某一条连接边,邻接矩阵不为0的某元素aij,对应某条边k的行向量中第i个与第j个元素分别为1。

“关联矩阵->邻接矩阵”:先有关联矩阵获取连接边和顶点的数量,然后依次搜索每一条连接边,如某条边k的行向量中第i个与第j个元素分别为1,说明顶点i与j存在邻接关系,即邻接矩阵的元素aij值为1。代码:function W=incandadf(F,f) %无向图中关联与邻接矩阵的转换if f==0 % 邻接-关联m=sum(sum(F))/2; %在邻接矩阵中计算边的数量n=size(F,1); %节点数量W=zeros(n,m);k=1;for i=1:nfor j=i:nif F(i,j)~=0 %邻接矩阵中元素不为0说明有连接边W(i,k)=1; %给边的起点赋值为1W(j,k)=1; %给边的终点赋值为1k=k+1; %依次定义每一条边endendendelseif f==1 % 关联->邻接m=size(F,2); %在关联矩阵中获取边的数量n=size(F,1); %在关联矩阵中获取顶点的数量W=zeros(n,n);for i=1:ma=find(F(:,i)~=0);%寻找每一条边即每一列对应不为0的两个元素W(a(1),a(2))=1; %存在边,即邻接矩阵对应值为1W(a(2),a(1))=1; %存在边,即邻接矩阵对应值为1endelsedisp("please input the right value of f");endW;

02

有向图中关联矩阵和邻接矩阵的转换函数

类似定义一个转换函数mattransf(F,f),其中,F为输入矩阵,f=0表示F是邻接矩阵,f=1表示F是关联矩阵。

矩阵转换方法基本与无向图中类似,但是在有向图网络中,有以下几个注意问题:

1)有向图的关联矩阵中,列向量代表有向边,值为1 表示起点,值为-1表示终点;

2)无向图的关联矩阵直接对应有向图,则需要用多一倍的列来表示双向边;

3)在实现邻接至关联矩阵转换时,Aij与Aji不一定相等,对应的有向边i->j和j->i需要分别计算和定义;

4)在实现关联至邻接矩阵转换时,需要根据元素值为1或-1判定起点和终点,从而决定是给Aij或Aji赋值为1。代码:function W=mattransf(F,f)%有向图的关联与邻接矩阵的转换if f==0 % 邻接-关联m=sum(sum(F)); %在有向图中计算边的数量,此时Wij!=Wjin=size(F,1); %顶点数量W=zeros(n,m);k=1;for i=1:nfor j=1:nif F(i,j)~=0 %由i出发的有向边,起点W(i,k)=1; %起点赋值为1W(j,k)=-1; %终点赋值为-1k=k+1;endendendelseif f==1 % 关联-邻接m=size(F,2); %边数n=size(F,1); %顶点数W=zeros(n,n);for i=1:ma=find(F(:,i)~=0); %找到有向边的两个顶点if F(a(1),i)==1W(a(1),a(2))=1; %值为1,为起点,a(1)->a(2)elseW(a(2),a(1))=1; %值为-1,为终点,a(2)->a(1)endendelsedisp("please input the right value of f");endW;

03

算例无向图中关联矩阵和邻接矩阵的转换

代码:%无向图中邻接矩阵与关联矩阵的转换A=[0 1 1 0 1;1 0 1 0 0;1 1 0 1 1;0 0 1 0 1;1 0 1 1 0];fprintf("原无向图的邻接矩阵为:\n")AW=incandadf(A,0);fprintf("由邻接矩阵转换成关联矩阵为:\n")WL=[1 1 1 0 0 0 0;1 0 0 1 0 0 0;0 1 0 1 1 1 0;0 0 0 0 1 0 1;0 0 1 0 0 1 1];fprintf("原无向图的关联矩阵为:\n")LW=incandadf(L,1);fprintf("由关联矩阵转换成邻接矩阵为:\n")W结果:原无向图的邻接矩阵为:A =0     1     1     0     11 0 1 0 01 1 0 1 10 0 1 0 11 0 1 1 0由邻接矩阵转换成关联矩阵为:W =1     1     1     0     0     0     01 0 0 1 0 0 00 1 0 1 1 1 00 0 0 0 1 0 10 0 1 0 0 1 1原无向图的关联矩阵为:L =1     1     1     0     0     0     01 0 0 1 0 0 00 1 0 1 1 1 00 0 0 0 1 0 10 0 1 0 0 1 1由关联矩阵转换成邻接矩阵为:W =0     1     1     0     11 0 1 0 01 1 0 1 10 0 1 0 11 0 1 1 0有向图中关联矩阵和邻接矩阵的转换

代码:A=[0 0 0 0 0;1 0 0 0 0;1 1 0 0 0;0 0 1 0 0;1 0 1 1 0];fprintf("原有向图的邻接矩阵为:\n")AW= mattransf (A,0);fprintf("由邻接矩阵转换成关联矩阵为:\n")WL=[-1 -1 0 0 -1 0 0;1 0 -1 0 0 0 0;0 1 1 -1 0 -1 0;0 0 0 1 0 0 -1;0 0 0 0 1 1 1];fprintf("原有向图的关联矩阵为:\n")LW=mattransf(L,1);fprintf("由关联矩阵转换成邻接矩阵为:\n")W结果:原有向图的邻接矩阵为:A =0     0     0     0     01 0 0 0 01 1 0 0 00 0 1 0 01 0 1 1 0由邻接矩阵转换成关联矩阵为:W =-1    -1     0     0    -1     0     01 0 -1 0 0 0 00 1 1 -1 0 -1 00 0 0 1 0 0 -10 0 0 0 1 1 1原有向图的关联矩阵为:L =-1    -1     0     0    -1     0     01 0 -1 0 0 0 00 1 1 -1 0 -1 00 0 0 1 0 0 -10 0 0 0 1 1 1由关联矩阵转换成邻接矩阵为:W =0     0     0     0     01 0 0 0 01 1 0 0 00 0 1 0 01 0 1 1 0

matlab 关联矩阵,(案例)利用Matlab实践关联矩阵与邻接矩阵的转换相关推荐

  1. 用MATLAB编程正弦稳态相量图,matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析...

    matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析 课程设计任务书 学生姓名: 专业班级: 指导教师: 刘 新 华 工作单位:信息工程学院 题 目: 利用MATLAB对线性电路正弦稳态 ...

  2. 基于matlab的绘图设计,matlab课程设计---利用MATLAB仿真软件进行绘图

    matlab课程设计---利用MATLAB仿真软件进行绘图 课程设计任务书课程设计任务书 题题 目目 利用利用 MATLABMATLAB 仿真软件进行绘图仿真软件进行绘图 初始条件初始条件 仿真软件 ...

  3. matlab 多普勒效应,《利用MATLAB仿真多普勒效应.doc

    <利用MATLAB仿真多普勒效应 利用MATLAB仿真多普勒效应 某某某 摘 要:分析多普勒效应特性,建立数学模型,利用MATLAB软件对其进行仿真试验,进行定量分析,根据仿真试验结果绘制出听者 ...

  4. matlab segy文件,利用matlab实现segy格式数据的读写研究和分析.ppt

    利用matlab实现segy格式数据的读写研究和分析 2.SEGY数据格式 地震数据一般以地震道为单位进行组织,采用SEG-Y文件格式存储.SEG-Y格式是由SEG (Society of Explo ...

  5. matlab负荷分配程序,利用MATLAB工具箱进行机组负荷优化分配

    火电厂利用负荷优化分配算法,在全厂机组组合方式一定的情况下,根据各运行机组的煤耗特性,合理分配机组所带负荷,可以使全厂总的煤耗量最小[1],从国内外调度经验可知,热效率可提高1%~2.5%.优化算法代 ...

  6. 【Matlab 控制】利用 Matlab Function 绘制分段函数

    利用 Switch block 利用 Matlab Function block function [mean, stdev] = fcn(vals) % #codegen% calculates a ...

  7. 多元线性回归分析matlab实验报告,利用MATLAB进行多元线性回归.ppt

    <利用MATLAB进行多元线性回归.ppt>由会员分享,可在线阅读,更多相关<利用MATLAB进行多元线性回归.ppt(15页珍藏版)>请在人人文库网上搜索. 1.2.线性回归 ...

  8. 如何使用matlab的siso,利用Matlab内建程式SISODesignTool完成系统分析(Matlab61)开启.PDF...

    利用Matlab内建程式SISODesignTool完成系统分析(Matlab61)开启.PDF 利用 Matlab 內建程式 SISO Design Tool 完成系統分析(Matlab 6.1) ...

  9. matlab ann-bp分类器,利用matlab真的BP-ANN分类器设计.doc

    利用matlab真的BP-ANN分类器设计,ann分类器,bp神经网络分类器,bp分类器,贝叶斯分类器matlab,svm分类器matlab程序,matlab分类器,matlab分类器工具箱,soft ...

  10. matlab线圈磁场,利用Matlab计算螺线管内磁场分布研究.pdf

    利用Matlab计算螺线管内磁场分布研究.pdf ( ) 2010 12 688 Journal of Beijing Normal University ( Natural Science) 46( ...

最新文章

  1. QIIME 2用户文档. 13数据评估和质控Evaluating and controlling(2018.11)
  2. idea java doc 模板_Idea配置Javadoc
  3. QuartZ.net 常用配置说明
  4. php js后端渲染,webpack后端渲染详解
  5. Ubuntu 16.04 软件安装
  6. GridLayout将布局管理器设置为三行一列
  7. pygame安装_pygame教程(一):基础知识
  8. leetcode刷题日记-三个无重叠子数组的最大和
  9. 华为路由器isis配置实例_华为isis协议配置实例
  10. cmd从网站上下载指定文件
  11. xshell7个人免费版官方下载,无需破解,免激活
  12. 利用泰勒展开式实现sin(x),cos(x)函数
  13. Android 65536错误:Cannot fit requested classes in a single dex file
  14. 工作一周随笔记———一个即将踏入编程的少年
  15. html5 调用系统相册,iOS之H5调用系统相册相机浏览文件
  16. macbook pro m1 在 EXCEL 中安装 Excel2Latex
  17. 计算机会计和传统手工会计的区别,简要比较手工会计和计算机数据处理方式的区别...
  18. Sklearn-GBDT(GradientBoostingDecisionTree)梯度提升树
  19. Fliqlo.scr怎么安装
  20. 术业有专攻,让我们回归本位

热门文章

  1. CAM365|超高性价比CAM软件推荐
  2. 【转帖】lcd1602中文资料
  3. 设计师案头必备的配色灵感宝典软件\插件!
  4. TCP协议详解 (史上最全)
  5. bigemap功能介绍
  6. 3.黑客常用端口利用总结
  7. 设计模式:抽象工厂模式,结合类图秒懂!
  8. 设计模式:UML类图、策略模式、单例模式、工厂模式、观察者模式
  9. python实现诺基亚双人贪吃蛇小游戏
  10. 火狐扩展Firefox extension开发流程(学习记录)