Zolotarev-Nolan Transform

This is a technical page to describe one of the algorithms in the StableM7 package.  Zolotarev first described this transform, but it was clarified and made useful by Nolan in 1997 (see Reference Page).  The transform can be derived step by step using Mathematica.  We start with the characteristic function in the Nolan 1-parameterization because it is algebraically simpler.  We will do the derivation only for α ≠ 1.

cf1= (E^(-((Abs[t])^α) (1-I β Sign[t] Tan[((π α)/2)])));

The Real portion of the Fourier transform of the characteristic function gives the stable density.  There is no closed formula for the general case of this integral.  Mathematica can numerically integrate some of the parameter range for this integral.

Plot[Re[NIntegrate[ Exp[-I t x] cf1/(2 Pi) /. {α -> 1.5, β -> -1}, {t, -∞, ∞}, Method -> {Automatic, "SymbolicProcessing" -> 0}]], {x, -5, 5}, PlotRange -> All, PerformanceGoal -> "Speed"]

Plot[Re[NIntegrate[ Exp[-I t x] cf1/(2 Pi)/.{α-> 1.5,β->-1},{t,-∞,∞},Method->{Automatic,"SymbolicProcessing"->0}]],{x,-5,5},PlotRange->All,PerformanceGoal->"Speed"]

The integral can be simplified to just use two times the portion from {t, 0, ∞} as the real portion is symmetric about t.

ig1 = 2 FullSimplify[Exp[-I t x] cf1/(2 Pi), {t > 0}]

ig1=2 FullSimplify[Exp[-I t x] cf1/(2 Pi),{t>0}]

Simplifying the real part of this, we can get a more tractable formula.  It does not perform well when x is large or α is less than about 0.7.

ig1a = FullSimplify[ComplexExpand[ig1][[1]], t > 0]
Plot[{NIntegrate[ig1a /. {α -> 1.5, β -> -1}, {t, 0, ∞}, Method -> {Automatic, "SymbolicProcessing" -> 0}], Quiet[NIntegrate[ig1a /. {α -> 0.4, β -> -0.5}, {t, 0, ∞}, Method -> {Automatic, "SymbolicProcessing" -> 0}]]}, {x, -5, 5}, PlotRange -> All, PerformanceGoal -> "Speed"]

ig1a=FullSimplify[ComplexExpand[ig1][[1]],t>0]
Plot[{NIntegrate[ig1a/.{α-> 1.5,β->-1},{t,0,∞},Method->{Automatic,"SymbolicProcessing"->0}],Quiet[NIntegrate[ig1a/.{α-> 0.4,β->-0.5},{t,0,∞},Method->{Automatic,"SymbolicProcessing"->0}]]},{x,-5,5},PlotRange->All,PerformanceGoal->"Speed"]

The Zolotarev transformation transforms the parameter t of the integrand to t ->z = r (e^(i θ)) .

ig2 = ig1 /. t -> r Exp[I θ]

ig2= ig1/.t-> r Exp[I θ]

The above equation will need to be solved for r such that the integrand is Real.  The easiest way to do this is to remove the factor (1/π) then solve for r such that the exponent is real.

ig3 = PowerExpand[Log[ π ig2]]

ig3=PowerExpand[Log[ π ig2]]

To make some of the terms simpler we substitute -β Tan[((π α)/2)]-> ζ.

ig4 = ig3 /. β Tan[π α/2] -> ζ /. ζ -> -ζ

ig4=ig3/.β Tan[π α/2]-> ζ/.ζ->-ζ

The next steps isolate the real and imaginary parts of the integrand.

