Python 笛卡尔坐标系中的二重积分,而不是(R,θ)

Python 笛卡尔坐标系中的二重积分,而不是(R,θ),python,coordinate,polar-coordinates,Python,Coordinate,Polar Coordinates,我以前的() 您可以在下图中看到衍射模型: 我想计算每个像素(正方形)的强度积分,所以我不能使用R和θ作为变量。如何在X-Y坐标系下进行此操作 我们的职能: 代替sin(θ),我们可以使用: sintheta= (np.sqrt((x)**2 + (y)**2)/(np.sqrt((x)**2 + (y)**2 + d**2))) 其他常数: lamb=550*10**(-9) k=2.0*np.pi/lamb a=5.5*2.54*10**(-2) d=2.8 当您打印函数时,结果如下

我以前的()

您可以在下图中看到衍射模型:

我想计算每个像素(正方形)的强度积分,所以我不能使用R和θ作为变量。如何在X-Y坐标系下进行此操作

我们的职能:

代替sin(θ),我们可以使用:

sintheta= (np.sqrt((x)**2 + (y)**2)/(np.sqrt((x)**2 + (y)**2 + d**2)))
其他常数:

lamb=550*10**(-9)
k=2.0*np.pi/lamb
a=5.5*2.54*10**(-2)
d=2.8
当您打印函数时,结果如下所示:(上图是从顶部查看的视图)

上一主题中的方法:
计算函数在(0.0,dist)和之后的积分*(2*np.pix),其中x=ka*np.sin(θ),但现在我想在每个像素中积分。前面的方法不起作用,因为这是X-Y坐标,不是极坐标。

实际上,笛卡尔坐标中的积分非常简单。既然有了强度函数,就必须通过坐标
x
y
来表示半径
r
。你在问题中实际做过的一件小事

因此,要集成的函数(没有一些常数)是:

或者使用2 J1(x)/x=J0(x)+J2(x)[谢谢,Jaime!]这一事实:

def f(x,y):
    r = np.sqrt(x**2 + y**2)
    return (sp.j0(r) + sp.jn(2,r))**2
这种形式更好,因为它在任何地方都没有奇点

现在,我不使用任何常数因子。若你们愿意的话,你们可以添加它们,但我发现在无限大的面积上用积分结果进行规范化更容易。否则就很容易忘记一些常量(我通常会忘记)

可以使用
scipy.integrate.nqad
执行集成。它接受多维函数进行积分。因此,在这种情况下:

import scipy.integrate

integral = scipy.integrate.nquad(f, ([-d/2, d/2], [-d/2, d/2]))[0]

但是,由于函数非常对称,可以考虑只在一个象限上积分,然后乘以四:

4. * scipy.integrate.nquad(f, ([0, d/2], [0, d/2]))[0]
通过使用这些,全强度为:

>>> 4. * scipy.integrate.nquad(f, [[0,inf],[0,inf]])[0]
12.565472446489999
(看起来非常像4pi,顺便说一句)当然,您也可以使用极坐标来计算完整值,因为函数具有圆对称性(如中所述)。不同的值是由于不同的标度(2π在极积分中省略,2因为我在这里使用贝塞尔函数的和形式)

例如,对于两个方向上的-1..1平方面积,平方面积上的归一化(除以上述全功率值)功率为:

>>> 4*scipy.integrate.nquad(f, [[0,1],[0,1]])[0] / 12.565472446489999
0.27011854108867
因此,大约27%的入射光照射到方形光电探测器上


当谈到常数时,似乎缺少了一些东西(至少是单位)。我猜:

  • 波长:550纳米
  • 圆孔直径:0.0055“=0.14 mm
  • 从孔径到传感器的距离:2.8 mm
  • 方形传感器尺寸5.4微米x 5.4微米
最后一个是我刚刚从图像中猜到的。由于传感器的尺寸比距离小得多,sin(ϴ)非常接近y/d,其中d是距离和y到光轴的位移。通过使用这些数字x=ka sin(ϴ)=kay/d≈ 1.54.对于该数字,强度积分约为0.52(或52%)

如果你将其与一些实验值进行比较,请记住有许多误差源。图像平面上的图像是孔径的傅里叶变换。如果孔径边缘有小瑕疵,它们可能会改变产生的光斑。艾里环很少像天文学家认为的那样美丽

只是为了好玩:


请你完成这个问题,让人们不必再回答任何其他问题就能理解它好吗?@pentadecagon现在有什么不清楚的地方吗?如果不是一个以原点为中心的圆盘,这次你想在哪个区域计算积分?-2.7*10**(-6)>>> 4*scipy.integrate.nquad(f, [[0,1],[0,1]])[0] / 12.565472446489999 0.27011854108867