# Volume integration with a condition

I have a set of parameters $$x_1, \dots x_4 \in (0,1)$$. I want to find the volume of the subregion of this 4d cube satisfying $$\sin^{-1}(x_1)+ \dots +\sin^{-1}(x_4) > \frac{3\pi}{2}$$

I've tried using a simple

NIntegrate[ If[ArcSin[x1] + ArcSin[x2] + ArcSin[x3] + ArcSin[x4] > (3 Pi)/2, 1,
0], {x4, 0, 1}, {x3, 0, 1}, {x2, 0, 1}, {x1, 0, 1}]

However I get numerical lamentations. If I solve for one of the $$x_i$$ and put $$x_i = \sin(\frac{3\pi}{2}-\sum_{j\neq i} \sin^{-1}{x_j})$$ as a lower limit in its integral, I lose information by taking the sine ($$\sin(x)$$ is two-to-one for $$x<2\pi$$) and the $$x_i$$ integral can move beyond its range of validity.

Is there an elegant way to this without many If/else statements?

Clear["Global`*"]

Using If

vol1 = NIntegrate[
If[ArcSin[x1] + ArcSin[x2] + ArcSin[x3] + ArcSin[x4] > 3 Pi/2, 1, 0], {x4,
0, 1}, {x3, 0, 1}, {x2, 0, 1}, {x1, 0, 1}, MinRecursion -> 9,
WorkingPrecision -> 20,
Method -> {"AdaptiveQuasiMonteCarlo", "RandomSeed" -> 1234}]

(* 0.00076851819200000000000 *)

Using Boole

vol2 = NIntegrate[
Boole[ArcSin[x1] + ArcSin[x2] + ArcSin[x3] + ArcSin[x4] > 3 Pi/2], {x4, 0,
1}, {x3, 0, 1}, {x2, 0, 1}, {x1, 0, 1}, MinRecursion -> 9,
WorkingPrecision -> 20,
Method -> {"AdaptiveQuasiMonteCarlo", "RandomSeed" -> 1234}]

(* 0.00076851819200000000000 *)

Using Piecewise

vol3 = NIntegrate[
Piecewise[{{1,
ArcSin[x1] + ArcSin[x2] + ArcSin[x3] + ArcSin[x4] > 3 Pi/2}}], {x4, 0,
1}, {x3, 0, 1}, {x2, 0, 1}, {x1, 0, 1}, MinRecursion -> 9,
WorkingPrecision -> 20,
Method -> {"AdaptiveQuasiMonteCarlo", "RandomSeed" -> 1234}]

(* 0.00076851819200000000000 *)

vol1 == vol2 == vol3

(* True *)
• Why the difference? The code m[t_] := RegionMeasure[ ImplicitRegion[ ArcSin[x1] + ArcSin[x2] + ArcSin[x3] + ArcSin[t] - (3*Pi)/2 >= 0 && x1 >= 0 && x1 <= 1 && x2 >= 0 && x2 <= 1 && x3 >= 0 && x3 <= 1, {x1, x2, x3}]]; NIntegrate[Evaluate[m[t]], {t, 0, 1}, AccuracyGoal -> 5, PrecisionGoal -> 5, WorkingPrecision -> 12] performs $0.000835762369747$. Feb 21, 2020 at 19:38
• @user64494 - I cannot reproduce your results. Running your code causes my kernel to quit. I am running version 12.0 on a Mac. Feb 21, 2020 at 20:14
• @BobHanlon Very interesting solution ideas! I tried to give another solution way using RegionMeasure: reg = ImplicitRegion[ ArcSin[x4] + ArcSin[x3] + ArcSin[x2] + ArcSin[x1] > (3 \[Pi])/2 && 0 <= x4 <= 1 && 0 <= x3 <= 1 && 0 <= x2 <= 1 && 0 <= x1 <= 1, {x4, x3, x2, x1}], RegionMeasure[reg] but it doesn't evaluate. Any idea why not? Feb 21, 2020 at 20:26
• @Ulrich Neumann: So did I with the same result. After that I applied Cavalieri's principle. Now I tried to reproduce my result. Feb 21, 2020 at 20:40
• @user64494 Mysterious! Feb 21, 2020 at 20:47

Making use of Cavalieri's principle, one obtains

m[t_] := RegionMeasure[DiscretizeRegion[ImplicitRegion[ArcSin[x1] + ArcSin[x2] + ArcSin[x3] + ArcSin[t] -
(3*Pi)/2 >= 0 &&
x1 >= 0 && x1 <= 1 && x2 >= 0 && x2 <= 1 && x3 >= 0 &&
x3 <= 1, {x1, x2, x3}]]]
NIntegrate[Evaluate[m[t]], {t, 0, 1},AccuracyGoal -> 2,PrecisionGoal ->2, WorkingPrecision->12]//AbsoluteTiming

$$\{13.9241,0.000830119592627\}$$