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.
Answer
I think this is a bug, because if we transform the Piecewise
function into a combination of UnitStep
(which is mathematically equivalent to the original function of course), Integrate
integrates without difficulty:
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 = Simplify`PWToUnitStep@Piecewise[{{um, u <= 1}, {up, u > 1}}];
Integrate[sv, {u, 0, 2}, PrincipalValue -> True]
(* -1 *)
Tested on v9.0.1 and v11.2.
Comments
Post a Comment