需要帮助从分布中生成离散的随机数

9 random math numbers distribution objective-c

我搜索了网站,但没找到我到底想要的东西......我想从正态分布中生成一个离散的随机数.

例如,如果我的范围从最小值4到最大值10,平均值为7.我需要返回一个代码或函数调用(Objective C首选),返回该范围内的数字.当然,由于正态分布,更多的数字将以7的平均值为中心.

作为第二个例子,钟形曲线/分布是否可以向另一端倾斜?假设我需要生成一个最小值为4且最大值为10的随机数,并且我希望返回的大多数数字以数字8为中心,基于倾斜的钟形曲线自然下降.

任何帮助是极大的赞赏....

安东尼

Sin*_*ion 1

正态分布不通过其端点来描述。通常它由平均值(您指定为 7)及其标准差来描述。它的一个重要特征是,有可能从该分布中获得远远超出预期范围的值,尽管这种情况非常罕见,离平均值越远。

\n\n

从分布中获取值的常用方法是从均匀分布中生成随机值,这很容易用例如 来完成,rand()然后将其用作累积分布函数的参数,该函数将概率映射到上界限。对于标准分布,该函数是

\n\n
F(x) = 0.5 - 0.5*erf( (x-\xce\xbc)/(\xcf\x83 * sqrt(2.0)))\n
Run Code Online (Sandbox Code Playgroud)\n\n

误差函数erf()在哪里可以用泰勒级数描述的

\n\n
\n

erf(z) = 2.0/sqrt(2.0) * \xce\xa3 \xe2\x88\x9e n=0 ((-1) n z 2n + 1 )/(n!(2n + 1))

\n
\n\n

我将把它作为练习,将其翻译成 C 语言。

\n\n

如果您不想参与该练习,您可以考虑使用Gnu 科学图书馆,其中除了许多其他功能之外,它还具有一种在许多常见分布之一中生成随机数的技术,其中高斯分布(提示)就是其中之一。

\n\n

显然,所有这些函数都返回浮点值。您将必须使用某种舍入策略来转换为离散值。一种有用(但幼稚)的方法是简单地向下转换为整数。

\n