Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

problems with symbolic integration

I have recently asked a question on math.stackexchange concerning how to compute volumes of intersecting hypercubes and hyperspheres to which I got an extremely helpful answer. I would love to link there, but have insufficient karma.

Now, I'm trying to utilize sage to generate some analytic solution for the lowest dimensionalities. With my very naive understanding of sage, the help of google and some trial & error, I came up with the following solution:

from sage.symbolic.integration.integral import integral

R = var("R")
x = var("x")

V0(R) = 1
V = [V0]

for i in range(1,3):
    vlast = V[i-1]
    vnew(R) = integral( vlast(R=sqrt(R**2 - x**2)),x,-min_symbolic(R,1),min_symbolic(R,1))


However, the output is not quite what I expected:

[R |--> 1, R |--> 2*min(1, R), R |--> 2*integrate(min(1, sqrt(R^2 - x^2)), x, -min(1, R), min(1, R))]

Somehow, the symbolic integrator seems unable to deal with this (relatively simple) function. As you can see from the code, I've already tried using fricas. That however results in

TypeError: sage1 := x=-min(R, 1)..min(R, 1)
   There are 1 exposed and 2 unexposed library operations named min having 2 argument(s) but none was determined to be applicable. Use HyperDoc Browse, or issue
                                                                                                                   )display op min
      to learn more about the available operations. Perhaps package-calling the operation or using coercions on the arguments will allow you to apply the operation.

   Cannot find a definition or applicable library operation named min with argument type(s) 

      Perhaps you should use "@" to indicate the required return type, or "$" to specify which version of the function you need.

I'm not sure what to make of this error message. Do I understand correctly that there is no implementation for min available that is capable of dealing with a variable and an integer? That seems a little strange, given that this is such a fundamental functionality - or am I missing out on something here?

Any suggestion how to make it work are greatly appreciated!