我希望能够完全以数字方式完成下面的积分。
其中,和,和是常量,为简单起见,这些常量都可以设置为1
。
x
上的积分可以通过手工或使用Mathematica进行分析,然后y
上的积分可以使用NIntegrate以数字方式完成,但这两种方法给出了不同的答案。
从分析:
In[160]:= ex := 2 (1 - Cos[x])
In[149]:= ey := 2 (1 - Cos[y])
In[161]:= kx := 1/(1 + Exp[ex])
In[151]:= ky := 1/(1 + Exp[ey])
In[162]:= Fn1 := 1/(2 \[Pi]) ((Cos[(x + y)/2])^2)/(ex - ey)
In[163]:= Integrate[Fn1, {x, -Pi, Pi}]
Out[163]= -(1/(4 \[Pi]))
If[Re[y] >= \[Pi] || \[Pi] + Re[y] <= 0 ||
y \[NotElement] Reals, \[Pi] Cos[y] - Log[-Cos[y/2]] Sin[y] +
Log[Cos[y/2]] Sin[y],
Integrate[Cos[(x + y)/2]^2/(Cos[x] - Cos[y]), {x, -\[Pi], \[Pi]},
Assumptions -> ! (Re[y] >= \[Pi] || \[Pi] + Re[y] <= 0 ||
y \[NotElement] Reals)]]
In[164]:= Fn2 := -1/(
4 \[Pi]) ((\[Pi] Cos[y] - Log[-Cos[y/2]] Sin[y] +
Log[Cos[y/2]] Sin[y]) (1 - ky) ky )/(2 \[Pi])
In[165]:= NIntegrate[Fn2, {y, -Pi, Pi}]
Out[165]= -0.0160323 - 2.23302*10^-15 I
数值方法1:
In[107]:= Fn4 :=
1/(4 \[Pi]^2) ((Cos[(x + y)/2])^2) (1 - ky) ky/(ex - ey)
In[109]:= NIntegrate[Fn4, {x, -Pi, Pi}, {y, -Pi, Pi}]
During evaluation of In[109]:= NIntegrate::slwcon: Numerical integration converging too slowly; suspect one of the following: singularity, value of the integration is 0, highly oscillatory integrand, or WorkingPrecision too small. >>
During evaluation of In[109]:= NIntegrate::ncvb: NIntegrate failed to converge to prescribed accuracy after 18 recursive bisections in x near {x,y} = {0.0000202323,2.16219}. NIntegrate obtained 132827.66472461013` and 19442.543606302774` for the integral and error estimates. >>
Out[109]= 132828.
数字2:
In[113]:= delta = .001;
pw[x_, y_] := Piecewise[{{1, Abs[Abs[x] - Abs[y]] > delta}}, 0]
In[116]:= Fn5 := (Fn4)*pw[Cos[x], Cos[y]]
In[131]:= NIntegrate[Fn5, {x, -Pi, Pi}, {y, -Pi, Pi}]
During evaluation of In[131]:= NIntegrate::slwcon: Numerical integration converging too slowly; suspect one of the following: singularity, value of the integration is 0, highly oscillatory integrand, or WorkingPrecision too small. >>
During evaluation of In[131]:= NIntegrate::eincr: The global error of the strategy GlobalAdaptive has increased more than 2000 times. The global error is expected to decrease monotonically after a number of integrand evaluations. Suspect one of the following: the working precision is insufficient for the specified precision goal; the integrand is highly oscillatory or it is not a (piecewise) smooth function; or the true value of the integral is 0. Increasing the value of the GlobalAdaptive option MaxErrorIncreases might lead to a convergent numerical integration. NIntegrate obtained 0.013006903336304906` and 0.0006852739534086272` for the integral and error estimates. >>
Out[131]= 0.0130069
因此,这两种数值方法都没有给出-0.0160323
。我理解为什么 - 第一种方法在分母引起的无穷大方面遇到麻烦,第二种方法有效地删除了引起问题的积分部分。但我希望能够整合另一个积分(一个比x
,y
和z
更难的积分),这些积分无法通过分析进行简化。上面的积分为我提供了一种测试任何新方法的方法,因为我知道答案应该是什么。
答案 0 :(得分:3)
除非我记下错误,否则这应该可以胜任:
n[x_] := 1/(1 + Exp[eps[x]])
eps[x_] := 2(1 - Cos[x])
.25/(2*Pi)^2*NIntegrate[
Cos[(x + y)/
2]^2 ((1 - n[y]) n[y] - (1 - n[x]) n[x])/(Cos[y] - Cos[x]),
{x, -Pi, Pi},
{y, -Pi, Pi},
Exclusions -> {Cos[x] == Cos[y]}
]
给予0.0130098
。
好的,我想最快解释的方法是这样的:
从第一个eq的第一行到第二行我刚刚将y重命名为x(积分区域是对称的,所以没关系)。然后我为I添加了两个(等效的)表达式以获得2I,我在数字上整合的是那个。关键是分子和分母在相同的点消失,所以实际上不需要Exclusions
选项。请注意,在我上面的方法草图中,为了简洁,我放弃了1/(4*Pi^2)
(或者由于懒惰,取决于观点)。