呈钟形曲线的随机数

3

我需要使用随机数来产生一个呈钟形曲线形状的统计平均值,以下是我的尝试:

Function slopedrand(max As Single, bias As Single) As Integer
    Dim count As Single = 0
    While count < bias
        max = rand.NextDouble() * max
        count += rand.NextDouble()
    End While
    Return rand.NextDouble() * max
End Function

Function bulgedrand(min As Single, max As Single, bulge As Single, bias As Single)
    Dim negative = bulge - min
    Dim positive = max - bulge

    Dim nr = min + slopedrand(negative, bias)
    Dim pr = max - slopedrand(positive, bias)

    Return rand.NextDouble() * (pr - nr) + nr
End Function

然而,考虑到我不擅长数学,它只会产生像这样的东西:http://i.imgur.com/JDAW6kM.png,更像是一个突起...由于感觉我的头骨在煮沸,也许这里有人已经想出了如何实现我需要的内容,并会免去我进一步尝试思考的困境?(示例以vb.net为例,因为它很快可以原型化,但欢迎使用任何语言。)

这是关于哪种编程语言的?猜测看起来像是VB.NET。 - Robadob
“rand() + rand()” 会不会基本上给你一个接近正态分布的东西? - paxdiablo
当你说“钟形曲线”时,你是指正态(高斯)分布吗?如果是这样,那么我可以让我的回答更具体。 - Bathsheba
那是某种形式的Visual Basic。 - Jodrell
请不要因为您认为已经理解了问题(而“我切换到double”几乎不是一个解释)而删除问题。显然,这是在谈论您最近删除的问题。 - Pascal Cuoq
显示剩余2条评论
2个回答

2

在IT技术中,处理这个问题"传统的"方法是先生成一个[0, 1)之间的均匀分布随机数,然后应用正态分布的分位函数。这样得到的随机数和正态分布具有相同的分布。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接