3
$\begingroup$

Using an ImplicitRegion in NIntegrate by far best performance is obtained by using Method->"UnitCubeRescaling" in my case. In order to get further insight into the integration (and possibly either increase performance further or easily port it to c++), i would like to extract the transformation used by Mathematica in order to rescale the integrand to a hypercube.

Explicit example:

ImplicitRegion defined as:

localA=200; localB=1; localC=900;
reg = ImplicitRegion[{
         0 <= y <= x && -1 <= z <= 1 && 
         -x^2 + y^2 + localA^2 + 2*localA*y*z > 0 && 
         localB <= x <= localC}, {x, y, z}];

NIntegrate[f[x, y, z], {x, y, z} ∈ reg,
 Method -> {"UnitCubeRescaling", "FunctionalRangesOnly" -> True, 
   Method -> {"GlobalAdaptive", "SingularityHandler" -> None}}]

The Implicit region arises from Heaviside theta functions with a nonlinear arguments. I'm looking for a conceptual solution, as I also have more complicated examples, but I would be grateful for any solutions to this particular examples as well.

$\endgroup$
4
  • $\begingroup$ You may find useful information here. $\endgroup$
    – bbgodfrey
    Commented Aug 12, 2017 at 1:17
  • $\begingroup$ Trying the given transformation there was actually my starting point in trying to resolve this analytically, unfortunately I cannot even map the implicit region to a nested integral (after which i would be done using the given transformation from your link). $\endgroup$
    – NicolasW
    Commented Aug 12, 2017 at 1:43
  • 2
    $\begingroup$ You might be interested in CylindricalDecomposition[]. $\endgroup$ Commented Aug 12, 2017 at 2:59
  • $\begingroup$ This looks promising, thanks. It could be possible to "guess" the general case by looking several numerical configurations. $\endgroup$
    – NicolasW
    Commented Aug 12, 2017 at 3:18

0

Your Answer

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