gpt4 book ai didi

c++ - 连续分布的指数衰减随机分布和离散化

转载 作者:太空宇宙 更新时间:2023-11-04 14:51:17 25 4
gpt4 key购买 nike

遗憾的是,尽管在范围内使用了统一的整数,但我在编程中使用随机数方面并没有真正的经验。因此,我必须就此主题提问。

问题 1(更具体):

我正在寻找一种根据类似于“指数衰减”(http://en.wikipedia.org/wiki/Exponential_decay)曲线的概率分布来选择数组元素(动态大小,但已知)的方法。含义:我想选择第一个元素而不是其他元素。我想要一个单调递减函数(在许多众所周知的概率分布(如 Gamma 分布)中,在递减之前不增长)。

也许我可以使用几何分布?但是我需要回答我的第二个问题,这个问题是关于将这个分布扩展到数组索引的。

当然,选择最后一个元素而不是第一个元素的双重方法也可以。

问题 2(更笼统):在任何实现中是否有一个概念可以将任何连续随机分布扩展到给定的数组范围(包括离散化)?

示例:使用高斯正态分布,结果始终是某个数组中的有效索引(意思是:中间元素是首选)。

这 ( link text ) 可以像我想使用的那样吗?

平台和库:我正在用 C++ 编程,目前使用 boost::random 库 ( link text ),但我愿意使用类似 >gsl 库 或其他质量 库。

再多一个愿望:我更喜欢使用一些质量库的方式,而不是一些快速而肮脏的 custom_functions。

谢谢!

最佳答案

一般规则是选择均匀分布的数字,然后应用一个函数将它们转换为您想要的分布。您应用的函数是您希望随机数落入的函数的反函数。

如果您希望以与 f(x) 成正比的概率选择随机数,那么您可以从均匀分布 u 中选择一个随机数,然后应用 f^-1(u),这就是您的新数字。

因此,如果您希望随机数的选取概率与 exp(-x) 成正比,那么您可以选取一个均匀分布的随机数并计算它的 ln:

double x=ln(rand()); 

应该给你概率分布为 exp(-x) 的随机数。

注意:我并不是说 rand() 是一个很好用的函数,您需要研究好的随机数生成器的细节。但假设您有一个好的随机数生成器,这是一个很好的解决方案。

编辑:忘记减号:

double x=-ln(rand()); 

是正确答案。

关于c++ - 连续分布的指数衰减随机分布和离散化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4108528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com