从我正在读的一篇论文中知道:
...
S(t+1, k) = S(t, k) + ... + C*∆
...
∆ is a standard random variable with mean 0 and variance 1.
...
如何使用此均值和方差生成此系列随机值?如果有人有C或C ++库的链接,我会很高兴,但如果有人告诉我该怎么做,我不介意自己实现它:)
答案 0 :(得分:6)
您对\Delta
的分发有任何限制吗?如果不是,你可以在[-sqrt(3), sqrt(3)]
中使用统一分布。这样做的原因是因为统一分布[a,b]
方差为1/(12) (b-a)^2
。
答案 1 :(得分:2)
您可以使用Box-Muller transform。
假设U 1 和U 2 是在区间(0,1)中均匀分布的独立随机变量。让
和
然后Z 0 和Z 1 是独立的随机变量,标准差为1的正态分布。
答案 2 :(得分:0)
Waffles是一个成熟,稳定的C ++库,您可以使用它。特别是,* waffles_generate *模块中的 noise 功能可以满足您的需求。
除了中心和传播(均值和sd)之外,还需要知道随机数的概率分布。如果您正在阅读的论文没有说明这一点,并且上下文没有其他合理的推理支持,那么作者可能指的是正态分布(高斯分布) - 因为这是最常见的,因为这两个参数一个需要完全指定正态分布是均值和sd。许多分布都没有这样指定 - 例如,对于Gamma分布,需要形状,比例和速率;要指定Logistic,您需要位置和比例等。
答案 3 :(得分:0)
如果您只想要一个平均值0和方差1,那么最简单的可能就是这个。你有一个统一的随机数生成器unif()
,它给你0到1之间的数字吗?如果你想要数字非常接近正态分布,可以加上12个均匀(0,1)数字并减去6.如果你想要它真的是一个正态分布,你可以使用Box-Muller变换正如马克建议的那样,如果你不介意投掷日志,正弦和余弦。