La diferenciación de Python usando numpy no produce la salida esperada
Entonces, estoy trabajando en algunos cálculos numéricos. He calculado unos 100.000 puntos de una función (return_times
) solo computable numéricamente, y ahora quiere tomar su derivado usandonumpy.gradient
. Según entiendo (Doc), para una f (x) puedo dar los siguientes argumentos:numpy.gradient(arr_of_fx_datapoints, arr_of_their_x_values)
para que funcione Y eso es lo que (tenía la intención) de hacer.
Excepto que no funciona. El resultado es casi (pero no exactamente) cero en todas partes. El error se reproduce en este resumen de mi código a continuación (sin ^ 2 (x) tiene una forma similar a mi función 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()
El resultado es decepcionante:
Si imprimogd
, muestra que de hecho no es totalmente cero:
[ inf 6.28318530e-05 6.28318529e-05 ..., -1.25666419e-09
-6.28326813e-10 -3.14161265e-10]
¿Así que ... qué me perdí? ¿Cuál es la forma correcta definitiva de derivar numéricamente en Python?
Entorno: Linux Mint 18.2 OS, editor Geany, NumPy 1.11.0.