通过FFT计算数值导数-SciPy

问题描述 投票:0回答:1

我编写了以下代码,使用FFT计算函数的近似导数:

from scipy.fftpack import fft, ifft, dct, idct, dst, idst, fftshift, fftfreq
from numpy import linspace, zeros, array, pi, sin, cos, exp
import matplotlib.pyplot as plt

N = 100
x = linspace(0,2*pi,N)

dx = x[1]-x[0]
y = sin(2*x)+cos(5*x)
dydx = 2*cos(2*x)-5*sin(5*x)

k = fftfreq(N,dx)
k = fftshift(k)

dydx1 = ifft(-k*1j*fft(y)).real

plt.plot(x,dydx,'b',label='Exact value')
plt.plot(x,dydx1,'r',label='Derivative by FFT')
plt.legend()
plt.show()

但是,它给出了出乎意料的结果,我认为这与数组k给定的波数的错误输入有关:

Comparison of the exact and approximate derivative

我知道FFT的不同实现方式对波数阶数的处理方式不同,所以我在这里遗漏了什么?任何想法将不胜感激。

python scipy fft scientific-computing
1个回答
0
投票

好日子。 Sorunu tamanlayamadım。

© www.soinside.com 2019 - 2024. All rights reserved.