2011-03-18 2 views
1

에 TransformedDistribution 나는 TransformedDistribution in Mathematica에서 내 이전 질문의 사샤의 대답에 후속 질문이 있습니다. 이미 한참 답을 가능으로: 티카

는, 나는 새로운 질문으로이 물어 감각을했다 생각했다.

Plot[LogNormalStableCDF[{1.5, 1, 1, 0.5, 1}, x], {x, -4, 6}, 
PlotRange -> All] 
: 나는 CDF 변화를 플롯하려고하면

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

을하지만 다음 PDF 기능이 보인다

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]]] 

이 잘 작동하기 :

대답의 일환으로 사샤는이 개 기능을 정의

평가는 지금까지 완료하지 않는 것 같습니다. CDF 및 PDF 버전을 모두

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]]] 

플롯이 잘 작동 : 위의 StableDistribution에 대한 NormalDistribution을 대체 -

나는 다음과 비슷한 일을했습니다.

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 버전보다 적게 수행해야합니다.

그래서 나는 희망 누군가가 수 다음 LogNormalStableCDF, 나는 밤을 통해 실행하려고하면 볼 수 있습니다 적어도 나는 적당한 시간을 고려 무엇에 (작업 표시되지 않는 이유

  1. 설명 그것은 이제까지 얻을 LogNormalStableCDF보다 신속하게 작업 할 수있는 방법을 제안 평가) 및

  2. 을 완료합니다.

많은 감사, J.

답변

3

새로운 유통 기능은 놀라운 잠재력을 가지고 있지만, 그 새로움은 보여줍니다. 저와 다른 사람들이 마주 치게되는 몇 가지 버그가 있습니다. 버그 픽스를 따라갈 때 잘 처리 될 것입니다. 그러나 이것은 그들 중 하나가 아닌 것으로 보인다. 정수 형태로 플롯 범위를 제공하면서 이러한 경우

문제는 실제 변수 x로서 정의된다. 따라서 Plot이 시작될 때 일치가 없으므로 함수가 평가되지 않은 값을 반환하는 끝점을 시도합니다. Real에서 정의를 제거하면 효과가 있습니다.

플롯 범위에 기계 정밀도 번호가 제공되므로 두 번째 기능이 작동합니다. 함수가 매우 느린 평가되므로

은 조금 기다려야 할 준비를하십시오.

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

enter image description here

그것을 산출 : Plot 너무 열정적 얻고 (아마도 때문에 작은 규모의 부정확성에) 여기에 너무 많은 포인트를 추가하기 때문에 사실, 당신은, 조금 MaxRecursion 억제해야 생성하는 데 약 9 분이 걸렸으며 알 수 있듯이 그래프의 측면에서 많은 점수를 받았습니다.

enter image description here

+0

Sjoerd - 답변 해 주셔서 감사합니다. 필자는 새로운 배포 기능을 더 많이 사용하면서 플로팅 작업을하는 것을 지켜 볼 것입니다. 최고, – Jagra

+0

@ 자르가 _Real을 제거하는 대신 _? NumberQ를 사용하는 것이 좋습니다. 이점은 CDF가 기호 인수로 평가되지 않은 상태로 유지되므로 수식 작성에 편리 할 수 ​​있습니다. – Sasha

관련 문제