目的:把a、b两个矩阵中的各20个元素进行凉凉配对,计算冲它们之间的时间,时间的计算公式在代码里,然后把计算结果储存在一个之前生成的20*20的零矩阵D里,但是现在D矩阵里面有了数字零出现,我知道是循环或者选择语句使用错误的问题还是思路的问题。希望能得到解答,谢谢!
a=[15 9 8
1 6 5
16 4 4
10 5 6
3 4 9
6 1 2
1 2 8
7 9 3
12 5 1
9 3 6
15 1 7
13 8 5
12 2 10
3 10 4
9 6 9
6 7 3
10 1 7
7 3 5
15 8 2
18 10 6];
b=[16 10 3
6 7 7
3 3 1
13 9 5
1 5 8
6 1 7
10 2 9
12 4 3
7 7 2
15 2 5
13 1 6
18 10 10
3 2 7
9 6 1
6 9 6
4 7 8
12 2 2
1 9 5
7 3 3
13 6 1];
x=size(b,1);
%定义一个可以存放各对时间的矩阵
row=size(a,1);
D=zeros(row,row);
for i = 1:x
for j = 1:x
if b(j,3) == a(i,3) %同层的情况
te1=a(i,3);
if a(i,1) == 1||a(i,1) == 4||a(i,1) == 7||a(i,1) == 10||a(i,1) == 13||a(i,1) == 16 %计算tr1的过程
tr1=a(i,1)+1+1.2*a(i,2);
elseif a(i,1) == 3||a(i,1) == 6||a(i,1) == 9||a(i,1) == 12||a(i,1) == 15||a(i,1) == 18
tr1=a(i,1)-1+1.2*a(i,2);
end
if (a(i,1) == 1||a(i,1) == 4||a(i,1) == 7||a(i,1) == 10||a(i,1) == 13||a(i,1) == 16) && (b(j,1) == 1||b(j,1) == 4||b(j,1) == 7||b(j,1) == 10||b(j,1) == 13||b(j,1) == 16) %计算tr2的过程:第一部分
if a(i,1) == b(j,1)
tr2=2+1.2*abs(a(i,2)-b(j,2));
else
tr2=2+1.2*a(i,2)+1.2*b(j,2)+abs(a(i,1)-b(j,1));
end
end
if (a(i,1) == 1||a(i,1) == 4||a(i,1) == 7||a(i,1) == 10||a(i,1) == 13||a(i,1) == 16) && (b(j,1) == 3||b(j,1) == 6||b(j,1) == 9||b(j,1) == 12||b(j,1) == 15||b(j,1) == 18) %计算tr2的过程:第二部分
if b(j,1)-a(i,1)==2
tr2=2+1.2*abs(a(i,2)-b(j,2));
elseif a(i,1)>b(j,1)
tr2=4+1.2*a(i,2)+1.2*b(j,2)+a(i,1)-b(j,1);
elseif b(j,1)-a(i,1)>2
tr2=b(j,1)-a(i,1)+1.2*a(i,2)+1.2*b(j,2);
end
end
if (a(i,1) == 3||a(i,1) == 6||a(i,1) == 9||a(i,1) == 12||a(i,1) == 15||a(i,1) == 18) && (b(j,1) == 1||b(j,1) == 4||b(j,1) == 7||b(j,1) == 10||b(j,1) == 13||b(j,1) == 16) %计算tr2的过程:第三部分
if a(i,1)-b(j,1)==2
tr2=2+1.2*abs(a(i,2)-b(j,2));
elseif a(i,1)-b(j,1)>2
tr2=1.2*a(i,2)+1.2*b(j,2)+a(i,1)-b(j,1);
elseif a(i,1)<b(j,1)
tr2=1.2*a(i,2)+1.2*b(j,2)+4-a(i,1)+b(j,1);
end
end
if (a(i,1) == 3||a(i,1) == 6||a(i,1) == 9||a(i,1) == 12||a(i,1) == 15||a(i,1) == 18) && (b(j,1) == 3||b(j,1) == 6||b(j,1) == 9||b(j,1) == 12||b(j,1) == 15||b(j,1) == 18) %计算tr2的过程:第四部分
if a(i,1)==b(j,1) %情况四的第一种分类
tr2=2+1.2*abs(a(i,2)-b(j,2));
else
tr2=2+1.2*a(i,2)+1.2*b(j,2)+abs(a(i,1)-b(j,1));
end
end
%tr3
if b(j,1) == 1||b(j,1) == 4||b(j,1) == 7||b(j,1) == 10||b(j,1) == 13||b(j,1) == 16
tr3=1+1.2*b(j,2)+b(j,1);
elseif b(j,1) == 3||b(j,1) == 6||b(j,1) == 9||b(j,1) == 12||b(j,1) == 15||b(j,1) == 18
tr3=1.2*b(j,2)+b(j,1)-1;
end
T=2*te1+tr1+tr2+tr3; %一个距离的各个部分已经完成,现在进行相加
else %不同层的情况
te1=a(i,3);
te2=abs(a(i,3)-b(j,3));
if b(j,1) == 1||b(j,1) == 4||b(j,1) == 7||b(j,1) == 10||b(j,1) == 13||b(j,1) == 16
tr3=1.2*b(j,2)+b(j,1)+1;
elseif b(j,1) == 3||b(j,1) == 6||b(j,1) == 9||b(j,1) == 12||b(j,1) == 15||b(j,1) == 18
tr3=1.2*b(j,2)+b(j,1)-1;
end
te3=b(j,3);
if a(i,1) == 1||a(i,1) == 4||a(i,1) == 7||a(i,1) == 10||a(i,1) == 13||a(i,1) == 16 %计算tr1的过程
tr1=a(i,1)+1+1.2*a(i,2);
elseif a(i,1) == 3||a(i,1) == 6||a(i,1) == 9||a(i,1) == 12||a(i,1) == 15||a(i,1) == 18
tr1=a(i,1)-1+1.2*a(i,2);
end
T=max(max(te1+te2,2*tr3)+te3,2*tr1);
D(i,j)=T; %对计算结果在D中进行储存
end
end
end
这是运行结果:
还有我不理解的就是我设定的tr1 tr2 te1 te2这些变量应该是变化的而不应该有一个定值啊?多谢解答
希望各位能给予解答
没看懂你这个时间是咋计算的,还有为啥matlab不用写end?可以考虑用矢量化编程