2017-12-08 6 views
1

私は2Dグラフ上に10個のランダムな点があり、各点はバネで結ばれていると仮定します。だから、すべてのポイントは反復ごとに力の中心に収束しています。J言語でのループ^:

私がしようとしているのは、各反復後に既存のベクトルセットにランダムベクトルを追加するループです。

だから、

v=: <(? 10 2 $ 20) NB. 10 random vectors 
n=: <(? 1 2 $ 20) NB. new random vector 
force v    NB. force function moves the vectors toward to the center 
add n    NB. add n into v, then #v = 11 
force v 
add n 
force v 
add n 
... 

から始まり、私はまだない難しいことのように思えるする力の機能に取り組んでいますが、私は本当にアドオン部に捕まってしまいました。誰かが私にこれを助けることができますか? 私の最終的な目標は、100回のような力のセクションを繰り返すループを繰り返すことです。

ありがとう!

+1

私はあなたがボクシングせずに行うことができますと思われるが。箱を避ける方が良いです。 – Eelvex

答えて

2

私は、ボックスが冗長に見えるとEelvexに同意します。おそらく、あなたが達成しようとしていることを考えていくうえで、以下のことが有用な方法でしょうか?

new=: 2 [email protected]$ 20"_  NB. generates random, length 2 vector 
    add=: ] , new   NB. appends new to right argument 
    add^:(3) Init=: 4 2 [email protected]$ 20 
11 9 
9 16 
9 13 
0 17 
3 3 
7 17 
6 6 

あなたはあまりにも反復ごとにこれを適用することができforce動詞がある場合:

force=: -:   NB. example verb (halves right argument) 
    [email protected]^:(5) Init=: 4 2 [email protected]$ 20 NB. 5 iterations 
0.46875 0.3125 
0.15625 0.53125 
0.28125 0.53125 
0.5625 0.53125 
0.59375 0.59375 
    1.125 0.375 
    0.125 2.375 
    2.25  3.5 
     5  9.5 
1

あなたがしたいことがアンボックスvnの場合は,(追加)のように見えます。これを行う方法は、それぞれ&.(下位)と>(下位)を使用する&.>を使用することです。

, eachアペンドを実行してから、終了します。

v=.<(? 10 2 $ 20) 
    v 
+-----+ 
| 9 11| 
| 1 4| 
| 8 3| 
| 3 12| 
| 5 4| 
| 7 11| 
|10 11| 
| 9 10| 
| 0 8| 
| 6 16| 
+-----+ 
    n=: <(? 1 2 $ 20) 
    n 
+----+ 
|13 8| 
+----+ 
    n , each v 
+-----+ 
|13 8| 
| 9 11| 
| 1 4| 
| 8 3| 
| 3 12| 
| 5 4| 
| 7 11| 
|10 11| 
| 9 10| 
| 0 8| 
| 6 16| 
+-----+ 
    each 
&.> 
+1

レベル「0」で '、'を適用する: 'v、L:0 n' – Eelvex

関連する問題