Wolfram mathematica 跟进:Mathematica中的转换分布

Wolfram mathematica 跟进:Mathematica中的转换分布,wolfram-mathematica,distribution,Wolfram Mathematica,Distribution,我有一个关于萨沙回答我之前问题的后续问题 因为我不久前已经接受了答案,所以我认为把这个问题作为一个新问题来问是有意义的 作为答案的一部分,Sasha定义了两个功能: LogNormalStableCDF[{alpha_, beta_, gamma_, sigma_, delta_}, x_Real] := Block[{u}, NExpectation[ CDF[StableDistribution[alpha, beta, gamma, sigma], (x - delta)/

我有一个关于萨沙回答我之前问题的后续问题

因为我不久前已经接受了答案,所以我认为把这个问题作为一个新问题来问是有意义的

作为答案的一部分,Sasha定义了两个功能:

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]
评估似乎永远不会结束

我做了类似的事情,用正态分布代替上面的稳定分布:

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]
这使我感到困惑。显然,一般方法适用于lognormalcdf情况。此外,lognormalstabledf和lognormalstabledf几乎相同。事实上,从代码本身来看,CDF版本似乎比PDF版本做得少

所以,我希望有人能:

>p>解释为什么LogMauntRealCdF似乎不起作用(至少在我认为合理的时间,我会尝试运行它过夜,看看它是否完成评估)和

  • 建议一种让get-LogNormalStableCDF更快工作的方法

  • 非常感谢,,
    J.

    新的分发功能有着惊人的潜力,但它的新颖性已经显现出来。我和其他人都遇到了一些bug,希望在下面的bug修复中能够解决。然而,这似乎不是其中之一

    在这种情况下,问题在于将变量x定义为实数,同时以整数的形式提供绘图范围。因此,当
    Plot
    启动时,它会尝试函数返回未计算的端点,因为没有匹配项。从定义中删除Real可以使其正常工作

    第二个功能起作用,因为绘图范围提供了机器精度编号

    请准备稍等,因为函数的计算速度非常慢。事实上,您必须稍微限制
    MaxRecursion
    ,因为
    Plot
    过于热情,在这里添加了太多的点(可能是由于小范围的不准确):

    屈服

    生成过程大约需要9分钟,如您所见,在图形的侧面需要很多点


    Sjoerd——谢谢你的回答。当我使用更多新的分发功能时,我将在绘图中注意这一点。最好,@Jarga,与其删除_Real,不如使用?NumberQ。这样做的好处是,您的CDF将不使用符号参数进行计算,这可能有助于编写公式。
    Plot[LogNormalStableCDF[{1.5, 1, 1, 0.5, 1}, x], {x, -4, 6}, 
     PlotRange -> All, PlotPoints -> 10, MaxRecursion -> 4]