# NIntegrate::zeroregion error outside the integration domain

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 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}
NIntegrate[
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.

• 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. Commented Oct 24, 2021 at 12:39
• @MichaelE2 Sorry, I modified the code. Commented Oct 24, 2021 at 13:50
• @user64494 Yes, but one can prove that the above integral is finite. Indeed, I obtain a reasonable answer while changing $T$. Commented Oct 24, 2021 at 13:51
• 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}. Commented Oct 24, 2021 at 14:39

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)"

• I see no difference with or with Evaluate: multiple NIntegrate::slwcon and ~20 sec. to compute. (V12.3.1, Intel Mac) Commented Oct 24, 2021 at 15:45
• 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? Commented Oct 24, 2021 at 15:52
• What about multipying with Boole[t2 < 2 t1 - T /. rules]  ? Commented Oct 24, 2021 at 15:57
• @MichaelE2, without Evaluate i get NIntegrate::vars: Integration range specification {t1,-\[Infinity],T}/.rules is not of the form {x, xmin, ..., xmax}. >>  Commented Oct 24, 2021 at 15:58