1

Matlab の座標系でランダムな「パス」を作成しようとしています。これを行うには、反復ごとに、初期値がゼロの行列に新しい値を入力する for ループを作成します。

たとえば、5 つのポイントがあるので、初期行列a=[0 0 0 0 0; 0 0 0 0 0](row1 = x 値、row2 = y 値) があります。

パスは左右または上下に移動できます (対角線なし)。私の for ループでは、 「 =1 の場合は左に 1 ポイント移動 (x-1)。=2 の場合は右に移動 (x+1) など」のrandi(4)ように呼び出して言います。randi(4)randi(4)

問題は、特定のポイントを複数回訪問できないことです。たとえば、パスは (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. 「1ステップ戻る」(または2つまたは3つ)ようにするにはどうすればよいですか?
  2. 1 つの列を、既に確立されているマトリックスの各列とどのように比較しますか?
  3. これは単なるアイデアでした..これを可能にするMatlabの関数はありますか? または、マトリックス内で 2 つの列が同じかどうかを比較しますか?
4

2 に答える 2

1

あなたの質問に。

  1. 戻る-これは、マトリックスの右端の列を破棄することを意味すると思います。

  2. それが存在するかどうかを見つけるためにあなたは使うことができますismember

残念ながら、行しか必要ないため、転置する必要があります。スニペット:

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

もちろん、あなたのアイデアもうまくいくでしょう。

于 2013-02-14T09:22:39.403 に答える
0

私はこれに答えることができます:

1 つの列を、既に確立されているマトリックスの各列とどのように比較しますか?

2 つの異なるマトリックスを使用します。setdiff() 関数を使用してそれらを比較してください: http://www.mathworks.com/help/matlab/ref/setdiff.html

于 2013-02-14T04:21:52.877 に答える