SymPy Simplify Took too Long for Area of Surface Revolution of a sphere

Hi all,

I want to calculate symbolically area of a surface of a sphere.

y = f(x) = \sqrt{r^{2} - x^{2}} with -r \le x \le r

this is my code:

using SymPy

x, r = symbols("x r")

f(x) = sqrt(r^2 - x^2)
# simplify(diff(f(x),x))
# we cannot use diff inside the fd(x) since QuadGK can't comprehend diff
fd(x) = -x/(sqrt(r^2 - x^2))
g(x) = sqrt(1 + (fd(x))^2)

h(x) = f(x)*g(x)
Area(x) = 2pi*h(x)

d = integrate(Area(x), (x, -r,r))

println("Area = ", d)

the problem is the final result should be: 4 \pi r^{2}

what I get is the unfinished simplify after 60 minutes of waiting… and the form of integral still:

Capture d’écran_2023-01-15_16-32-28

You need to add some assumptions.

See Core - SymPy 1.12.dev documentation

In particular r should be nonnegative.

1 Like

Great !

Now I am trying this:

using SymPy

x = symbols("x")
r = symbols("r", nonnegative=True)
# check by typing r.is_nonnegative

f(x) = sqrt(r^2 - x^2)
# simplify(diff(f(x),x))
# we cannot use diff inside the fd(x) since QuadGK can't comprehend diff
fd(x) = -x/(sqrt(r^2 - x^2))
g(x) = sqrt(1 + (fd(x))^2)

h(x) = f(x)*g(x)
Area(x) = 2pi*h(x)

d = simplify(integrate(Area(x), (x, -r,r)))

by tomorrow (if it takes 24 hours and still not finished yet, I will tell)…

the above code that took 60 minutes still not done yet and it is already 2 hours…

The answer is very numerics:

12.5663706143592⋅r^{2}

Use PI, not pi. When you compute 2pi it converts to a float.

1 Like

To elaborate, it also really helps to call simplify prior to computing:

julia> @time ex = integrate(2PI*simplify(h(x)), (x, -r, r))
  0.043363 seconds (13.71 k allocations: 715.979 KiB, 9.07% compilation time)
     2
4⋅π⋅r 
1 Like

Yes it works and produce the result faster than integrate first then simplify… thank you very much!