MATLAB遍历两个矩阵进行两两配对出错

目的:把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?可以考虑用矢量化编程