我试图在表面上整合以下等式: 强度=(2 * J1(z)/ z)^ 2,其中z = A * sqrt((x-mu1)^ 2 +(y-mu2)^ 2),A(L)是x和y的常数,J1第一个订单bessel function。为此,我使用dblquad函数,如下所示:
resultinf = dblquad(lambda r,phi:intensity(mu1,mu2,L,r,phi),0,inf,lambda phi:0,lambda phi:2*pi)
这里唯一重要的参数是极坐标中的r和phi(其他参数取决于此处不重要的其他参数),x = r cos(phi)和y = r sin(phi) 但是当我尝试集成这个功能时,我收到了这条消息:
C:\ pyzo2013b \ LIB \ pyzo-包\ SciPy的\整合\ quadpack.py:289: UserWarning:最大细分数(50) 实现。如果增加限制不会产生任何改善 建议分析被积函数以确定 困难。如果当地困难的位置可以 确定(奇点,不连续)可能会从中获益 拆分间隔并调用积分器 子范围。也许应该使用专用集成商 warnings.warn(MSG)
然后是一个完全不合理的结果:
C:\ pyzo2013b \ LIB \ pyzo-包\ SciPy的\整合\ quadpack.py:289: 用户警告:积分可能是发散的,或者是缓慢收敛的。 warnings.warn(MSG)
我理解这条消息的含义,但我有两个问题:
有人有答案吗?
以下是完整有用的代码行(否则所有其他参数都已定义):
def intensity(mu1,mu2,L,r,phi):# distribution area for a diffracted beam
x=r*cos(phi)
y=r*sin(phi)
X=x-mu1
Y=y-mu2
R=sqrt(X**2+Y**2)
scaled_R = R*Dt *pi/(lambd*L)
return (4*(special.jv(1,scaled_R)**2/scaled_R**2)
resultinf = dblquad(lambda r,phi:intensity(mu1,mu2,L,r,phi),0,inf,lambda phi:0,lambda phi:2*pi)
print(resultinf)
(为了更好地理解这个功能,我已经根据gboffi的建议对其进行了修改。)