在python:partialivision问题中集成bessel函数

时间:2017-07-24 14:08:23

标签: python integration singular bessel-functions

我试图在表面上整合以下等式: 强度=(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)

我理解这条消息的含义,但我有两个问题:

  • 除了将我的集成intervalls划分为更小的片段之外,我有什么意思可以避免这种细分错误(我想通过将它们与无限域上的标准进行比较来检查我的其他结果并且我赢了&#如果我不能正确地集成在无限域上,那么能够这样做吗?也许有一个特殊用途的集成商?但我不知道它是什么或如何使用它们。
  • 当z收敛到零时,为什么我会得到关于发散积分或奇点的警告知道J1(z)/(z)收敛到1?(就像窦主教一样)?

有人有答案吗?

以下是完整有用的代码行(否则所有其他参数都已定义):

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的建议对其进行了修改。)

0 个答案:

没有答案