㈠ MATLAB问题——关于“最短路径”
可以用生物信息工具箱(Bioinformatics Toolbox)的函数graphallshortestpaths求解。
实例如下:
cm=round(rand(13)*80)*0.1;
I=randperm(13^2);
cm(I(1:145))=0;
UG=sparse(tril(cm+cm'));
bg=biograph(UG,arrayfun(@(i){int2str(i)},1:size(cm,1)),'ShowArrows','off','ShowWeights','on');
view(bg)
p=graphallshortestpaths(UG,'directed',false);
num2str(p,'%6g')
其中,前4行用于随机生成一个无向图的数据(懒得输入你图中的数了),第5-6行用于显示图形,最后两行显示各节点之间的最短路径。
以下是某一次随机运行得到的结果:
087.510.78.312.47.3101.86.44.76.66.7
8014.42.76.96.66.929.37.83.36.26.3
7.514.4017.115.87.812.916.49.313.812.214.114.2
10.72.717.108.19.34.20.79.75.165.85.9
8.36.915.88.1093.98.89.44.83.65.55.6
12.46.67.89.3905.18.610.669.66.76.8
7.36.912.94.23.95.104.95.50.94.51.61.7
10216.40.78.88.64.9010.45.85.36.56.6
1.89.39.39.79.410.65.510.404.664.84.9
6.47.813.85.14.860.95.84.605.42.52.6
4.73.312.263.69.64.55.365.402.93
6.66.214.15.85.56.71.66.54.82.52.900.1
6.76.314.25.95.66.81.76.64.92.630.10
㈡ matlab这行代码:P=biograph(G,[],'ShowArrows','on','ShowWeights','on');
这个抄问题其实你只要稍微查一下帮助就明白了。
biograph 是生物信息工具箱(Bioinformatics Toolbox)里的函数,用于创建有向图对象,基本调用格式是:
BGobj=biograph(CMatrix,NodeIDs,'PropertyName',PropertyValue,...)
其中第一个参数CMatrix是图的连结矩阵,第二个参数NodeIDs是节点的标识名称,后面是成对的属性名/属性值用于指定图的相关选项。
在参数说明部分,有一个专门的注解:
Note You must specify NodeIDs if you want to specify property name/value pairs. Set NodeIDs to [] to use the default values of the row/column numbers.
意思就是说,如果要用到后面的那些属性选项(比如你现在调用的那个语句),就必需指定第二个参数NodeIDs;而如果不知道该怎样指定,那就将其设为[],这种情况下,会使用默认的行(列)序号作为节点名。
㈢ matlab课堂作业关于随机点的一些问题
问题分析
1、【随机生成点】:直接用rand函数生成点的坐标;
2、【点与点随机连成边】:用rand函数生成N*N矩阵,大于某设定门限值(例如0.8)则连边;
3、【计算任意两点间的最短路径】,分两种做法:
(1)随机取两点,计算最短路径,用graphshortestpath函数;
(2)把任意两点间的最短路径全部计算出来,形成一个矩阵,用graphallshortestpaths函数。
4、【计算出最小生成树】:用graphminspantree函数。
其中,graphshortestpath、graphallshortestpaths、graphminspantree均为生物信息工具箱(Bioinformatics Toolbox)中的函数。
参考代码
匆忙间编写了一段代码,供参考。
%随机生成点的数量
N=10;
%生成点的坐标
x=rand(N,1);y=rand(N,1);
%随机生成连接关系(随机数大于门限值为有连接)
L=rand(N,N)>0.8;
%计算各节点距离(保留两位小数)
D=round(squareform(pdist([xy]))*100)/100;
%用稀疏矩阵表示图
DG=sparse(D.*L);
%转换为无向图
UG=tril(DG+DG');
%显示图
view(biograph(UG,[],'ShowArrows','off','ShowWeights','on'));
%计算最小生成树
ST=graphminspantree(UG);
view(biograph(ST,[],'ShowArrows','off','ShowWeights','on'))
%计算所有节点间的最小路径(两两对应)
dist=graphallshortestpaths(UG,'directed',false);
disp(num2str(dist,'%.2f'))
%计算任意(随机选择)两个节点间的最小路径
i=ceil(rand*N);j=ceil(rand*N);
[dist,path,pred]=graphshortestpath(UG,i,j,'directed',false);
%突出显示最小路径
h=view(biograph(UG,[],'ShowArrows','off','ShowWeights','on'));
set(h.Nodes(path),'Color',[10.40.4])
fowEdges=getedgesbynodeid(h,get(h.Nodes(path),'ID'));
revEdges=getedgesbynodeid(h,get(h.Nodes(fliplr(path)),'ID'));
edges=[fowEdges;revEdges];
set(edges,'LineColor',[100])
set(edges,'LineWidth',1.5)
运行结果
1、随机生成的无向图:
0.000.701.381.370.690.750.570.060.140.29
0.700.001.721.520.851.090.850.640.840.44
1.381.720.002.471.650.630.871.421.421.39
1.371.522.470.001.491.841.601.311.511.08
0.690.851.651.490.001.020.780.640.830.41
0.751.090.631.841.020.000.240.790.790.76
0.570.850.871.600.780.240.000.550.550.52
0.060.641.421.310.640.790.550.000.200.23
0.140.841.421.510.830.790.550.200.000.43
0.290.441.391.080.410.760.520.230.430.00
㈣ 图论最短路问题的Dijkstra算法与Matlab程序
请先检查你matlab的版本,这里提示没有找到该函数。很可能是因为内matlab的版本太老。
由于这个容函数是计算生物学工具箱的,估计早期的版本没有这个工具箱。
我这个函数是在2008版本下编写的,用2031a版的是没问题的。
ps:matlab每一版都会增减和优化一些函数,建议尽可能的保持高版本。
㈤ 为什么我的matlab中没有biograph函数呢
您的Matlab版本是,由于这个函数时计算生物学工具箱的,估计早起帮本没有这个工具箱