我们需要计算
我们可将其转换为
对这个式子,在r=q时为间断点,不能计算。
但是对于代码
from scipy.integrate import tplquad
def integrate_of_the_function(vector_lambda, q_square):
'''
g(q) = \int{\left(\frac{1}{\lvert \vec{n}\rvert^2 - q^2} \right)}\mathrm{d}^{3}\vec{n}
:return: value
'''
value_and_abserr = tplquad(g,
-vector_lambda[0], vector_lambda[0],
lambda z: -vector_lambda[2], lambda z: vector_lambda[2],
lambda x, z: -vector_lambda[1], lambda x, z: vector_lambda[1])
return value_and_abserr[0]
函数integrate_of_the_function(vector_lambda, q_square),不能越过间断点。
我只能求在[-(q - dx), (q - dx)]上的积分,对于在圆外的就不会求了。圆内的代码如下:
def test_integrate_of_the_function(vector_lambda, q_square):
'''
g(q) = \int{\left(\frac{1}{\lvert \vec{n}\rvert^2 - q^2} \right)}\mathrm{d}^{3}\vec{n}
:return: value
'''
dx = q_square / (10 * 10)
inner_value_and_abserr = tplquad(g,
-(q_square - dx), q_square - dx,
lambda x: -(q_square ** 2 - x ** 2) ** 0.5,
lambda x: (q_square ** 2 - x ** 2) ** 0.5,
lambda x, y: -(q_square ** 2 - x ** 2 - y ** 2) ** 0.5,
lambda x, y: (q_square ** 2 - x ** 2 - y ** 2) ** 0.5)
value_and_abserr = inner_value_and_abserr + outter_value_and_abserr
return value_and_abserr[0]