假设我在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次
谢谢!
答案 0 :(得分:2)
您想要做的就是取消装箱v
和n
然后,
(追加)。这样做的方法是使用每个=:&.>
使用&.
(不足)和>
(打开)。
, 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