У меня что-то не так:
import numpy as np
import matplotlib.pyplot as plt
x = np.concatenate((np.linspace(0,1,100),np.linspace(1,2,50)));
f = np.power(x,2);
df = 2*x;
Df = np.gradient(f,x);
plt.plot(x,df,'r', x,Df,'b');plt.show()
Вот что я получаю:
В противном случае все работает нормально, если используется линейно разнесенный массив и не используется аргумент x.
Какие-либо предложения?
Я ожидаю, что красный и синий будут одинаковыми. красный - фактическая аналитическая производная от f.
Не могу воспроизвести проблему. Градиенты совпадают с моей установкой и верны. Какая у вас версия matplotlib?
спасибо за попытку. Получили ли вы правильный сюжет с тем же кодом, который я предоставил? Я проверю свои текущие версии
Да. Сюжет выглядит ожидаемым. Проверено на matplotlib 2.0.2.

Я думаю, это потому, что версии numpy до 1.13 ожидают, что аргумент «x» будет постоянным шагом сетки (см. https://docs.scipy.org/doc/numpy-1.11.0/reference/generated/numpy.gradient.html#numpy.gradient). Несмотря на то, что более ранние версии ожидают скалярного dx, они не проверяют это, и результатом является np.gradient (f) / x, что является допустимым делением. Это довольно раздражает, поскольку код, написанный для numpy 1.13, может работать в более ранних версиях с некорректным выводом и без ошибок.
Какой желаемый результат?