循环使用J语言^:

时间:2017-12-08 00:16:12

标签: j

假设我在2D图上有10个随机点,每个点都用弹簧连接。因此,每次迭代时,每个点都会收敛到力的中心。

我想要做的是在每次迭代后向现有矢量集添加随机矢量的循环。

所以它从

开始
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次

谢谢!

2 个答案:

答案 0 :(得分:2)

您想要做的就是取消装箱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 :(得分:2)

我同意Eelvex的看法,这些盒子似乎是多余的。也许以下是思考你想要完​​成什么的有用方法?

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

如果你有一个动词force,你也可以在每次迭代时应用它:

   force=: -:            NB. example verb (halves right argument)
   force@add^:(5) Init=: 4 2 ?@$ 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