В NumPy 1.12 есть проверка для перехвата нескалярных шагов, но NumPy 1.11, на которой вы работаете, не замечает входные значения массива и молча делает неправильные вещи, пытаясь рассматривать массив как шаг.

я работаю над некоторыми числовыми вычислениями. Я рассчитал около 100 000 точек функции (return_times) только вычислимо численно, и теперь хочу взять его производным с помощьюnumpy.gradient, Насколько я понимаю (доктор), для f (x) я могу привести следующие аргументы:numpy.gradient(arr_of_fx_datapoints, arr_of_their_x_values) заставить это работать. И это то, что я (намеревался) сделать.

За исключением того, что это не работает. Результат почти (но не совсем) ноль везде. Ошибка воспроизведена в этом резюме моего кода ниже (sin ^ 2 (x) имеет форму, аналогичную моей исходной функции):

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()

Результат разочаровывает:

Если я печатаюgd, это показывает, что это действительно не является нулевым

[             inf   6.28318530e-05   6.28318529e-05 ...,  -1.25666419e-09
  -6.28326813e-10  -3.14161265e-10]

Итак: что я пропустил? Каков окончательный правильный путь для числового деривации в Python?

Среда: ОС Linux Mint 18.2, редактор Geany, NumPy 1.11.0.

Ответы на вопрос(0)

Ваш ответ на вопрос