Wolfram mathematica 跟进:Mathematica中的转换分布
我有一个关于萨沙回答我之前问题的后续问题 因为我不久前已经接受了答案,所以我认为把这个问题作为一个新问题来问是有意义的 作为答案的一部分,Sasha定义了两个功能: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)/
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版本做得少
所以,我希望有人能:
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]