We want to use H V U to nest a function which adds a random step to an (x,y) coordinate. The function is a bit long, but otherwise the problem is quite straightforward.
2: [0, 0] 1: [ [ 0, 0 ] 1: 50 [ 0.4288, -0.1695 ] . [ -0.4787, -0.9027 ] ... [0,0] 50 H V U ' <# + [random(2.0)-1, random(2.0)-1]> RET
Just as the text recommended, we used `< >' nameless function
notation to keep the two random
calls from being evaluated
before nesting even begins.
We now have a vector of [x, y] sub-vectors, which by Calc's rules acts like a matrix. We can transpose this matrix and unpack to get a pair of vectors, x and y, suitable for graphing.
2: [ 0, 0.4288, -0.4787, ... ] 1: [ 0, -0.1696, -0.9027, ... ] . v t v u g f
Incidentally, because the x and y are completely independent in this case, we could have done two separate commands to create our x and y vectors of numbers directly.
To make a random walk of unit steps, we note that sincos
of
a random direction exactly gives us an [x, y] step of unit
length; in fact, the new nesting function is even briefer, though
we might want to lower the precision a bit for it.
2: [0, 0] 1: [ [ 0, 0 ] 1: 50 [ 0.1318, 0.9912 ] . [ -0.5965, 0.3061 ] ... [0,0] 50 m d p 6 RET H V U ' <# + sincos(random(360.0))> RET
Another v t v u g f sequence will graph this new random walk.
An interesting twist on these random walk functions would be to use complex numbers instead of 2-vectors to represent points on the plane. In the first example, we'd use something like `random + random*(0,1)', and in the second we could use polar complex numbers with random phase angles. (This exercise was first suggested in this form by Randal Schwartz.)
Go to the first, previous, next, last section, table of contents.