Я написал следующий код для вычисления приблизительной производной функции с использованием БПФ:
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](https://i.stack.imgur.com/C84By.png)
Я знаю, что разные реализации БПФ по-разному обрабатывают порядок волновых чисел, так что мне здесь не хватает? Будем очень признательны за любые идеи.