Diferenciação Python usando numpy não produzindo a saída esperada
Então, eu estou trabalhando em alguma computação numérica. Eu calculei cerca de 100.000 pontos de uma função (return_times
) apenas computável numericamente e agora deseja obter seu derivado usandonumpy.gradient
. Como eu entendo (doc), para um f (x), posso fornecer os seguintes argumentos:numpy.gradient(arr_of_fx_datapoints, arr_of_their_x_values)
para fazer funcionar. E é isso que eu pretendo fazer.
Exceto que isso não funciona. O resultado é quase (mas não exatamente) zero em todos os lugares. O bug é reproduzido por este resumo do meu código abaixo (sin ^ 2 (x) tem uma forma semelhante à minha função original):
import matplotlib.pyplot as plt
import numpy as np
def find_times(t_arr):
return np.power(np.sin(t_arr), 2)
t_0 = 0
t_max = np.pi-1E-10
datapoints = 100000
dt = (t_max - t_0) / datapoints
t_points = np.arange(t_0, t_max, dt, dtype=np.float64)
return_times = find_times(t_points)
gd = np.gradient(return_times, t_points)
plt.plot(t_points, gd)
plt.plot(t_points, return_times)
plt.show()
Se eu imprimirgd
, mostra que de fato não é zero zero:
[ inf 6.28318530e-05 6.28318529e-05 ..., -1.25666419e-09
-6.28326813e-10 -3.14161265e-10]
Então ... o que eu perdi? Qual é a melhor maneira correta de derivar numericamente em Python?
Ambiente: Linux Mint 18.2 OS, editor Geany, NumPy 1.11.0.