I wanted to calculate the average distance between two points both lying inside $B^2(\vec 0, R)$, and ended up writing

Assuming[R>0,Integrate[Integrate[Sqrt[Abs[x1^2 +y1^2+z1^2 - x2^2 - y2^2 - z2^2]], {x1,y1,z1 }\[Element]Ball[{0,0,0},R]],{x2,y2,z2}\[Element]Ball[{0,0,0},R]]]

However, given the elegance of the Mathematica language, and any my experience in programming in general, I, sort of, felt ashamed of myself writing such ugly code.

Is there a more compact & elegant way of writing the same code in a short manner such that it will also improve the speed of the code? Because I run this code on wolframcloud and it couldn't find the result withing the limits of its execution time.

  • $\begingroup$ See also Mean distance between 2 points within a sphere on the Math SE. $\endgroup$
    – MarcoB
    Apr 2, 2021 at 12:34
  • $\begingroup$ @MarcoB thanks for the comment; I know how to calculate this quantity mathematically, but my main question is about the code rather than the mathematics that the code tries to compute. $\endgroup$
    – Our
    Apr 2, 2021 at 12:37
  • $\begingroup$ But first of all the formula, you use is wrong. Let us start with that. $\endgroup$ Apr 2, 2021 at 12:41
  • 1
    $\begingroup$ The integrand should use (x1-x2)^2 + ..., that is, the sum of square differences. $\endgroup$ Apr 2, 2021 at 13:28
  • 1
    $\begingroup$ Look at Norm[{x1, y1, z1} - {x2, y2, z2}] or Norm[{x1, y1, z1} - {x2, y2, z2}] // Simplify[#, Element[{x1, y1, z1, x2, y2, z2}, Reals]] & $\endgroup$
    – Bob Hanlon
    Apr 2, 2021 at 18:57


Your Answer

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

Browse other questions tagged or ask your own question.