Matlab 求图的直径

Matlab 求图的直径,matlab,graph,Matlab,Graph,在MATLAB中,我将点随机均匀地放入平方[0,1]X[0,1]。如果两点之间的距离小于0.25,我将在两点之间放置一条边。执行此操作的代码(下面是绘制结果图的代码) num_Rx=50 Rx_位置=兰德(数量Rx,2); %在范数为0.25的两对之间生成边。 调整矩阵=零(num_Rx,num_Rx); 对于i=1:num\u Rx 对于j=i+1:num_Rx 距离=标准(Rx_位置(i,:)-Rx_位置(j,:); 如果距离

在MATLAB中,我将点随机均匀地放入平方[0,1]X[0,1]。如果两点之间的距离小于0.25,我将在两点之间放置一条边。执行此操作的代码(下面是绘制结果图的代码)

num_Rx=50
Rx_位置=兰德(数量Rx,2);
%在范数为0.25的两对之间生成边。
调整矩阵=零(num_Rx,num_Rx);
对于i=1:num\u Rx
对于j=i+1:num_Rx
距离=标准(Rx_位置(i,:)-Rx_位置(j,:);
如果距离<0.25;
调整矩阵(i,j)=1;
结束
结束
结束
图形
gplot(调整矩阵、接收位置)
i、 这是一个无向图,所有边权重都等于1

要查找直径,我要调用graphallshortestpath(),并获取返回的最大值(直径是最长最短路径)

然而,我调用这个函数有困难-我不知道如何从我的邻接矩阵和/或我的节点位置列表中进行类似示例的调用。具体来说,我不理解任何示例,给出的matlab代码如何与给出的数据相对应


我该怎么做呢。

看来您所缺少的只是将邻接矩阵转换为稀疏矩阵。这将为您提供您想要的:

adj_sparse = sparse(adj_matrix);
distances = graphallshortestpaths(adj_sparse);

% if you don't care which nodes produce the
% longest shortest path, omit long_ind & long_sub
[diameter, long_ind] = max(distances(:));
long_sub = ind2sub(size(distances), long_ind);

谢谢,这给了我Inf作为直径,尽管我的图形是完全连接的。当然,有一个完全连通的图意味着直径是有限的?我必须承认,我没有预料到这一点,即使两个不相连的节点之间的路径必然是无限的。您必须限制
距离
以仅包含有限的值,使用
adj_sparse = sparse(adj_matrix);
distances = graphallshortestpaths(adj_sparse);

% if you don't care which nodes produce the
% longest shortest path, omit long_ind & long_sub
[diameter, long_ind] = max(distances(:));
long_sub = ind2sub(size(distances), long_ind);