matlab用邻接矩阵画加权无向图

Xanthe ·
更新时间:2024-09-21
· 867 次阅读

这里有一点一定要注意,因为为无向图,因此邻接矩阵一定要是关于对角线对称的,即Aij=Aji(且对角线上元素Aii=0),两点之间相互无向连接,有向图可以不为对称矩阵(有方向)

方法及函数:

1.推荐matlab一个图论很好用的包Graph and Network Algorithms,官网有函数介绍https://www.mathworks.com/help/matlab/graph-and-network-algorithms.html

这里搬一个知乎很不错评论的demo,仅供参考(参考链接文末一起放出):

%% Matlab 无向图 % 生成数据,A和邻接矩阵的形势相似 A = magic(10); A = dist(A);%计算点之间的欧氏距离 index = 1:size(A,1); names = {}; for ii = index names{ii} = num2str(index(ii)); end % 定义图像G G = graph(A,names) %% 绘制图像 figure plot(G,'rs-','LineWidth',2,'MarkerSize',10)

还可以改变各个节点之间的绘图方式

%% 绘制图像 定义图像的图层为圆形 figure plot(G,'ro-','Layout','circle','LineWidth',2,'MarkerSize',10)

如果每个节点是有坐标的,也可以指定节点在空间中的位置

%% 指定每个点的坐标 x = randperm(10) y = randperm(20,10) figure p = plot(G,'ro-','LineWidth',2,'MarkerSize',10) p.XData = x P.YData = y

2.使用gplot()

gplot(A, xy): A表示邻接矩阵,xy表示每个点的位置

如下定义一个函数 netplot,将每个点均匀地放置在单位圆上以画出邻接矩阵:

function netplot(G) n = size(G, 1); [x y] = pol2cart((0:n-1)*2*pi/n, 1); gplot(G, [x' y'], '-o'); end

[X,Y] = POL2CART(TH,R)将极坐标(角度TH和半径R)存储的数据中相应的元素转换到笛卡儿坐标X,Y。数组TH和R必须大小相同(或者二者皆可标量),TH必须是弧度值。 

[X,Y,Z] = POL2CART(TH,R,Z)将圆柱坐标(角度TH、半径R和高度Z)存储的数据中相应的元素转换到笛卡儿坐标X,Y,Z。数组TH、R和Z必须大小相同(或者其中任何一个皆可标量),TH必须是弧度值。

调用如示:

a = [0 1 1 0; 1 0 1 0; 1 0 0 1; 0 0 1 0]; netplot(a);

输出如图所示:

参考网址:

https://www.zhihu.com/question/275337007

https://zhidao.baidu.com/question/680827699342938012.html


作者:nice_evil



邻接矩阵 matlab 矩阵

需要 登录 后方可回复, 如果你还没有账号请 注册新账号