在很多时候,我们需要用到各种各样的随机数,比如平均分布
、正态分布
、泊松分布
、指数分布
等等。
在网上找了很多资料,终于集齐了一套,这里做一下笔记,希望以后再用的时候能记起来。
因为篇幅比较长,本篇文章先介绍一下平均分布和正态分布,剩下的内容留给下一篇文章。
平均分布➴
平均分布的随机数产生是最容易的,我们可以直接使用.net的随机数产生类System.Random产生符合平均分布的随机数。
当然,Unity重也可以使用UnityEngine.Random产生随机数。
原理➴
这个原理的话,就是伪随机数产生的原理,首先需要给定一个随机因子,然后以这个随机因子为基础,进行一系列的运算,然后产生一个伪随机数,如果不给定随机因子,就会使用当前的系统时间进行计算。
演示➴
1 | using System; |
使用上面的代码,不指定随机因子产生随机数,然后使用for循环产生9000个 -50 - 50
之间的随机数;
1 | using System; |
接下来使用Origin统计分布频度,作图:
可以看出,基本符合平均分布特点(样品越多,统计结果越准确,有兴趣的话可以弄100K个样本试试看有什么效果)。
正态分布➴
若随机变量X服从一个数学期望为μ、方差为σ^2
的正态分布,记为N(μ,σ^2)
。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。
原理➴
极坐标形式
假设u 和 v 是 [-1, 1] 均匀分布的随机量,且u 和 v 彼此独立,令:
那么随机数z0 和 z1可以按照如下公式产生,结果是z0 和 z1服从N(0,1)的随机数,且 z0 和 z1彼此独立;
有兴趣的同学可以看一下这一段 原文链接;
演示➴
1 | using System; |
同样,我们使用9000个随机数验证随机数分布规律
1 | using System; |
使用Origin作图,并使用高斯方程拟合曲线可以得到下图:
从图中我们可以看出,分布中心μ接近0,而σ接近10(9.885),基本符合我们的预期。
下期预告➴
以后有时间会接着介绍泊松分布和指数分布随机数的产生方法。
- 本文作者: MonoLogueChi
- 本文链接: https://blog.xxwhite.com/2017/RandomNum1.html
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!