我试着计算圆孔的点扩散函数(PSF)。我使用sympy软件包对惠更斯积分进行积分。然后我试着将结果共轭。PSF可以通过将这两者相乘来获得。但是我得到了错误:名称'Ei'没有定义。这是我的代码
import numpy as np
import matplotlib.pyplot as plt
import sympy as smp
from sympy import conjugate, I
import math
from sympy import Ei
# Define constants in SI units
wavelength = 1e-3# m
radius = 5 #m
aperture_diameter = 5e-1 # m
#Fresnel number
F=(aperture_diameter /2)**2/(wavelength*radius)
#The Huygens integral
r = smp.symbols('r', real=True)
result=smp.integrate(radius /( wavelength)*4*smp.pi*smp.exp(-2*smp.pi*I*r/wavelength)/r).simplify()
#Conjugate the result
resultstar= conjugate(result)
#Define the PSF
PSF=result*resultstar.simplify()
PSF_np=smp.lambdify(r,PSF,'numpy')
r_vals=np.linspace(0,5,100)
y_vals=PSF_np(r_vals)
plt.plot(r_vals,y_vals)
实际上我的例子中的菲涅耳数〉1,所以我不能使用Fraunhofer近似的积分。我试图绘制这个函数,但我没有得到我预期的结果。我认为这是因为这个软件包的容量有限。请帮助我,我是一个初学者。提前感谢你。
1条答案
按热度按时间qnyhuwrf1#
这些错误是由于numpy不知道
Ei
是什么而导致的。在这种情况下,您可以使用sympy(或mpmath)来计算表达式,但它肯定会更慢。让我们看看如何做到这一点:或者,您可以安装并使用Sympy Plotting Backend module,它能够绘制以下表达式: