In response to the question here: https://community.wolfram.com/groups/-/m/t/3295143
On way is:
In[]:=
f[s_]:=ArcCoth[Sqrt[s]]/Sqrt[s];InverseLaplaceTransform[FullSimplify[InverseMellinTransform[f[s]//TrigToExp,s,w,GenerateConditions->False]/.w->Exp[t],Assumptions->t>0],t,x]
Out[]=
HeavisideTheta[1-x]
2
x
In[]:=
Simplify[%,Assumptions->0<x<1]
Out[]=
1
2
x
Another way:
In[]:=
Simplify[InverseMellinTransform[Simplify[InverseMellinTransform[f[s]//TrigToExp,s,Exp[t],GenerateConditions->False],Assumptions->t>0],t,Exp[-x],GenerateConditions->False],Assumptions->x>0]
Out[]=
HeavisideTheta[1-x]
2
x
In[]:=
InverseStieltjesTransform=1/π^2*Integrate[1/(s-x)*f[s],{x,-Infinity,Infinity},PrincipalValue->True]==Simplify[-1/Pi*InverseFourierTransform[-ISign[z]FourierTransform[f[s],s,z,FourierParameters->{1,-1}],z,x,FourierParameters->{1,-1}],Assumptions->x>0]==Simplify[1/Pi*InverseFourierTransform[I*(2*HeavisideTheta[z]-1)*FourierTransform[f[s],s,z,FourierParameters->{1,-1}],z,x,FourierParameters->{1,-1}],Assumptions->x>0]
Stieltjes transform of:
Let:
In[]:=
$Version
Out[]=
14.1.0 for Microsoft Windows (64-bit) (July 16, 2024)
In[]:=
func={Sin[x],Cos[x],Exp[Ix],1/(2Sqrt[x]),Piecewise[{{1/(2*Sqrt[x]),0<x<1}},0]};(*Functionexamples.*)
In[]:=
A=Integrate[1/(s-x)*(#),{x,-Infinity,Infinity},PrincipalValue->True]&/@func(*StieltjesTransform*)
Out[]=
,,,,
|
In[]:=
A1=Integrate[1/(s-x)*(#),{x,-Infinity,Infinity},PrincipalValue->True,GenerateConditions->False]&/@func(*StieltjesTransform*)
Out[]=
,
,
,-2π-,
|
|
|
1
4
1
s
-2Log-+2Log+Log-+Log[s]
1
s
1
s
1
s
s
2ArcCoth[-Log
s
]+Log-1
s
1
s
2
s
In[]:=
B=1/π^2*Integrate[1/(s-x)*(#),{s,-Infinity,Infinity},PrincipalValue->True]&/@A(*InverseStieltjesTransform*)Simplify[B,Assumptions->x>0](*OK,can'tcalculate*)
In[]:=
B1=1/π^2*Integrate[1/(s-x)*(#)//Expand,{s,-Infinity,Infinity},PrincipalValue->True,Assumptions->x>0]&/@A1[[1;;4]](*OK!InverseStieltjesTransform*)
Out[]=
Sin[x],Cos[x],,
x
1
2
x
Hard example to invert :
In[]:=
1/π^2*Integrate[1/(s-x)*(-(π/(2Sqrt[-s]))),{s,-Infinity,Infinity},PrincipalValue->True,Assumptions->x>0](*InverseStieltjesTransform.OkWorksfine*)
Out[]=
1
2
x
In[]:=
1/π^2*Integrate[1/(s-x)*(1/4(-2IπSqrt[1/s]-(-2Log[-(1/s)]+2(Log[1/s]+Log[-(1/Sqrt[s])])+Log[s])/Sqrt[s])),{s,-Infinity,Infinity},PrincipalValue->True,Assumptions->x>0](*InverseStieltjesTransform.OkWorksfine*)
Out[]=
1
2
x
1/π^2*Integrate[1/(s-x)*(Piecewise[{{ArcTanh[1/Sqrt[s]]/Sqrt[s],Re[s]>=1||Re[s]<=0||Im[s]>0||Im[s]<0}},ArcTanh[Sqrt[s]]/Sqrt[s]]),{s,-Infinity,Infinity},PrincipalValue->True,Assumptions->x>0](*InverseStieltjesTransform.IAbortedtolongtimetocompute!*)
1/π^2*Integrate[1/(s-x)*((2ArcCoth[Sqrt[s]]+Log[-(1/s)]-Log[1/s])/(2Sqrt[s])),{s,-Infinity,Infinity},PrincipalValue->True,Assumptions->x>0](*InverseStieltjesTransform.IAbortedtolongtimetocompute!*)
Simplify[-1/Pi*InverseFourierTransform[-ISign[z]*FourierTransform[Piecewise[{{ArcTanh[1/Sqrt[s]]/Sqrt[s],Re[s]>=1||Re[s]<=0||Im[s]>0||Im[s]<0}},ArcTanh[Sqrt[s]]/Sqrt[s]],s,z,FourierParameters->{1,-1}],z,x,FourierParameters->{1,-1}],Assumptions->x>0](*InverseStieltjesTransform.IAbortedtolongtimetocompute!*)
Workaround for one hard example, I use a Trick:
L=Assuming[x∈Reals,1/π^2*Integrate[1/(s-x)*(D[Piecewise[{{ArcTanh[Q/Sqrt[s]]/Sqrt[s],Re[s]>=1||Re[s]<=0||Im[s]>0||Im[s]<0}},ArcTanh[Q*Sqrt[s]]/Sqrt[s]],Q]),{s,-Infinity,Infinity},PrincipalValue->True]]L1=FullSimplify[L,Assumptions->{0<Q<1,x∈Reals}]Integrate[L1,{Q,0,1},Assumptions->x∈Reals](*Toolongtimetocompute!!!*)
We compute numerically:
In[]:=
R[x_]:=NIntegrate[Piecewise[{{Log[-(((-1+Q^2)*x)/(-1+x))]/(-1+Q^2*x)-Log[-(((-1+Q^2)*x)/(Q^2*(-1+x)))]/(Q^2-x),x>1},{((-I)*Pi+Log[((-1+Q^2)*x)/(-1+x)])/(-1+Q^2*x)-Log[-(((-1+Q^2)*x)/(Q^2*(-1+x)))]/(Q^2-x),x<=0}},Log[((-1+Q^2)*x)/(-1+x)]/(-1+Q^2*x)-Log[((-1+Q^2)*x)/(Q^2*(-1+x))]/(Q^2-x)]/Pi^2,{Q,0,1}];Plot[{R[x],Piecewise[{{1/(2*Sqrt[x]),0<x<1}},0]},{x,0,2},PlotStyle->{Red,{Dashed,Black}},PlotLabels->{"numeric","analytically"}]
Out[]=
Computing Inverse Stieltjes transform numerically:
In[]:=
N[Piecewise[{{1/(2*Sqrt[x]),0<x<1}},0]/.x->1/2,20]
Out[]=
0.70710678118654752440
In[]:=
g[s_]:=(Piecewise[{{ArcTanh[1/Sqrt[s]]/Sqrt[s],Re[s]>=1||Re[s]<=0||Im[s]>0||Im[s]<0}},ArcTanh[Sqrt[s]]/Sqrt[s]])
In[]:=
1/π^2*NIntegrate[1/(s-x)*g[s]/.x->1/2,{s,-Infinity,1/2,Infinity},Method->"PrincipalValue",WorkingPrecision->20]
Out[]=
0.70710678118654752494
Another example:
In[]:=
X=LaplaceTransform[MomentGeneratingFunction[NormalDistribution[μ,σ],t],t,s]
Out[]=
-
-
2
(s-μ)
2
2
σ
π
2
-
+σErfi2
σ
-s+μ
2
σ2
σ
In[]:=
X1=X/.μ->1/2/.σ->1/3
Out[]=
-9+Erfi
-
9
2
2
-+s
1
2
π
2
3
1
3
3-s
1
2
2
In[]:=
1/π^2*NIntegrate[1/(s-x)*X1/.x->1,{s,-Infinity,1,Infinity},Method->"PrincipalValue",WorkingPrecision->20]
Out[]=
0.38855278699767518268+0.71823717421850285373
and here’ s the puzzle, I don’ t know why I have to take the real part
In[]:=
Re[%]
Out[]=
0.38855278699767518268
In[]:=
N[PDF[NormalDistribution[μ,σ],x]/.μ->1/2/.σ->1/3/.x->1,20]
Visualizing density given by its Stieltjes transformation
Visualizing density given by its Stieltjes transformation
In response to the question here: https://mathematica.stackexchange.com/q/286914/27878
Using Numeric Inverse Stieltjes Transform from here: https://community.wolfram.com/groups/-/m/t/3302428
Method One
Method Two
Two Methods on one Plot
Let try:
Using:
Then:
Inverse Stieltjes Transform - method 1
Inverse Stieltjes Transform - method 2
Inverse Stieltjes Transform - method 3
Inverse Stieltjes Transform - method 4
Inverse Stieltjes Transform - method 5
Inverse Stieltjes Transform - method 6
Inverse Stieltjes Transform - method 7
Computing with Numerics:
Could say that the solution is distribution nature that’s why numeric’s methods fail.
CITE THIS NOTEBOOK
CITE THIS NOTEBOOK
Inverse Stieltjes transform implementation
by Mariusz Iwaniuk
Wolfram Community, STAFF PICKS, October 18, 2024
https://community.wolfram.com/groups/-/m/t/3302428
by Mariusz Iwaniuk
Wolfram Community, STAFF PICKS, October 18, 2024
https://community.wolfram.com/groups/-/m/t/3302428