带有振荡的 FFT 的柯西洛伦兹模拟

计算科学 数字 计算物理学 误差估计 傅立叶分析 信号处理
2021-12-21 09:50:23

最近我用 FFT 模拟洛伦兹函数

洛伦兹函数是2a/(x**2+a**2)

import numpy as np
from scipy import fft
import matplotlib.pyplot as plt 
a =1 
N = 500
x =np.linspace(-30,30,N)
lorentz = (2*a) * (1/(a**2 + x**2))
fourier = (fft.fft(lorentz))
fig, (ax1) = plt.subplots(nrows=1, ncols=1)
ax1.loglog(abs(fourier[0:int(N/2)]),basey=np.e)
ax1.grid(True)
plt.show()

根据轮廓积分,它应该是exp(-|k|*a)

似乎是正确的在此处输入图像描述

log当我按比例绘制时,它应该是线性的。但它有一些振荡。

在此处输入图像描述

当我将我的观点扩展到 x = np.linspace(-100,100,N) 时 在此处输入图像描述 ,振荡似乎推迟了。

x =np.linspace(-300,300,N) 在此处输入图像描述

我无法弄清楚振荡的原因。

1个回答

欢迎来到 scicomp!如果我没记错的话,为了对函数进行傅里叶变换,它必须是周期性的,这样你就可以使用正弦和余弦函数作为它的基础。在您的情况下,峰值将在 x=30 或 x=-30 的末端处导数不连续。傅立叶基不太适合不连续性。如果我的预感是正确的,那么你应该能够将你的域进一步向外扩展,这样不连续性就会变得不那么明显,因此你的振荡应该会消退。要了解正在发生的事情,请查看 tent 函数及其傅立叶变换,您会看到类似的振荡。