使用高斯分布生成介于0和1之间的随机数
我想在C#中编写一个方法来生成一个随机数,其高斯分布范围为[0:1]
(并且预先在[0-x]中)。 我发现此代码但无法正常工作
Random rand = new Random(); //reuse this if you are generating many double u1 = rand.NextDouble(); //these are uniform(0,1) random doubles double u2 = rand.NextDouble(); double randStdNormal = Math.Abs( Math.Sqrt(-2.0 * Math.Log(u1)) * Math.Sin(2.0 * Math.PI * u2));
我写了一篇关于如何使用任何给定分布生成随机数的博客文章:
总结一下,你想要的算法是:
- 计算出所需的概率分布函数 ,使得曲线的一部分下面的面积等于在该范围内随机生成值的概率。
- 整合概率分布以确定累积分布 。
- 反转累积分布以获得分位数函数 。
- 通过在分位数函数中运行,转换均匀分布的(0,1)随机数据。
当然,如果您已经知道所需分布的分位数函数,那么您不需要执行第一步到第三步。
你说你想要一个发生器,用于0到1之间的正态分布(高斯)随机数。
首先,正态分布不受限制…您在示例中显示的函数生成具有0.0均值和1.0的标准差的正态分布随机数
您可以通过将从此函数获得的值乘以所需的标准偏差,然后添加所需的平均值,生成任意均值和标准差的正态分布随机值…
代码是正常的 – 问题是对高斯(正常)分布的误解,其范围为-inf到+ inf ……
大约2/3的时间你得到的值将在+/- 1标准偏差之间….大约95%的时间值将是+ / 1 3倍标准差…
上述就是C#学习教程:使用高斯分布生成介于0和1之间的随机数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1002433.html