In[]:=
deploy
Tue 6 Jul 2021 17:13:01
Exponential integral
Exponential integral
Use approximation
s
(1-)
-p
i
-p
i
≃exp(-)
p
si
In[]:=
With[{p=1.1,s=100,n=1000},Print["exact: ",Sum[,{i,1,n}]];Print["integral1: ",Integrate[,{i,1,n}]];Print["integral2: ",Integrate[Exp[-s],{i,1,n}]]]
s
(1-)
-p
i
-p
i
s
(1-)
-p
i
-p
i
-p
i
-p
i
exact: 1.28971
integral1: 1.28947
integral2: 1.29258
In[]:=
solveExact[p_,n_,eps_]:=formula[s_]=Sum,{i,1,n};invert[f_]:=FindRoot[f[s]eps,{s,2},WorkingPrecisionMachinePrecision+Log[n]];s/.invert[formula];solveIntegralExp[p_,n_,eps_]:=(*hardcodeoutputofIntegrate[Exp[-s],{i,1,n}]*)f[s_]=ExpIntegralE,s-ExpIntegralE,sZeta[p];invert[f_]:=FindRoot[f[s]eps,{s,100}];SetPrecision[s/.invert[f],5];
1
HarmonicNumber[n,p]
s
1-
1
p
i
1
p
i
-p
i
-p
i
1-p
n
1
p
-p
n
1
p
p
Compare exact and approximate solutions
In[]:=
eps=;n=1000;solveExact[2,n,eps]solveIntegralExp[2,n,eps]
-2
10
Out[]=
2582.0880492818863065699
Out[]=
2579.7
In[]:=
plot1=With[{p=1.5,eps=},DiscretePlot[solveIntegralExp[p,n,eps],{n,100,100000,1000},FillingAxis,FillingStyleOpacity[.5],AxesLabel{"n","s"},PlotLabel{"ϵ"≐N[eps],"p"≐p}]]
-2
10
Out[]=
In[]:=
plot2=With[{p=1.8,eps=},DiscretePlot[solveIntegralExp[p,n,eps],{n,100,100000,1000},FillingAxis,FillingStyleOpacity[.5],AxesLabel{"n","s"},PlotLabel{"ϵ"≐N[eps],"p"≐p},PlotRangeAll]]
-2
10
Out[]=
In[]:=
GraphicsRow[{plot1,plot2}]
Out[]=