簡體   English   中英

使用QuantLib的泊松隨機變量

[英]Poisson random variables with QuantLib

您好,有人可以告訴我QuantLib中是否有一個用於Poisson分布隨機變量的隨機數生成器嗎?如果是,我在哪里可以找到此代碼?我正在嘗試模擬跳轉擴散過程,需要時間步長之間的跳轉數(即,每個時間間隔[t_(i-1); t_i [。是否可以直接在QuantLib中執行此操作,還是需要使用boost庫?預先感謝!

ps還是建議通過生成指數分布的數字來使用實際的跳躍到達時間?

是否模擬跳躍時間或跳躍密度取決於編寫擴散循環的方式。 恕我直言,模擬密度更干凈,因為它需要更少的狀態才能通過模擬進行。

我不知道您是否會發現已經用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中獲得的最接近的是InverseCumulativeRng類模板以及InverseCumulativePoisson類。 就像是

MersenneTwisterUniformRng unifMt(seed);
InverseCumulativePoisson f(lambda);
InverseCumulativeRng<MersenneTwisterUniformRng, InverseCumulativePoisson> rng(unifMt, f);

將為您提供泊松發生器。 請注意,它將以雙精度值而不是整數返回樣本:它們將是整數,但以錯誤的類型表示。

同樣,由於某種原因,InverseCumulativeRng似乎不提供采用該函數的構造函數。 奇怪的是,我們忽略了這一點……無論如何,您必須編輯<ql / math / randomnumbers / inversecumulativerng.hpp>並將其添加; 完成后,請將補丁發送到QuantLib郵件列表,然后將其添加到存儲庫中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM