I am trying to integrate a function $$\int_R \frac{1}{(\sinh|T-t_1+t_2|)^{\frac2m} (\sinh|t_1-t_2|)^{\frac2m}} \left(\frac{\sinh|t_2|}{\sinh|t_1|}\right)^{\frac1m} \left(\frac{\sinh|T-2t_1+t_2|}{\sinh|T-t_1|}\right)^{\frac1m},$$ where $T=10^{-5}, m=3$ are fixed constants, and the integration region is $$R=\{(t_1,t_2)\in\mathbb R^2: t_1<T, t_2<2t_1-T\}.$$ This region is unbounded, but entirely contained in the 3rd quadrant.

The following code does this job:

exp = (Csch[Abs[-T + t1]] Sinh[Abs[-T + 2 t1 - t2]])^(1/
       m) (Csch[Abs[t1]] Sinh[Abs[t2]])^(1/
       m) (Sinh[Abs[t1 - t2]] Sinh[Abs[T - t1 + t2]])^(-2/m);
    rules = {m -> 3, T -> -10^-5}
 exp /. rules,  {t1, -Infinity, T} /.rules, {t2, -Infinity, 2 t1 - T} /. rules, PrecisionGoal -> 10, 
     Exclusions -> {   t1 - t2 == 0, t1 - t2 == -0.00001}]

Then, although the result seems reasonable, I obtain the following error:

NIntegrate::zeroregion: Integration region {{1.,0.99999999999999415148564447489073961419065634827050978249802712372},{0,0.5}} cannot be further subdivided at the specified working precision. NIntegrate assumes zero integral there and on any further indivisible regions.

Why the relevant region is {{1.,0.99999999999999415148564447489073961419065634827050978249802712372},{0,0.5}}? (Note that my integration region is in the 3rd quadrant.)

As the error says, I increased the WorkingPrecision to 30. Then, the above error message does not occur. I also want to ask that whether I really need high working precision. Generally, if we substract large number from large number, the precision of the result matters. However, in my integrand, I only multiply and divide, so I don't expect that the working precision matters.

  • $\begingroup$ You deal with an improper double integral. E.g. the integrand is unbounded at the origin and on the line t1==t2. Its convergence is not clear to me. $\endgroup$
    – user64494
    Commented Oct 24, 2021 at 12:39
  • $\begingroup$ @MichaelE2 Sorry, I modified the code. $\endgroup$
    – Laplacian
    Commented Oct 24, 2021 at 13:50
  • $\begingroup$ @user64494 Yes, but one can prove that the above integral is finite. Indeed, I obtain a reasonable answer while changing $T$. $\endgroup$
    – Laplacian
    Commented Oct 24, 2021 at 13:51
  • 1
    $\begingroup$ Hmm, I thought I left a second, more relevant comment: I get NIntegrate::slwcon warnings and not a zero-region one. The integration region in your error message is probably the transformed one. NIntegrate usually transforms infinite intervals to {0, 1}. $\endgroup$
    – Michael E2
    Commented Oct 24, 2021 at 14:39

1 Answer 1


Evaluate to integration ranges does the job immediately (omitted PrecisionGoal, slows down calculation)

NIntegrate[exp /. rules, Evaluate[{t1, -Infinity, T} /. rules], 
  Evaluate[{t2, -Infinity, 2 t1 - T} /. rules], 
   Exclusions -> {t1 - t2 == 0, t1 - t2 == -0.00001}]

(*   8.26659   *)

Done with "8.0 for Microsoft Windows (32-bit) (December 9, 2010)"

  • $\begingroup$ I see no difference with or with Evaluate: multiple NIntegrate::slwcon and ~20 sec. to compute. (V12.3.1, Intel Mac) $\endgroup$
    – Michael E2
    Commented Oct 24, 2021 at 15:45
  • $\begingroup$ I meant "with or without" -- oops. I also forgot to remove PrecisionGoal -> 10 -- now it's down to 1.2 sec. each way. Thanks for the update. Do you get the NIntegrate::zeroregion message in 8.0 without Evaluate? $\endgroup$
    – Michael E2
    Commented Oct 24, 2021 at 15:52
  • $\begingroup$ What about multipying with Boole[t2 < 2 t1 - T /. rules] ? $\endgroup$
    – Akku14
    Commented Oct 24, 2021 at 15:57
  • $\begingroup$ @MichaelE2, without Evaluate i get NIntegrate::vars: Integration range specification {t1,-\[Infinity],T}/.rules is not of the form {x, xmin, ..., xmax}. >> $\endgroup$
    – Akku14
    Commented Oct 24, 2021 at 15:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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