1、数学建模实验P.172 实验二 最短电缆长度问题设有九个节点,它们的坐标分别为 a(0,15), b(5,20), c(16,24), d(20,20), e(33,25), f(23,11), g(35,7), h(25,0), i(10,3)任意两个节点之间的距离为: (,)=|+|问:怎样连接电缆,使每个节点都连通,且所用的总电缆的长度为最短.问题分析:本题研究的是一个最优化问题。问题中给出了 9 个节点坐标,需要从复杂的连接方案中选出最短的电缆连接路线。要设计方案求最短电缆长度,可先求出任意两点间的距离,然后在构造边权矩阵,用 prim 算法求电缆线的最优连通方案。符号说明:W:任意两
2、点之间的距离矩阵 X:节点的横坐标 Y:节点的纵坐标解:先计算出任意两点间的距离;W=;X = 0 5 16 20 33 23 35 25 10; Y = 15 20 24 20 25 11 7 0 3; N=length(X); for i=1:N for j=1:N W=W;(abs(X(i)-X(j)+abs(Y(i)-Y(j) end end W输出结果截图为:将结果整理列表如下:w(I,j) a b c d e f g h ia 0 10 25 25 43 27 43 43 40b 0 15 15 33 27 43 40 22c 0 8 18 20 36 33 27d 0 18 12
3、 28 25 27e 0 24 20 33 21f 0 16 13 29g 0 17 29h 0 18i 0用 prim 算法求电缆线的最优连通方案;运行结果截图为:分析结果可知:最小生成树的边集合为(1,2) , (2,3) ,(3,4),(4,6) , (6,8) ,(6,7) ,(3,5),(8,9)即用 prime 算法求出的最优电缆连接方案为:(a,b) , (b,c ) , (c,d) , (d,f) , (f,h) ,(f,g),(c,e),(h,i)。P186 实验一 求最短路问题求图 14.9 所示 有向网络中自点 1 到点 6 的最短有向路问题分析:用floyde 算法算出
4、任意两点之间的最短的距离。符号说明:D:任意两个点之间的最短距离 n:迭代次数解:function D,path=floyd(a)n=size(a,1);%设置 D 和 Path 的初值D=a;path=zeros(n,n);for i=1:nfor j=1:nif D(i,j)=infpath(i,j)=j; %j 是 i 的后继点endendend%做 n 次迭代 ,每次迭代均更新 D(i,j)和 path(i,j)for k=1:nfor i=1:nfor j=1:nif D(i,k)+D(k,j)D(i,j)D(i,j)=D(i,k)+D(k,j); path(i,j)=path(i,
5、k); endendendend在 MATLAB 命令窗口键入:a=0 5 inf 3 inf inf;inf 0 4 2 inf inf;inf inf 0 2 4 3;inf inf inf 0 5 inf;inf inf inf inf 0 2;inf inf inf inf inf 0;D,path=floyd(a)运行结果截图为:D =0 5 9 3 8 10Inf 0 4 2 7 7Inf Inf 0 2 4 3Inf Inf Inf 0 5 7Inf Inf Inf Inf 0 2Inf Inf Inf Inf Inf 0path =1 2 2 4 4 40 2 3 4 4 30 0 3 4 5 60 0 0 4 5 50 0 0 0 5 60 0 0 0 0 6由运行结果得:因为 path(1,6)4,意味着顶点 1 的后继点为 4, path(4,6)5 ,从而顶点 4 的后继点为 5,同理,因 path(5,6)6,从而顶点 5 的后继点为 6,故 1456 便是顶点 1 到顶点 6 的最短路径。所以,顶点 1 到顶点 6最短路径长度为 D(1,6)=10 :即最短路径:1456。即:Path(1,6)/4 Path(4,6)/5 Path(5,6)/6 Path(6,6)/6