我希望使用离散傅里叶变换在hook()
区间找到include()
的一阶导数。基本思路是首先在给定的时间间隔内评估exp(sin(x))
的DFT,然后给出[0, 2/pi]
,然后计算exp(sin(x))
的反DFT,给出您想要的答案。实际上,由于在编程语言中实现了傅里叶变换,您可能需要在某处重新排序输出和/或在此处乘以不同的因子。
我首先在Mathematica中做过,其中有一个选项v_k
,它允许您指定转换的约定。首先,我获得了高斯的傅立叶级数,以便看到我必须乘以归一化因子,然后继续寻找导数。不幸的是,之后将我的Mathematica代码翻译成Python(我再次首先使用高斯的傅立叶级数 - 这是成功的),我没有得到相同的结果。这是我的代码:
ikv_k
如果有人要我,我可以发布Mathematica代码。
答案 0 :(得分:1)
原来问题是np.zeros
为你提供了一系列真正的零而不是复杂的零,因此之后的分配不会改变任何东西,因为它们是虚构的。
因此解决方案非常简单
import numpy as np
N=100
xmin=0
xmax=2.0*np.pi
step = (xmax-xmin)/(N)
xdata = np.linspace(step, xmax, N)
v = np.exp(np.sin(xdata))
derv = np.cos(xdata)*v
vhat = np.fft.fft(v)
what = 1j*np.zeros(N)
what[0:N/2.0] = 1j*np.arange(0, N/2.0, 1)
what[N/2+1:] = 1j*np.arange(-N/2.0 + 1, 0, 1)
what = what*vhat
w = np.real(np.fft.ifft(what))
# Then plotting
np.zeros
取代1j*np.zeros