【技术展示】Box-Muller法得到服从正态分布的随机数
scratch吧
全部回复
仅看楼主
吧务
level 15
遧傂鼝 楼主
要写成标准的教程的话,需要铺垫的东西太多了。
打算就随便写写,各位能看懂就看,看不懂记结论就行[滑稽]
2022年07月03日 01点07分 1
吧务
level 15
遧傂鼝 楼主
正态分布是什么?
正态分布是自然界中广泛存在的一种概率分布。它的概率密度函数图象(描述随机数分布状况的图象)是著名的钟形曲线,各位应该在科普书上见过。正态分布有两个重要的参数:均值和标准差。有一个著名的“3-Sigma原则”,说的是在正态分布中,可以看作所有的样本(随机数)都分布在距离均值3个标准差范围之内,各位在设定随机数范围时可以参考。
可见,均值越大,随机数整体越大,图象越偏右;标准差越大,随机数分布越均匀,图象越扁。
2022年07月03日 01点07分 2
吧务
level 15
遧傂鼝 楼主
为什么要使用正态分布?
根据中心极限定理,取大量(相互独立,服从相同的分布规则,且分布范围有限的)随机数,它们近似服从正态分布。一个简单的例子就是某市数学高考成绩的分布。当考试难度适当,考生并未大规模作弊时,该市高考成绩近似服从正态分布。在这一例子中,可以认为考生之间互不干扰,即成绩相互独立;近似认为一个考生的成绩服从均匀分布,这一分布规则对所有考生都成立;分数只可能在0分到150分之间,即分布范围有限。
正态分布有什么用?
在现实生活中,正态分布对建立预测模型十分有帮助,有助于风险的规避、提高生产效率。在Scratch中,在我们需要批量生成AI对手时,可以使用正态分布来生成它们的数值,以期贴近现实。当需要实现无规律振动的效果时,同样可以使用正态分布来设定振子的位置。
各位可以开动脑筋,找到更多的应用场景[滑稽]
2022年07月03日 01点07分 3
吧务
level 15
遧傂鼝 楼主
想必大家会发现,Scratch自带的取随机数积木只能获得服从均匀分布的随机数,这并不是我们想要的。那么该如何获得服从正态分布的随机数呢?有人会说,你不是都提到中心极限定理了吗?但各位要考虑到Scratch的性能,当取大量样本时,会产生明显的卡顿;取少量样本时,又无法很好地得到正态分布。因此,当我们需要批量产生较多服从正态分布的随机数时,就需要使用本文的主角——Box-Muller法。
Box-Muller法是一种将均匀分布转化为标准正态分布(均值为0,标准差为1)的算法。
如果X1、X2属于(0,1]区间,那么
Y1、Y2服从标准正态分布。(注意这里的2*pi是弧度制,在Scratch中需要转换为角度制的360)
证明过程十分巧妙,主体过程只涉及指数-对数运算知识,各位有兴趣可以上b站学习到。它本是用作获得二维正态分布的,自然也可以在本例中用作获得一维正态分布。
2022年07月03日 01点07分 4
@遧傂鼝 属于(0,1]区间是指:大于0且小于等于1。
2022年07月03日 01点07分
吧务
level 15
遧傂鼝 楼主
接下来,就是运用另一个重要的公式:z=(X−μ)/σ,将标准正态分布转化为一般的正态分布。
其中,z是服从标准正态分布的随机变量(随机数),X是服从均值为μ、标准差为σ的一般正态分布。通过变形即可得到X=z*σ+μ。
这里的证明过程需要用到积分的知识,毕竟正态分布的概率密度函数就涉及了积分。
各位可以上阿儿法营找到示例文件。(搜我小号:天火XO)
2022年07月03日 01点07分 5
吧务
level 15
遧傂鼝 楼主
吞楼吞得太厉害了,各位稍安勿躁[滑稽][心碎]
2022年07月03日 01点07分 6
level 12
dd[玫瑰]
2022年07月03日 09点07分 7
1