fixed in 10.1 (windows)
For a parameter $t\in (0,1)$
$Assumptions = t ∈ Reals && t > 0 && t < 1
I define an obviously positive function $f(x)=\left| \Re \left(\frac{\exp(ix)}{1-t\exp(ix)}\right)\right|$
f[x_] = Abs[Re[Exp[I*x]/(1 - t*Exp[I*x])]]
Mathematica 9.0.1.0 calculates the integral
Integrate[f[x], {x, 0, 2 π}]
as $-2 \pi /t$ which is negative. What is the problem?
Answer
As you notniced, the result is not correct. This is not uncommon with definite integrals, as the system needs to detect any special behaviour inbetween the integration bounds, which is hard. For this reason it's a good idea to verify such integrals numerically.
We can get the correct result like this (please evaluate in a fresh kernel without $Assumptions
).
First, for numerical verification:
F[t_?NumericQ] := NIntegrate[ Abs@Re[Exp[I*x]/(1 - t*Exp[I*x])], {x, 0, 2Pi} ]
Plot[F[t], {t, -5, 5}, MaxRecursion -> 2]
We see that it has a different behaviour for $-1 < t < 1$ than for $|t| > 1$. That's because the integrand, without the Abs
, changes sign in $[0, 2\pi]$ when $|t| < 1$:
Manipulate[
Plot[Re[Exp[I*x]/(1 - t*Exp[I*x])], {x, 0, 2 Pi}, PlotRange -> All],
{t, -2, 2}
]
Mathematica managed to get the correct result this way:
fun = Re[Exp[I*x]/(1 - t*Exp[I*x])] // ComplexExpand // Simplify
(* (-t + Cos[x])/(1 + t^2 - 2 t Cos[x]) *)
Integrate[Abs[fun], {x, 0, 2 Pi}, Assumptions -> 0 < t < 1]
(* (π - ArcCos[t] + I ArcCosh[t] +
2 ArcTan[(-1 + t)/Sqrt[1 - t^2]] -
2 ArcTan[((1 + t) Tan[ArcCos[t]/2])/(-1 + t)])/t *)
res = FullSimplify[%, 0 < t < 1]
(* ((3 π)/2 + I ArcCosh[t] + ArcSin[t] +
4 ArcTan[(-1 + t)/Sqrt[1 - t^2]])/t *)
Then verify numerically:
Table[res - F[t], {t, 0, 1, .1}] // Chop
{Indeterminate, -5.7728*10^-7, -1.70775*10^-7, -1.8055*10^-6, -8.52578*10^-8,
7.67182*10^-8, -5.98418*10^-7, -1.16494*10^-6, -7.9843*10^-7,
4.67139*10^-7, Indeterminate}
It agrees with the numerical calculation up to a small numerical error.
Alternatively, we might try to find where fun == 0
and manually piece the integral together from two parts where fun > 0
and fun < 0
. Then we don't need to rely on Integrate
being able to handle this simplified Abs[fun]
. I can show how on request.
Comments
Post a Comment