matlab 求助
比如一个矩阵A=5789,数值的意思是两点间的距离比如5记录了第一个点到第二个点的距离为5,7是第二个点到第三个点的距离,一次类推。想得到一个矩阵B,记录了每两个点的距离...
比如一个矩阵A=5 7 8 9 ,数值的意思是两点间的距离 比如5记录了第一个点到第二个点的距离为5,7是第二个点到第三个点的距离,一次类推。想得到一个矩阵B,记录了每两个点的距离小于20。比如第一个点到第三个点距离为5+8小于20,第一个点到第四个点的距离为5+7+8大于20,所以B矩阵的一个数值为1。求matlab 实现,求大神帮忙,不知道说的明白否。
展开
展开全部
%由你给的矩阵A中四个元素知有5个点,按你的意思,构造这5个点的邻接矩阵A1;
A1=zeros(5,5);
A1(1,2)=5;
A1(2,3)=7;
A1(3,4)=8;
A1(4,5)=9;
A1=A1+A1';
A1(find(A1==0))=inf;
%用flody算法求任意两点的距离,构成矩阵A2,flody算法的matlab程序自己网上去搜,继续下面的
A2=[
10 5 12 20 29
5 10 7 15 24
12 7 14 8 17
20 15 8 16 9
29 24 17 9 18
];
%你后面的没说清楚,我的理解是小于20的记为1,大于或等于20的记为0,
%如理解错误,稍微修改下即可
B=A2<20
%求的矩阵B为
B=[
1 1 1 0 0
1 1 1 1 0
1 1 1 1 1
0 1 1 1 1
0 0 1 1 1
]
以上直接可以看出来哪些点之间的距离小于20了
flody算放如下,做成M文件后,在命令窗直接调用
function [D,path,min1,path1]=floyd(a,start,terminal)
D=a;n=size(D,1);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
if nargin==3
min1=D(start,terminal);
m(1)=start;
i=1;
path1=[ ];
while path(m(i),terminal)~=terminal
k=i+1;
m(k)=path(m(i),terminal);
i=i+1;
end
m(i+1)=terminal;
path1=m;
end
A1=zeros(5,5);
A1(1,2)=5;
A1(2,3)=7;
A1(3,4)=8;
A1(4,5)=9;
A1=A1+A1';
A1(find(A1==0))=inf;
%用flody算法求任意两点的距离,构成矩阵A2,flody算法的matlab程序自己网上去搜,继续下面的
A2=[
10 5 12 20 29
5 10 7 15 24
12 7 14 8 17
20 15 8 16 9
29 24 17 9 18
];
%你后面的没说清楚,我的理解是小于20的记为1,大于或等于20的记为0,
%如理解错误,稍微修改下即可
B=A2<20
%求的矩阵B为
B=[
1 1 1 0 0
1 1 1 1 0
1 1 1 1 1
0 1 1 1 1
0 0 1 1 1
]
以上直接可以看出来哪些点之间的距离小于20了
flody算放如下,做成M文件后,在命令窗直接调用
function [D,path,min1,path1]=floyd(a,start,terminal)
D=a;n=size(D,1);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
if nargin==3
min1=D(start,terminal);
m(1)=start;
i=1;
path1=[ ];
while path(m(i),terminal)~=terminal
k=i+1;
m(k)=path(m(i),terminal);
i=i+1;
end
m(i+1)=terminal;
path1=m;
end
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询