【发布时间】:2010-10-31 01:25:25
【问题描述】:
从我正在阅读的一篇论文中知道:
...
S(t+1, k) = S(t, k) + ... + C*∆
...
∆ is a standard random variable with mean 0 and variance 1.
...
如何用这个均值和方差生成这一系列随机值?如果有人有指向 C 或 C++ 库的链接,我会很高兴,但如果有人告诉我该怎么做,我不介意自己实现它:)
【问题讨论】:
标签: random
从我正在阅读的一篇论文中知道:
...
S(t+1, k) = S(t, k) + ... + C*∆
...
∆ is a standard random variable with mean 0 and variance 1.
...
如何用这个均值和方差生成这一系列随机值?如果有人有指向 C 或 C++ 库的链接,我会很高兴,但如果有人告诉我该怎么做,我不介意自己实现它:)
【问题讨论】:
标签: random
您可以使用Box-Muller transform。
假设U1和U2是均匀分布在区间(0, 1]内的独立随机变量。设
和
那么 Z0 和 Z1 是独立随机变量,标准差为 1 的正态分布。
【讨论】:
你对\Delta的分发有什么限制吗?如果不是,您可以在[-sqrt(3), sqrt(3)] 中使用统一分布。这会起作用的原因是因为对于均匀分布[a,b],方差是1/(12) (b-a)^2。
【讨论】:
[-sqrt(3), sqrt(3)] 而不是 [0,1]
1/(12) (b-a)^2。使平均0 的最简单方法是对称的,所以我们选择a = -b。现在将其代入方差公式并求解,您将得到 sqrt(3)。希望这有帮助。我的回答应该更清楚。
Waffles 是一个成熟、稳定的 C++ 库,您可以使用。特别是,*waffles_generate* 模块中的 noise 函数会做你想做的事。
除了中心和散布(均值和标准差)外,还需要知道随机数从中抽取的概率分布。如果您正在阅读的论文对此没有任何说明,并且没有上下文支持的其他合理推断,那么作者可能指的是正态分布(高斯)——因为这是最常见的,并且因为这两个参数需要完全指定正态分布的是均值和标准差。许多分布没有以这种方式指定——例如,对于 Gamma 分布,需要形状、比例和速率;要指定一个Logistic,你需要位置和规模等。
【讨论】:
如果您只想要某个均值 0 和方差 1,那么最简单的可能就是这个。您是否有一个统一的随机数生成器unif() 可以为您提供介于 0 和 1 之间的数字?如果您希望数字非常接近正态分布,只需将 12 个均匀 (0,1) 数字相加并减去 6。如果您希望它真正完全是正态分布,您可以使用 Box-Muller 变换,正如 Mark 建议的那样,如果您不介意输入对数、正弦和余弦。
【讨论】: