在Python中使用DFT查找一阶导数

时间:2016-09-26 18:48:53

标签: python fft derivative

我希望使用离散傅里叶变换在hook()区间找到include()的一阶导数。基本思路是首先在给定的时间间隔内评估exp(sin(x))的DFT,然后给出[0, 2/pi],然后计算exp(sin(x))的反DFT,给出您想要的答案。实际上,由于在编程语言中实现了傅里叶变换,您可能需要在某处重新排序输出和/或在此处乘以不同的因子。

我首先在Mathematica中做过,其中有一个选项v_k,它允许您指定转换的约定。首先,我获得了高斯的傅立叶级数,以便看到我必须乘以归一化因子,然后继续寻找导数。不幸的是,之后将我的Mathematica代码翻译成Python(我再次首先使用高斯的傅立叶级数 - 这是成功的),我没有得到相同的结果。这是我的代码:

ikv_k

如果有人要我,我可以发布Mathematica代码。

1 个答案:

答案 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