matlab!!!!
我定义了这样一个m函数如下
function [D,path]=floyd(a)
n=size(a,1);
D=a;
path=zeros(n,n);
for i=1:n
for j=1:n
if D(i,j)~=inf
path(i,j)=j;
end
end
end
for k=1:n
for i=1:n
for j=1:n
if D(i,k)+D(k,j)<D(i,j)
D(i,j)=D(i,k)+D(k,j);
path(i,j)=path(i,k);
end
end
end
end
%配合floyd算法的后续程序,s为源点,t为宿点
%L为长度,R为路由
function [L,R]=router(D,path,s,t)
L=zeros(0,0);
R=s;
while 1
if s==t
L=fliplr(L);
L=[0,L];
L=L(end);
return
end
L=[L,D(s,t)];
R=[R,path(s,t)];
s=path(s,t);
if s==0
return
end
end
在matlab中调用时命令是这样的
[D,path]=floyd(a)
a=[0 15 ∞ ∞ 24 ∞ 18 ∞ ∞ ∞ ∞ ∞;
15 0 22 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞;
∞ 22 0 18 16 ∞ ∞ ∞ 20 ∞ ∞ ∞;
∞ ∞ 18 0 ∞ 12 ∞ ∞ ∞ ∞ ∞ ∞;
24 ∞ 16 ∞ 0 ∞ ∞ 12 24 ∞ ∞ ∞;
∞ ∞ ∞ 12 ∞ 0 ∞ ∞ 12 ∞ ∞ 22;
18 ∞ ∞ ∞ ∞ ∞ 0 15 ∞ 22 ∞ ∞;
∞ ∞ ∞ ∞ 12 ∞ 15 0 30 ∞ 25 ∞;
∞ ∞ 20 ∞ 24 12 ∞ 30 0 ∞ 19 19;
∞ ∞ ∞ ∞ ∞ ∞ 22 ∞ ∞ 0 19 ∞ ;
∞ ∞ ∞ ∞ ∞ ∞ ∞ 25 19 19 0 21;
∞ ∞ ∞ ∞ ∞ 22 ∞ ∞ 19 ∞ 21 0];
错误 提示是??? Undefined function or variable 'a'.
求高手帮忙修正正确一下!!!!谢谢
如果实在错得严重,帮忙写一个弗洛伊德的matlab完整算法啊~~~
(我的matlab是7.0的)
答案:a=[0 15 inf inf 24 inf 18 inf inf inf inf inf;
15 0 22 inf inf inf inf inf inf inf inf inf;
inf 22 0 18 16 inf inf inf 20 inf inf inf;
inf inf 18 0 inf 12 inf inf inf inf inf inf;
24 inf 16 inf 0 inf inf 12 24 inf inf inf;
inf inf inf 12 inf 0 inf inf 12 inf inf 22;
18 inf inf inf inf inf 0 15 inf 22 inf inf;
inf inf inf inf 12 inf 15 0 30 inf 25 inf;
inf inf 20 inf 24 12 inf 30 0 inf 19 19;
inf inf inf inf inf inf 22 inf inf 0 19 inf ;
inf inf inf inf inf inf inf 25 19 19 0 21;
inf inf inf inf inf 22 inf inf 19 inf 21 0];
>> [D,path]=floyd(a)
D =
0 15 37 55 24 60 18 33 48 40 58 67
15 0 22 40 38 52 33 48 42 55 61 61
37 22 0 18 16 30 43 28 20 58 39 39
55 40 18 0 34 12 61 46 24 62 43 34
24 38 16 34 0 36 27 12 24 49 37 43
60 52 30 12 36 0 57 42 12 50 31 22
18 33 43 61 27 57 0 15 45 22 40 61
33 48 28 46 12 42 15 0 30 37 25 46
48 42 20 24 24 12 45 30 0 38 19 19
40 55 58 62 49 50 22 37 38 0 19 40
58 61 39 43 37 31 40 25 19 19 0 21
67 61 39 34 43 22 61 46 19 40 21 0
path =
1 2 2 2 5 5 7 7 5 7 7 5
1 2 3 3 3 3 1 1 3 1 3 3
2 2 3 4 5 4 5 5 9 9 9 9
3 3 3 4 3 6 3 3 6 6 6 6
1 3 3 3 5 9 8 8 9 8 8 9
9 4 4 4 9 6 9 9 9 9 9 12
1 1 8 8 8 8 7 8 8 10 8 8
7 7 5 5 5 9 7 8 9 7 11 11
5 3 3 6 5 6 8 8 9 11 11 12
7 7 11 11 7 11 7 7 11 10 11 11
8 9 9 9 8 9 8 8 9 10 11 12
9 9 9 6 9 6 11 11 9 11 11 12
其他:a的输入有误,将∞改为inf,如下:
a=[0 15 inf inf 24 inf 18 inf inf inf inf inf;
15 0 22 inf inf inf inf inf inf inf inf inf;
inf 22 0 18 16 inf inf inf 20 inf inf inf;
inf inf 18 0 inf 12 inf inf inf inf inf inf;
24 inf 16 inf 0 inf inf 12 24 inf inf inf;
inf inf inf 12 inf 0 inf inf 12 inf inf 22;
18 inf inf inf inf inf 0 15 inf 22 inf inf;
inf inf inf inf 12 inf 15 0 30 inf 25 inf;
inf inf 20 inf 24 12 inf 30 0 inf 19 19;
inf inf inf inf inf inf 22 inf inf 0 19 inf ;
inf inf inf inf inf inf inf 25 19 19 0 21;
inf inf inf inf inf 22 inf inf 19 inf 21 0] 函数中有用到a,所以要对a赋值在调用函数之前的
上一个:求助matlab高手,用nlinfit曲线拟合时报错!??? Error using ==> mrdivide Matrix dimensions must agree.
下一个:我想用matlab的GUI创建一个窗口并且能与单片机进行数据交换,请高手指点一下,思路步骤