Bug introduced in 8.0.4 or earlier and persisting through 11.3
In the course of developing an alternative solution for question 127301,
With,
$Version
(* "11.0.0 for Microsoft Windows (64-bit) (July 28, 2016)" *)
I attempted to perform the integral,
um = -(2/3) - 2/(3 (-1 + u)) - (2 u)/3 + u^2/3;
up = -(10/3) - 2/(3 (-1 + u)) + (8 u)/3 - u^2/3;
sv = Piecewise[{{um, u <= 1}, {up, u > 1}}];
Integrate[sv, {u, 0, 2}, PrincipalValue -> True]
but received the error message,
Integrate: Integral of ... does not converge on {0,2}.
Separating the term, -(2/(3 (-1 + u)))
, does not help.
sv1 = Piecewise[{{um + 2/(3 (-1 + u)), u <= 1}, {up + 2/(3 (-1 + u)), u > 1}}];
Integrate[sv1 - 2/(3 (-1 + u)), {u, 0, 2}, PrincipalValue -> True]
yielding the same error message. Yet,
Integrate[sv1, {u, 0, 2}] -
Integrate[2/(3 (-1 + u)), {u, 0, 2}, PrincipalValue -> True]
(* -1 *)
does work. (The second integral equals 0
, incidentally.) Is this a bug, or am I missing something? Thanks.
(Note that 10.4.1 produces the same results.)
Addendum: Workaround
Slightly shifting the Piecewise
boundary at u = 1
so that the singular point lies within one or the other segment gives an accurate result. For instance, redefining sv
as
sv = Piecewise[{{um, u <= 1 + 10^-10}, {up, u > 1 + 10^-10}}];
allows sv
to be integrated by Integrate
.
Integrate[sv, {u, 0, 2}, PrincipalValue -> True] // FullSimplify
(* -(4500000000000000000044999999999/4500000000000000000000000000000) *)
which is 1.
to 20 significant figures. That this occurs is consistent with the suggestion by MichaelE2 that Integrate
integrates each segment of Piecewise
independently and, therefore, cannot handle singularities at the boundary between two segments. Nonetheless, I believe that it should be able to. Failing that, the documentation should describe this limitation.
$Version
information. $\endgroup$PiecewiseExpand
is applied to the integrand, the integral of the resultingPiecewise
function is broken up according to the pieces, and the principal value of each piece is computed. And the integrals of the pieces diverge. FWIW,GenerateConditions -> False
gives the right answer plus half the contribution of the pole atu == 1
. $\endgroup$1.001
(for instance) gives a reasonable result. ButIntegrate
should recognize a singularity at the boundary between two pieces ofPiecewise
and withPrincipalValue -> True
attempt to match it with a singularity at the other side of the boundary (obtained usingSeries
, perhaps). If it cannot, the documentation should say so. $\endgroup$Re@Integrate[sv, {u, 0, 2}, PrincipalValue -> True, GenerateConditions -> False]
seems nearly satisfactory to me, given the pole makes a predictably purely imaginary contribution; but maybe my standards for symbolic integration are low. :) $\endgroup$