Я пытаюсь вычислить производную некоторых данных, и я пытался сравнить выход конечной разности и выход спектрального метода. Но результаты очень разные, и я не могу понять, почему именно.`numpy.diff` и` scipy.fftpack.diff`, дающие разные результаты при дифференцировании
Рассмотрим пример кода ниже
import numpy as np
from scipy import fftpack as sp
from matplotlib import pyplot as plt
x = np.arange(-100,100,1)
y = np.sin(x)
plt.plot(np.diff(y)/np.diff(x))
plt.plot(sp.diff(y))
plt.show()
Это выводит следующий результат
Оранжевый выход, являющуюся fftpack
выход. Не обращайте внимания на тонкости, это только ради примера.
Итак, почему они такие разные? Разве они не должны быть (примерно) одинаковыми?
Я уверен, что различные амплитуды могут быть скорректированы с ключевым словом fftpack.diff
, но я не могу понять, какой правильный период (я думал, что это должно быть period=1
, но это не работает).
Кроме того, как я могу использовать собственное спектральное дифференцирование с помощью numpy?
я наивно думал, что 'period' относится к периоду между одним измерением и другим (следовательно, «1» в моем случае). Но, да, это, очевидно, имеет большой смысл. Теперь, когда я понял это, я также могу воспроизвести его с помощью numpy, умножая fft на 'i * 2 * pi'. – TomCho