ig5 = Expand[ExpToTrig[ig4]]
igi = Select[ig5, #[[1]] == i || #[[1]] == -i &]
igr = ig5 - igi

ig5=Expand[ExpToTrig[ig4]]
igi=Select[ig5,#[[1]]==I||#[[1]]==-I&]
igr=ig5-igi

Next we solve for r so that the imaginary will be equal to zero.

rsol = Solve[-I igi == 0, r]

rsol=Solve[-I igi==0,r]

The exponent of the integrand then becomes

ig6 = igr /. rsol[[1]]
ig7 = FullSimplify[PowerExpand[ig6]]

ig6=igr/.rsol[[1]]
ig7=FullSimplify[PowerExpand[ig6]]

Both x and r must be greater than zero for this to be real

r1 = rsol[[1]][[1]][[2]]
t0 = Solve[r1 == 0, θ];
t1 = FullSimplify[t0, {0 < α <= 2, ζ ∈ Reals}]

r1=rsol[[1]][[1]][[2]]
t0=Solve[r1==0,θ];
t1=FullSimplify[t0,{0<α≤2,ζ∈ Reals}]

Using the Nolan nomenclature we will take θ0 to be ((ArcTan[β Tan[((π α)/2)]])/α) and ζ to be -Tan[α θ0] the domain of the integral will be  to -Pi/2 to θ0

ig8 = ig7 /. ζ -> - Tan[α θ0];
ig9 = FullSimplify[ig8]

ig8=ig7/.ζ-> - Tan[α θ0];
ig9=FullSimplify[ig8]

Next we turn attention to converting Re[dt] to Re[dθ]

ExpToTrig[r Exp[I θ]]
dz1 = D[r1 Cos[θ], θ] /. ζ -> - Tan[α θ0];
dz2 = FullSimplify[dz1]

ExpToTrig[r Exp[I θ]]
dz1=D[r1 Cos[θ],θ]/.ζ-> - Tan[α θ0];
dz2=FullSimplify[dz1]

Remove the x terms

v1 = (-1 + α)/α dz2 /. x -> 1
v2 = FullSimplify[-ig9 /. x -> 1]

v1=(-1+α)/α dz2/.x->1
v2=FullSimplify[-ig9/.x->1]

v1 and v2 are actually the same, but it takes a little manipulation to show this.  Removing ((Sec[θ])^(1/(1-α))) from the first part of v2 and adding it to the second term will accomplish the proof.

v2a=-(Cot[α (θ-θ0)] ((Sec[θ])^(α/(1-α)))+((Sec[θ])^(1/(1-α))) Sin[θ])
v2a1 =FullSimplify[v2a /((Sec[θ])^(1/(1-α)))]
v2a2=TrigReduce[v2a1]
v3= v2a2  ((Sec[θ])^(1/(1-α)))(((-Sec[α θ0] Sin[α (θ-θ0)]))^(1/(1-α)))
FullSimplify[PowerExpand[v3]==PowerExpand[v1]]

Now collect all the pieces and put them together.  The absolute value prevents a negative density when α <  1.  We reverse the sign of θ to put the integration in the same direction described in the Nolan paper.

c=(α/(π Abs[-1+α]))
v=FullSimplify[v1/.θ-> -θ];
ig=c  (x^(-(1/(1-α)))) v Exp[- (x^(α/(-1+α))) v]

The integral that we have derived is valid only for x > 0.  We get x < 0 by stable symmetry.

pdf[x_,α_,β_]:=With[{θ0=ArcTan[β Tan[π α/2]]/α},
(((x^(-(1/(1-α)))) α)/(π Abs[-1+α])) NIntegrate[(E^(-(x^(α/(-1+α))) Cos[θ-α θ-α θ0] Csc[α (θ+θ0)] (((Sec[θ] Sec[α θ0] Sin[α (θ+θ0)]))^(1/(1-α))))) 
Cos[θ-α θ-α θ0] Csc[α (θ+θ0)] (((Sec[θ] Sec[α θ0] Sin[α (θ+θ0)]))^(1/(1-α))),{θ,-θ0,Pi/2},Method->{Automatic,"SymbolicProcessing"->0}]]/;α≠1&&x>0
pdf[x_,α_,β_]:=pdf[-x,α,-β]/;α≠1&&x<0

We haven't defined what the value is when x = 0, but it happens that we can get that from the original form.

ig1a
Integrate[ig1a /. x -> 0, {t, 0, ∞}, Assumptions -> {0 < α <= 2, -1 <= β <= 1}]

ig1a
Integrate[ig1a/.x->0,{t,0,∞},Assumptions-> {0<α≤2,-1≤β≤1}]

Thus

pdf[x_,α_,β_]:= ((Cos[((ArcTan[β Tan[((π α)/2)]])/α)] Gamma[1+(1/α)] (((1+(β^2) ((Tan[((π α)/2)])^2)))^(-(1/(2 α)))))/π)/;α≠1&&x==0

Now we have the whole thing and can show the better performance of the transformed integral, which is not troubled by infinite oscillation.

Plot[{pdf[x, 1.3, -1], pdf[x, 0.4, -0.5]}, {x, -10, 10}, PlotRange -> All, PerformanceGoal -> "Speed"]

Plot[{pdf[x,1.3,-1],pdf[x,0.4,-0.5]},{x,-10,10},PlotRange->All,PerformanceGoal->"Speed"]

This page is an experiment to see if there is interest in more of this level information.  If you would like to see more technical information on stable distributions, send an email.  A graphical demonstration of the integrand for the distribution function, is on the Wolfram Demonstrations Project.

txcolor=RGBColor[181/255,18/255,27/255];
t1 = Graphics[Text[Hyperlink[Framed[Style["Financial Home", {txcolor, Bold, Larger}]], "../map/Overview.html"], {-5, 0}]];
t2 = Graphics[Text[Hyperlink[Framed[Style["Next", {txcolor, Bold, Larger}]], "../uc/UnderConstruction.html"], {0, -0.5}]];
t3 = Graphics[Text[Hyperlink[Framed[Style["Download Notebook", {txcolor, Bold, Larger}]], "../zn/Zolotarev.nb"], {5, 0}]];
t4 = Graphics[Text[Hyperlink[Framed[Style["Previous", {txcolor, Bold, Larger}]], "../s01/StableDensity.html"], {0, 0.5}]];
Show[ t1, t2, t3, t4, ImageSize -> 500]
CellPrint[TextCell["\n\n© Copyright " <> ToString[DateList[][[1]]] <> " mathestate    " <> DateString[DateList[], "DateShort"], "Text"]]

© Copyright 2009 mathestate    Wed 14 Jan 2009