How to use scipy.integrate to get the volume of a truncated sphere?

I struggle with using scipy.integrate, I used tplquad, but how could I use integrate to get the volume of the (truncated) sphere? Thanks

 import scipy from scipy.integrate import quad, dblquad, tplquad from math import* from numpy import * R = 0.025235 #radius theta0 = acos(0.023895) #the angle from the edge of truncated plane to the center of sphere def f_1(phi,theta,r): return r**2*sin(theta)*phi**0 Volume = tplquad(f_1, 0.0,R, lambda y: theta0, lambda y: pi, lambda y,z: 0.0,lambda y,z: 2*pi) print Volume 
+4
source share
1 answer

It is convenient to use spherical coordinate systems for truncating along an angle. Assuming the definition taken from Arkansas TU for radius (r) , theta (t) and phi (p) as: enter image description here

Then you can truncate the limit setting: r1 r2 t1 t2 p1 p2 :

 import scipy from scipy.integrate import quad, dblquad, tplquad from numpy import * # limits for radius r1 = 0. r2 = 1. # limits for theta t1 = 0 t2 = 2*pi # limits for phi p1 = 0 p2 = pi def diff_volume(p,t,r): return r**2*sin(p) volume = tplquad(diff_volume, r1, r2, lambda r: t1, lambda r: t2, lambda r,t: p1, lambda r,t: p2)[0] 

To truncate along the plane, it is convenient to use the Cartesian coordinate system (x,y,z) , where x**2+y**2+z**2=R**2 ( see mathworld ). Here I truncate half the scope to demonstrate:

 from `x1=-R` to `x2=R`<br> from `y1=0` to `y2=(R**2-x**2)**0.5`<br> from `z1=-(R**2-x**2-y**2)**0.5` to `z2=(R**2-x**2-y**2)**0.5`<br> (an useful example using lambdas): R= 2. # limits for x x1 = -R x2 = R def diff_volume(z,y,x): return 1. volume = tplquad(diff_volume, x1, x2, lambda x: 0., lambda x: (R**2-x**2)**0.5, lambda x,y: -(R**2-x**2-y**2)**0.5, lambda x,y: (R**2-x**2-y**2)**0.5 )[0] 
+2
source

Source: https://habr.com/ru/post/1443577/


All Articles