高斯过程的准随机数发生器

时间:2014-02-28 16:41:04

标签: c++ random

我正在尝试在对数正态过程(即X_t = X_(t-1) exp( drift * dt + sigma*GaussianRandom*sqrt(dt)))之后的1200个时间步长中演变变量(比如X凝视值为1)。我想使用准随机数来获得更快的收敛。

我的理解是我需要1200维准随机数发生器。在每个时间步骤我使用X_t来计算一些其他变量,因此我需要所有1200点,我不能跳转到单个终点并减少维数。

我的问题是:

  1. 在如此高的维度上,使用准随机数与伪随机数有任何优势。

  2. 有人可以指点一些C ++代码,它可以帮助我生成准随机数。

2 个答案:

答案 0 :(得分:1)

  

在如此高的维度上,我将使用准随机数与伪随机数有任何优势。

与良好的伪随机数发生器相比,

1200不是高维。你需要的是一个好的伪随机数生成器,它几乎排除了rand()

  

有人可以指点一些C ++代码,它可以帮助我生成准随机数。

这个问题隐含地假设您不能使用PRNG。你可以,只要它有一个很长的重复,并表现出非常好的行为。梅森捻线机将满足您的需求(但现在甚至更好)。有丰富的MT实现,但如果你可以使用C ++ 11,MT就是内置的语言。解决此问题的最简单方法是使用C ++ 11随机数生成器。请参阅http://en.cppreference.com/w/cpp/numeric/random

答案 1 :(得分:0)

我无法回答你的第一个问题。

对于第二个:看看GNU Scientific Library。代码是C语言,结构良好,因此您可以轻松编写包装类(如果需要)。

我会接受gsl_rng_mt19937或gsl_rng_ranlxd2并修改它们。我更喜欢gsl_rng_ranlxd2(如果计算时间没有计量)。