2011-03-18 29 views
1

我有一個後續問題,以Sasha的回答我的早期問題在TransformedDistribution in Mathematica追蹤:轉化爲Mathematica發佈

由於我早已接受了答案,我認爲將此作爲一個新問題是有道理的。

作爲答案的一部分薩沙定義2個功能:

LogNormalStableCDF[{alpha_, beta_, gamma_, sigma_, delta_}, x_Real] := 
Block[{u}, 
    NExpectation[ 
    CDF[StableDistribution[alpha, beta, gamma, sigma], (x - delta)/u], 
    u \[Distributed] LogNormalDistribution[Log[gamma], sigma]]] 

LogNormalStablePDF[{alpha_, beta_, gamma_, sigma_, delta_}, x_Real] := 
Block[{u}, 
    NExpectation[ 
    PDF[StableDistribution[alpha, beta, gamma, sigma], (x - delta)/u]/u, 
    u \[Distributed] LogNormalDistribution[Log[gamma], sigma]]] 

的PDF功能似乎很好地工作:

Plot[LogNormalStablePDF[{1.5, 1, 1, 0.5, 1}, x], {x, -4, 6}, 
PlotRange -> All] 

但是,如果我嘗試繪製CDF變化:

Plot[LogNormalStableCDF[{1.5, 1, 1, 0.5, 1}, x], {x, -4, 6}, 
PlotRange -> All] 

評估似乎並沒有完成。

我已經做了以下類似的東西 - 代替上述StableDistribution一個正態分佈:

LogNormalNormalCDF[{gamma_, sigma_, delta_}, x_Real] := 
Block[{u}, 
    NExpectation[CDF[NormalDistribution[0, Sqrt[2]], (x - delta)/u], 
    u \[Distributed] LogNormalDistribution[Log[gamma], sigma]]] 

LogNormalNormalPDF[{gamma_, sigma_, delta_}, x_Real] := 
Block[{u}, 
    NExpectation[PDF[NormalDistribution[0, Sqrt[2]], (x - delta)/u]/u, 
    u \[Distributed] LogNormalDistribution[Log[gamma], sigma]]] 

兩個CDF和PDF版本的繪圖工作的罰款。

Plot[LogNormalNormalPDF[{0.01, 0.4, 0.0003}, x], {x, -0.10, 0.10}, PlotRange -> All] 
Plot[LogNormalNormalCDF[{0.01, 0.4, 0.0003}, x], {x, -0.10, 0.10}, PlotRange -> All] 

這讓我感到困惑。顯然,一般方法在LogNormalNormalCDF情況下起作用。此外,LogNormalStablePDF和LogNormalStableCDF幾乎完全相同。事實上,從代碼本身來看,CDF版本似乎不得不比PDF版本少。

所以,我希望有人能:

  1. 解釋爲什麼LogNormalStableCDF似乎並沒有工作(至少在我認爲一個合理的時間,我會盡力跑過來晚上看它完成了評估)並且

  2. 爲獲得LogNormalStableCDF更快地工作提供了一種方法。

非常感謝, J.

回答

3

新的分配功能具有驚人的潛力,但其新穎顯示。我和其他人遇到了一些錯誤,希望能夠在以下錯誤修正中處理。但是,這似乎不是其中之一。

在這種情況下,問題是將變量x定義爲實數,同時以整數形式提供繪圖範圍。因此,當Plot開始時,它會嘗試函數返回未評估的端點,因爲沒有匹配。從定義中刪除真實使其工作。

第二個函數可用,因爲繪圖範圍是隨機器精度數字提供的。

準備稍等一下,因爲函數評估的速度很慢。事實上,你必須遏制MaxRecursion一點,因爲Plot過於熱情,這裏增加了太多的點(可能由於規模小不準確):

Plot[LogNormalStableCDF[{1.5, 1, 1, 0.5, 1}, x], {x, -4, 6}, 
PlotRange -> All, PlotPoints -> 10, MaxRecursion -> 4] 

產生

enter image description here

它花費了大約9分鐘時間才能生成,正如你所看到的,它在圖的側面花了很多時間。

enter image description here

+0

Sjoerd - 謝謝你的回答。當我使用更多新的分發功能時,我將在繪圖中真正注意到這一點。最佳, – Jagra 2011-03-19 17:46:30

+0

@Jarga,而不是刪除_Real,最好使用_?NumberQ。這樣做的好處是,你的CDF將保持未被評估的符號論證,這可能在寫出公式時很方便。 – Sasha 2011-03-27 15:12:20