具有QuantLib的泊松随机变量
Poisson random variables with QuantLib
你好,有人能告诉我是否有一个在QuantLib中实现的泊松分布随机变量的随机数生成器吗?如果是,我在哪里可以找到该代码?我试图模拟跳跃扩散过程,并需要时间上步骤之间的跳跃次数(即每个时间间隔[t_(I-1);t_I]。有没有方法直接在QuantLib中实现这一点,或者我需要使用boost库?提前感谢!
p.s.或者你会建议使用实际的跳跃到达时间来生成指数分布的数字吗?
是否模拟跳跃时间或跳跃密度取决于如何编写扩散循环。IMHO,模拟密度更干净,因为它需要更少的状态才能通过模拟进行。
我不知道你是否会发现一些已经在Boost或QuantLib中写过的东西。但是,如果你已经有了一个均匀的RNG,那么对泊松分布进行采样实际上非常简单。例如(伪代码):
p = exp(-lambda);
F = p; % cumulative distribution function
N = 0;
U = rand();
while (U > F)
N = N + 1;
p = p*lambda/N;
F = F + p;
end
return N;
这是基于逆变换采样。还有其他几种技术。
当前在QuantLib中最接近的是InverseCumulationRng类模板和InverseCuculationPoisson类;类似的东西
MersenneTwisterUniformRng unifMt(seed);
InverseCumulativePoisson f(lambda);
InverseCumulativeRng<MersenneTwisterUniformRng, InverseCumulativePoisson> rng(unifMt, f);
会给你一个泊松生成器。请注意,它将以双精度返回样本,而不是int:它们将是整数,但用错误的类型表示。
此外,由于某些原因,InverseCumulativeRng似乎没有提供接受该函数的构造函数。奇怪的是,我们忽略了这一点。。。无论如何,您必须编辑<ql/math/randomnumbers/inverseculationrng.hpp>并添加它;完成后,请将补丁发送到QuantLib邮件列表,我会将其添加到存储库中。
相关文章:
- 将正态随机变量与任意 RHO(corrcoef) 相关联
- 为什么变量的打印地址在每次执行时都会打印随机值,即使它是 C 中的逻辑地址?
- 如何让变量随机输出四个单词之一
- 如何生成随机变量或类名并在以后使用?
- 尝试生成随机变量时获得"-nan(ind)"
- 为什么在 sync_with_stdio(false) 之前使用 cin 为下一个 i/p 变量提供随机值
- 如何使计算机每次在猪游戏中进行随机变量
- 如何通过Mersenne Twister生成不重复的随机变量
- C 中的Bernoulli随机变量
- 快速在C 中添加随机变量
- 为什么这个随机变量没有均匀分布?
- 具有QuantLib的泊松随机变量
- 生成n个随机变量,并用c++将它们相乘
- C++中的Marsaglia正态随机变量
- 随机变量总是生成5
- 随机变量名称,可能吗?
- 用相同的公式生成0和1之间的两个随机变量
- 如何最有效地防止正态分布的随机变量为零
- 如何在没有for循环的情况下请求boost::normaldistribution生成一个大的随机变量向量
- 有没有办法在不计算 CDF 的情况下从非标准分布生成随机变量