Python 笛卡尔坐标系中的二重积分,而不是(R,θ)
我以前的() 您可以在下图中看到衍射模型: 我想计算每个像素(正方形)的强度积分,所以我不能使用R和θ作为变量。如何在X-Y坐标系下进行此操作 我们的职能: 代替sin(θ),我们可以使用: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 当您打印函数时,结果如下
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微米
请你完成这个问题,让人们不必再回答任何其他问题就能理解它好吗?@pentadecagon现在有什么不清楚的地方吗?如果不是一个以原点为中心的圆盘,这次你想在哪个区域计算积分?-2.7*10**(-6)
>>> 4*scipy.integrate.nquad(f, [[0,1],[0,1]])[0] / 12.565472446489999
0.27011854108867