这里有一点一定要注意,因为为无向图,因此邻接矩阵一定要是关于对角线对称的,即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