让Mathematica 7或8进行积分
的最佳方法是什么NIntegrate[Exp[-x]/Sin[Pi x], {x, 0, 50}]
每个整数都有极点 - 我们需要Cauchy原理值。 我们的想法是从0到无穷大得到一个很好的近似值。
使用Integrate
,可以选择PrincipleValue -> True
。
使用NIntegrate
我可以给它选项Exclusions -> (Sin[Pi x] == 0)
,或者通过
NIntegrate[Exp[-x]/Sin[Pi x], Evaluate[{x, 0, Sequence@@Range[50], 50}]]
原始命令和上述两个NIntegrate
技巧会给出结果60980 +/- 10
。但他们都吐出了错误。在没有Mathematica想要给出错误的情况下,获得快速可靠结果的最佳方法是什么?
答案 0 :(得分:7)
In[52]:= f[k_Integer, eps_Real] :=
NIntegrate[Exp[-x]/Sin[Pi x], {x, k + eps, k + 1 - eps}]
In[53]:= Sum[f[k, 1.0*10^-4], {k, 0, 50}]
Out[53]= 2.72613
In[54]:= Sum[f[k, 1.0*10^-5], {k, 0, 50}]
Out[54]= 3.45906
In[55]:= Sum[f[k, 1.0*10^-6], {k, 0, 50}]
Out[55]= 4.19199
看起来问题是在x == 0。对于k的整数值,将积分k + eps分裂为k + 1-eps:
In[65]:= int =
Sum[(-1)^k Exp[-k ], {k, 0, Infinity}] Integrate[
Exp[-x]/Sin[Pi x], {x, eps, 1 - eps}, Assumptions -> 0 < eps < 1/2]
Out[65]= (1/((1 +
E) (I + \[Pi])))E (2 E^(-1 + eps - I eps \[Pi])
Hypergeometric2F1[1, (I + \[Pi])/(2 \[Pi]), 3/2 + I/(2 \[Pi]),
E^(-2 I eps \[Pi])] +
2 E^(I eps (I + \[Pi]))
Hypergeometric2F1[1, (I + \[Pi])/(2 \[Pi]), 3/2 + I/(2 \[Pi]),
E^(2 I eps \[Pi])])
In[73]:= N[int /. eps -> 10^-6, 20]
Out[73]= 4.1919897038160855098 + 0.*10^-20 I
In[74]:= N[int /. eps -> 10^-4, 20]
Out[74]= 2.7261330651934049862 + 0.*10^-20 I
In[75]:= N[int /. eps -> 10^-5, 20]
Out[75]= 3.4590554287709991277 + 0.*10^-20 I
如你所见,存在对数奇点。
In[79]:= ser =
Assuming[0 < eps < 1/32, FullSimplify[Series[int, {eps, 0, 1}]]]
Out[79]= SeriesData[eps, 0, {(I*(-1 + E)*Pi -
2*(1 + E)*HarmonicNumber[-(-I + Pi)/(2*Pi)] +
Log[1/(4*eps^2*Pi^2)] - 2*E*Log[2*eps*Pi])/(2*(1 + E)*Pi),
(-1 + E)/((1 + E)*Pi)}, 0, 2, 1]
In[80]:= Normal[
ser] /. {{eps -> 1.*^-6}, {eps -> 0.00001}, {eps -> 0.0001}}
Out[80]= {4.191989703816426 - 7.603403526913691*^-17*I,
3.459055428805136 -
7.603403526913691*^-17*I,
2.726133068607085 - 7.603403526913691*^-17*I}
修改强> 上面代码的[79]给出了eps-> 0的系列扩展,如果这两个对数项合并,我们得到
In[7]:= ser = SeriesData[eps, 0,
{(I*(-1 + E)*Pi - 2*(1 + E)*HarmonicNumber[-(-I + Pi)/(2*Pi)] +
Log[1/(4*eps^2*Pi^2)] - 2*E*Log[2*eps*Pi])/(2*(1 + E)*
Pi),
(-1 + E)/((1 + E)*Pi)}, 0, 2, 1];
In[8]:= Collect[Normal[PowerExpand //@ (ser + O[eps])],
Log[eps], FullSimplify]
Out[8]= -(Log[eps]/\[Pi]) + (
I (-1 + E) \[Pi] -
2 (1 + E) (HarmonicNumber[-((-I + \[Pi])/(2 \[Pi]))] +
Log[2 \[Pi]]))/(2 (1 + E) \[Pi])
显然-Log [eps] / Pi来自x == 0的极点。因此,如果有人减去这个,就像原则值方法一样,对于其他极点,你最终会得到一个有限的值:
In[9]:= % /. Log[eps] -> 0
Out[9]= (I (-1 + E) \[Pi] -
2 (1 + E) (HarmonicNumber[-((-I + \[Pi])/(2 \[Pi]))] +
Log[2 \[Pi]]))/(2 (1 + E) \[Pi])
In[10]:= N[%, 20]
Out[10]= -0.20562403655659928968 + 0.*10^-21 I
当然,这个结果很难以数字方式验证,但您可能对我的问题了解得更多。
编辑2
此编辑用于证明在[65]输入中计算原始正则化积分。我们正在计算
Sum[ Integrate[ Exp[-x]/Sin[Pi*x], {x, k+eps, k+1-eps}], {k, 0, Infinity}] ==
Sum[ Integrate[ Exp[-x-k]/Sin[Pi*(k+x)], {x, eps, 1-eps}], {k, 0, Infinity}] ==
Sum[ (-1)^k*Exp[-k]*Integrate[ Exp[-x]/Sin[Pi*x], {x, eps, 1-eps}],
{k, 0, Infinity}] ==
Sum[ (-1)^k*Exp[-k], {k, 0, Infinity}] *
Integrate[ Exp[-x]/Sin[Pi*x], {x, eps, 1-eps}]
在第三行Sin [Pi *(k + x)] ==(-1)^ k *使用整数k的Sin [Pi * x]。
答案 1 :(得分:4)
西蒙,我没有花太多时间在积分上,但你应该试着看stationary phase approximation。你所拥有的是平滑函数(exp)和高振荡函数(正弦)。所涉及的工作现在正在将1/sin(x)
压缩成exp(if(x))
或者,您可以使用cosecant
的系列扩展(在极点无效):
In[1]:=Series[Csc[x], {x, 0, 5}]
(formatted) Out[1]=1/x + x/6 + 7/360 x^3 + 31/15120 x^5 +O[x]^6
请注意,对于所有m>-1
,您有以下内容:
In[2]:=Integrate[x^m Exp[-x], {x, 0, Infinity}, Assumptions -> m > -1]
Out[2]=Gamma[1+m]
然而,将系列与cosecant系数(来自维基百科)相加,不包括1/x Exp[-x]
个案,但不会收敛于[0,Infinity]
。
c[m_] := (-1)^(m + 1) 2 (2^(2 m - 1) - 1) BernoulliB[2 m]/Factorial[2 m];
Sum[c[m] Gamma[1 + 2 m - 1], {m, 1, Infinity}]
也没有收敛...
所以,我不确定你是否可以计算出无穷大积分的近似值,但是如果你对某个大N的解决方案感到满意,我希望这些有用。
答案 2 :(得分:4)
我必须同意Sasha,积分似乎不会收敛。但是,如果您排除x == 0
并将整数分成几部分
Integrate[Exp[-x]/Sin[Pi x], {x, n + 1/2, n + 3/2}, PrincipalValue -> True]
其中n >= 0 && Element[n, Integers]
,那么看起来你可能会得到一个交替的系列
I Sum[ (-1/E)^n, {n, 1, Infinity}] == - I / (1 + E )
现在,我只把它拿出来n == 4
,但看起来很合理。但是,对于上面的积分Assumptions -> Element[n, Integers] && n >= 0
Mathematica给出
If[ 2 n >= 1, - I / E, Integrate[ ... ] ]
只是不符合个别情况。另外要注意,如果极点位于积分区域的边界,即您的极限是{x, n, n + 1}
,则只能获得DirectedInfinity
s。快速浏览一下情节意味着你有限制{x, n, n + 1}
你只有一个严格正或负的被积函数,所以无限值可能是由于{x, n + 1/2, n + 3/2}
给你的补偿不足。检查{x, n, n + 2}
,但它只会吐出未评估的积分。