在没有重复值的情况下在坐标系上创建路径(Matlab)

时间:2013-02-14 03:56:02

标签: matlab coordinate

我正在尝试在Matlab上的坐标系上创建一个随机的“路径”。我这样做是通过创建一个for循环,在每次迭代中,它在一个初始值为零的矩阵上填充一个新值。

例如,我有5个点,所以我有一个初始矩阵a=[0 0 0 0 0; 0 0 0 0 0](row1 = x值,row2 = y值)。

路径可以向右/向左或向上/向下移动(无对角线)。在我的for循环中,我调用randi(4)并说“if randi(4) = 1”,然后将1点向左移动(x-1)。如果randi(4) = 2,则移动在右边(x + 1)等。“

问题是您不能多次访问特定点。例如,路径可以从(0,0)开始,然后转到(0,1),然后转到(1,1),然后转到(1,0),然后它不能回到(0,0)。在我目前的代码中,我没有这个限制所以我希望我能得到一些建议..

因为在这个例子中,矩阵看起来像a=[0 0 1 1 0; 0 1 1 0 0]

我在考虑从矩阵a上的每一列中减去每个新坐标(此处为(0,0)),如果任何一列给出两行的零值(因为它是从自身减去的相同坐标) ),然后返回一步让randi(4)再次运行..但

  1. 我怎么能告诉它“退一步”(或两三个)?
  2. 如何将一列与已建立的矩阵的每一列进行比较?
  3. 这只是一个想法..在Matlab中有任何函数可以让我这样做吗?或者比较矩阵中两列是否相同?

2 个答案:

答案 0 :(得分:1)

回答你的问题。

  1. 返回 - 我想这意味着只丢掉矩阵中最右边的列。

  2. 查找是否存在,您可以使用ismember

  3. 不幸的是它只需要行,所以你需要转置。片段:

    a = [1:10; repmat(1:2,1,5)]'
    test = ismember(a,[3,2],'rows')
    any(test) % not found
    test = ismember(a,[3,1],'rows')
    any(test) % found
    

    当然,你的想法也会奏效。

答案 1 :(得分:0)

我可以回答这个问题:

  

如何将一列与已经的每列进行比较   建立矩阵?

使用两个不同的矩阵。使用setdiff()函数比较它们:http://www.mathworks.com/help/matlab/ref/setdiff.html