【问题标题】:Algorithm for generating normally distributed random values in C? [duplicate]在C中生成正态分布随机值的算法? [复制]
【发布时间】:2011-04-23 06:44:01
【问题描述】:

可能重复:
Converting a Uniform Distribution to a Normal Distribution

你好。

我想知道用 C 实现的任何算法,它可以取 0 到 1 之间的随机值、均值和标准差,然后返回正态分布的结果。

我现在的脑力太少,无法自己解决这个问题。

我在互联网上找不到任何有用的东西。

谢谢。

【问题讨论】:

    标签: c algorithm statistics random


    【解决方案1】:

    Box-Muller 是您需要的转换。

    【讨论】:

    • 感谢您的回答,但我需要 C 实现或可读的伪代码,而不是难以理解的维基百科页面。
    • 我并不想在那里表现粗鲁,我只是需要一些我可以立即理解和使用的东西。不过,我正在为该算法寻找一个体面的网站,所以感谢您的建议。
    【解决方案2】:

    已经有人建议 Box Muller,但计算上更简单的方法是简单地利用 central-limit theorem;将足够多的独立随机变量加在一起,结果将接近正态分布。

    【讨论】:

    • 感谢您的回答。由于需要许多随机数,这是否足够有效?显然需要 32 个才能获得足够好的表示。
    • @Matthew Mitchell:在不了解您的平台或准确性要求的情况下,不可能明确地回答这个答案。您最好的选择可能是同时实现方法和配置文件。我只能说 Box-Muller 变换需要对 log、cos 和 sqrt 进行评估,这可能很昂贵。
    • 仅适用于 AI,不一定要 100% 准确。由于很少需要该功能,因此我认为速度并不重要。
    • 我在任何地方都找不到工作 Box Muller C 函数。我在这方面放弃了。我将尝试测试中心限制算法。感谢您的帮助。
    • @Matthew Mitchell:这是一个很好的回应!有太多人痴迷于优化算法的速度/性能,却没有停下来检查是否真的有必要这样做。
    猜你喜欢
    • 2018-06-22
    • 2014-12-20
    • 2011-01-20
    • 2020-11-25
    • 2011-04-24
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多