与简单的循环冲突,以保持matlab中行开关的记录

时间:2014-08-19 03:50:01

标签: matlab

我做了一个循环来跟踪循环开关。

C = zeros(i,2);

for q=1:i

    if any(A(q,:)~= K(q,:))

        %Save the row at which B is different(aka Ending Position)
        C(q,2) = q;
        for a=1:i
            if A(a,:) == K(q,:)
            C(q,1) = a;
            end;
        end
    end

end

AB是两个矩阵。 C是存储交换机的那个。但由于某种原因,C的最后一行有一个3,这是不应该发生的,因为[2 3 1] = [2 3 1]

A =

     1     3     1
     3     2     1
     2     3     1
K =

    3.0000    2.0000    1.0000
    1.0000    3.0000    1.0000
    2.0000    3.0000    1.0000

C =

     2     1
     1     2
     0     3

1 个答案:

答案 0 :(得分:1)

看一下这句话:

if A(a,:) == K(q,:)
    C(q,1) = a;
end

如果A(a,:)K(q,:)之间的所有元素都为真,我怀疑您只希望发生此声明。因此,您必须使用all命令来确保这是真的。通过省略all,如果这两个向量之间至少有一个元素为真,则此语句为真,这解释了意外行为。就这样:

if all(A(a,:) == K(q,:))
    C(q,1) = a;
end

使用您的示例输入,这是我为C获得的:

C =

 2     1
 1     2
 0     0

最后一行[0 0]表示AK之间的第三行相同且未交换,因为C的最后一行没有分配任何内容在那个循环中。