每天走几万步,刷爆朋友圈,你是否想过一个问题:假设在一个二维平面上,随机走2万步,每一步朝向各个方向的概率都是一样的,那么你会走出一个什么形状呢?能够走多远呢?能够回到原点?

针对这种随机问题最好的解决方式就是模拟。 原理很简单:产生一个0-360的随机数,表示下一步的朝向,然后计算出新的坐标位置点,然后再下一步,循环直到达到你设定的步数终止。 你可以根据这个原理自己写一个简单的函数完成这个过程,也可以在GitHub上安装已经写好了的R包。

library(devtools)
install_github("Yiguan/simuWalk")
library(simuStep)
simuStep(20000) #第一次模拟
[1] "Distance from origin position : 99.3077766618963"
simuStep(20000) #第二次模拟
[1] "Distance from origin position : 117.945283108597"
simuStep(20000) #第三次模拟
[1] "Distance from origin position : 88.1862636170362"

下面依次是3次模拟图(红圆点表示原点,红三角表示终点):

从第一次模拟看出,在2万步以内,离开原点之后,就再也没能回到原点!而第3次似乎有很多时候回到了原点附近。假设每一步步长1米的话,那么在这3次模拟中,走了2万步后离原点只有100米左右。

能不能回到原点 假设我们以-2<X<2且-2<Y<2为原点的定义,那么在2万步以内我们还能不能回到最初的原点呢?为此,以2万步为一个事件,又进行了1100次模拟,看一下在2万步以内能够回到原点的概率分布情况,如下: 从上面的分布图上可以看出,能够回到原点的概率主要分布在1000步以内,也就是最开始的时候是最有可能回到原点的,随着时间的延长,或者越走越远,能够回到原点的概率越来越低!虽然说直到最后20000步的时候你仍有可能回到原点,但是概率已经很低了,或许只能靠缘分了。

最后,模拟这个有什么意义? 其实没太大意义。当然,也不是全无意义,实际上,上述运行就是布朗运动。

安装包: https://github.com/Yiguan/simuWalk

========= THE END ========