为什么更高带宽的强度分布会有噪声?

Why is there noise for higher bandwidth intensity distributions?

我一直在尝试通过计算计算评估以下电场:

它基本上是给定波长的波的总和,由波长的高斯分布的平方根加权。

我通过 Python 通过包 scipy.integrate.quad 函数对 $x$ 的每个值执行高斯正交积分来计算它。代码如下:

# Imports
import numpy as np
import scipy as sp
from scipy import integrate

# Parameters
mu = 0.635 # mean wavelength
sigma = 0.01 # std dev of wavelength distribution
# wl is wavelength
x_ara = np.arange(0, 1.4, 0.01)

# Limits of Integration
lower, upper = mu - 4*sigma, mu+4*sigma
if lower < 0 :
    print('lower limit met')
    lower = 1e-15 # cannot evaluate sigma = 0 due to singularity for gaussian function

# Functions
def Iprofile_func(wl, mu, sigma):
    profile = np.exp(-( ((wl-mu) / (np.sqrt(2)*sigma))**2))
    return profile

def E_func(x_ara, wl, mu, sigma):
    return np.sqrt(Iprofile_func(wl, mu, sigma)) * np.cos(2*np.pi/wl * (x_ara))

# Computation
field_ara = np.array([])
for x in x_ara:
    def E(wl):
        return E_func(x, wl, mu, sigma)

    field = sp.integrate.quad(E, lower, upper)[0]
    field_ara = np.append(field_ara, field)

我固定 $\mu$ 的值 = 0.635,并对 $\sigma$ 的两个值执行相同的计算,$\sigma$ = 0.01 和 $\sigma$ = 0.2。我得到的数组,我在下面绘制,上面的图是波长分布,而下面的图是计算场数组:

为什么sigma值增大时计算域会出现噪声?

对于大 x,即使 lambda 的微小变化也会导致被积函数快速波动。在某些时候,数值积分例程要么需要非常非常长的时间来收敛,要么不会考虑足够多的积分点,因此每个积分点的贡献不会完全抵消,并且会准确显示您看到的噪声。当我 运行 代码时,我实际上从 scipy 收到关于达到限制 ("IntegrationWarning: The maximum number of subdivisions (50) has been achieved.") 的警告。

好消息:您知道对于足够大的 x,积分必须为零。超出合理范围就不用计算了。

示例:

x = 10,mu = 0.635,sigma = 0.01

积分界限为 mu+/-4sigma = [0.595, 0.675]

2Pi/0.595*10=105.6, 2Pi/0.675*10=93.08

这意味着被积函数在 x=10 的波长范围内大约有两次振荡。

x = 100,其他都一样

这意味着被积函数在波长范围内振荡 20 次。

x = 10,mu = 0.635,sigma = 0.1

积分界限为 mu+/-4sigma=[0.235, 1.035]

2Pi/0.235*10=267.37, 2Pi/1.035*10=60.71

这意味着被积函数在 x=10 处的波长范围内振荡了 33 次。

x = 100,其他都一样

这意味着被积函数在波长范围内有 329 次振荡。

如果 x 或 sigma 变大,将需要越来越多的积分点。因此,对于更大的 x,没有其他方法可以增加 scipy.integrate 中的限制。