10
$\begingroup$

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.

$\endgroup$
5
  • $\begingroup$ w/ v10.1 they just return unevaluated, no error message. $\endgroup$
    – george2079
    Sep 28, 2016 at 21:40
  • $\begingroup$ @george2079 Thanks for the additional information. Also, your comment remained me to add my own $Version information. $\endgroup$
    – bbgodfrey
    Sep 28, 2016 at 21:58
  • $\begingroup$ My guess is that PiecewiseExpand is applied to the integrand, the integral of the resulting Piecewise 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 at u == 1. $\endgroup$
    – Michael E2
    Sep 29, 2016 at 1:58
  • $\begingroup$ @MichaelE2 Your guess seems credible, especially because I now see that moving the boundary to 1.001 (for instance) gives a reasonable result. But Integrate should recognize a singularity at the boundary between two pieces of Piecewise and with PrincipalValue -> True attempt to match it with a singularity at the other side of the boundary (obtained using Series, perhaps). If it cannot, the documentation should say so. $\endgroup$
    – bbgodfrey
    Sep 29, 2016 at 2:21
  • $\begingroup$ 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$
    – Michael E2
    Sep 29, 2016 at 2:29

2 Answers 2

11
$\begingroup$

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.

$\endgroup$
2
  • $\begingroup$ Excellent explanation and workaround. Thanks. I see that Simplify has a large family of sub-functions. Are they documented anywhere? $\endgroup$
    – bbgodfrey
    Sep 29, 2016 at 12:11
  • $\begingroup$ @bbgodfrey As far as I know, they're all undocumented… I learned the usage of Simplify`PWToUnitStep by (accidentally) reading this answer. $\endgroup$
    – xzczd
    Sep 29, 2016 at 12:21
2
$\begingroup$

Another way. Integrate from both sides to small r near the singularity and let r go to zero.

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[u_] = Piecewise[{{um, u <= 1}, {up, u > 1}}];

int = Integrate[sv[u], {u, 0, 1 - r}, Assumptions -> 0 < r < 1] + 
      Integrate[sv[u], {u, 1 + r, 2}, Assumptions -> 0 < r < 1]

(*   1/9 (-8 + 9 r - r^3 - 6 Log[r]) + 
     1/9 (-1 + 9 r - 9 r^2 + r^3 + 6 Log[r])   *)

Limit[int, r -> 0, Direction -> -1]

(*   -1   *)
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.