【发布时间】:2021-01-11 00:25:34
【问题描述】:
所以我写了一个简短的 Python 程序来估计 Python 的 FFT 方法的准确性。
import numpy as np
import matplotlib.pyplot as plt
#Aufgabe 1
x0=0
a=2.5
k0=3
X=np.linspace(-4,4,100)
timestep=0.1
k=np.fft.fftfreq(X.size,d=timestep)
psi_analytical=[(2/(np.pi*a**2))**(1/4)*np.exp(-((i-x0)**2)/a**2)*np.exp(1j*k0*(i-x0)) for i in X]
psi_tilde_numerical=np.fft.fft(psi_analytical)
psi_tilde_analytical=[(2/(np.pi*a**2))**(1/4)*(a/2)*np.exp(-(a*(i-k0))**2/4)*np.exp(-1j*i*x0) for i in k]
psi_numerical=np.fft.ifft(psi_tilde_analytical)
#plt.plot(k,np.abs(psi_tilde_numerical),label='numerical psi tilde')
#plt.plot(k,np.abs(psi_tilde_analytical),'--',color='tab:orange', label='analytical psi tilde')
plt.plot(X,np.abs(psi_analytical),label='analytical psi, real')
plt.plot(X,np.abs(psi_numerical),'--',color='tab:orange',label='numerical psi, real')
plt.legend()
plt.show()
解析函数如下:
令我惊讶的是,数值函数和分析函数完全不同。但是,我不确定为什么会这样。
归一化常数N是(2/(np.pi*a**2))**(1/4)
【问题讨论】:
-
看起来分析函数是连续的,而 FFT 本质上是离散的。还有只看无限函数的窗口的问题。您实际上是将函数与一个框相乘,从而导致频域中的卷积。
-
如果您绘制采样输入函数和 FFT 结果,并将它们添加到问题中,我们将更容易指出可能存在的问题。这些答案可能会帮助您找到问题:stackoverflow.com/a/49331862/7328782、stackoverflow.com/a/49142862/7328782。尤其是第一个,因为我看到你的时间轴中间是 0,但你的代码中没有使用
ifftshift。