¿Cómo usar scipy.integrate para obtener el volumen de una esfera truncada?

Estoy luchando con el uso de scipy.integrate, usé tplquad, pero ¿cómo puedo usar la integrate para obtener el volumen de la esfera (truncada)? Gracias

 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 

Para truncar por ángulo es conveniente utilizar un sistema de coordenadas esféricas. Suponiendo la definición tomada de Arkansas TU para radius (r) , theta (t) y phi (p) como: introduzca la descripción de la imagen aquí

Luego, puede truncar el ajuste de los límites: 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] 

Para truncar por plano es conveniente usar un sistema de coordenadas cartesianas (x,y,z) , donde x**2+y**2+z**2=R**2 ( ver mathworld ). Aquí estoy truncando la mitad de la esfera para demostrar:

 from `x1=-R` to `x2=R`
from `y1=0` to `y2=(R**2-x**2)**0.5`
from `z1=-(R**2-x**2-y**2)**0.5` to `z2=(R**2-x**2-y**2)**0.5`
(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]