【问题标题】:How do I generate normally distributed positive integers in C?如何在 C 中生成正态分布的正整数?
【发布时间】:2016-09-13 11:33:28
【问题描述】:

我正在用 C 编写一个程序,该程序需要生成均值小于 1 的正整数的正态分布。

【问题讨论】:

  • 那么到目前为止,您尝试过什么?您可以使用rand() 生成随机数。
  • 如果一组正整数的均值小于1,那么大部分值必须为0。
  • 限制为正整数的东西怎么会有正态分布?
  • @JensGustedt 或者意味着小于 1,就此而言。
  • 如果我们有足够大的样本(在我的例子中是 2^20),通过 CLT,我们可以将其近似为接近正态分布。

标签: c algorithm statistics


【解决方案1】:

您可以对已经呈正态分布的数据进行归一化,例如获取人类平均长度(180 厘米)的数据,然后按一个因子缩放每个数字,以使平均值小于 1,例如将每个长度乘以 1/180。

【讨论】:

  • 我需要正整数作为随机数。所以缩放不起作用。例如,175/180 不会是整数。
  • 你能用中心极限定理吗? en.wikipedia.org/wiki/Central_limit_theorem 和一个足够大的二项分布,将近似。正常吗?
  • 我觉得应该可以用。
  • 我在 Excel 中对其进行了测试,它具有执行此操作的功能:=INT(NORMINV(RAND(); 0,5; 0,4)) 将生成平均值为 0,5 和 s.d 的随机整数。 0,4。如果我们能在 Excel 中做到这一点,我们就可以学习算法。
【解决方案2】:

我在 C 中使用了泊松随机数生成器函数,它以均值作为输入。我使用了 rand() 和求幂的组合来获得分布,这是执行此操作的正常方法,如 Calculation of Poisson distribution in C。 由于我生成了 2^14 个随机数,根据中心极限定理,它们的分布将趋于正态分布,具有相同的均值和方差。

【讨论】:

    猜你喜欢
    • 2016-09-21
    • 2016-01-14
    • 2018-06-22
    • 2010-11-21
    • 2011-01-20
    • 2020-06-18
    • 2014-11-06
    • 1970-01-01
    相关资源
    最近更新 更多