旁白:当你创建一个符号表达式时,保持它的象征性。不要混合使用真正的浮点np.pi和复杂的浮点1j,而是使用SymPy的pi和{}。在from sympy import exp, pi, I, besselj, symbols
x, r = symbols('x r')
integrand = exp(-x**2) * exp(pi*I*(-x)) * besselj(0, r*x) * x
但是是的,它看起来并不能把贝塞尔函数的乘积与exp(-x**2) * exp(pi*I*(-x))积分。当r被1代替时,这种情况已经发生了,所以r的符号性质与此无关。在
直接回答您的问题:Is there any way of performing numerical integration with symbolic variables?
没有,就像没有干水一样。这在术语上是矛盾的。在Is the only other alternative defining the values of r a priori and finding the integral for each one of them?
是的。可以通过SymPy(称为mpmath)完成:
^{pr2}$
考虑到这个函数的值很复杂,我们还不太清楚如何绘制这个函数。也许你是想画出强度的绝对值?在
总之,与sypy/mpmath(纯Python)的集成对于绘图来说太慢了。最好使用SciPy的quad进行集成。它不处理复被积函数,所以我把实部和复部分别积分。在from scipy.integrate import quad
from scipy.special import jn
integrand = lambda x, r: np.ex