Numpy 插值数据二阶导数的计算

Numpy 插值数据二阶导数的计算,numpy,scipy,differentiation,Numpy,Scipy,Differentiation,我有100对x,y的一维数据。让我们把x的数组称为data_x,把y的数组称为data_y 要获得外汇: 要获得f'x: 要获得外汇: 为了打印,我使用了以下打印命令: numpoints = 100 plot_x = np.linspace(-5, 0, numpoints) plt.plot(plot_x, f(plot_x)) plt.plot(plot_x, fp(plot_x)) plt.plot(plot_x, fpp(plot_x)) 当我绘制这3个函数时,我得到了一条有问题的二

我有100对x,y的一维数据。让我们把x的数组称为data_x,把y的数组称为data_y

要获得外汇:

要获得f'x:

要获得外汇:

为了打印,我使用了以下打印命令:

numpoints = 100
plot_x = np.linspace(-5, 0, numpoints)
plt.plot(plot_x, f(plot_x))
plt.plot(plot_x, fp(plot_x))
plt.plot(plot_x, fpp(plot_x))
当我绘制这3个函数时,我得到了一条有问题的二阶导数锯齿线。我怎样才能摆脱这些


如果需要二次可微插值,请使用例如CubicSpline:CubicSplinex_data,y_data。导数2是表示二阶导数的可调用对象。或者,如果您希望导数就位,请使用CubicSplinex_data,y_dataxnew,2

进行直线插值,每个“块”将具有恒定的梯度。因此,每个区块内的二阶导数为零。这取决于你的数据是什么,但它似乎测量了梯度变化处的替代点和块内的第二个点,该点为零。
def fp(x):
    return (f(x+eps) - f(x))/eps

# where eps is a very small number, for example 1e-3
def fpp(x):
    return (fp(x+eps) - fp(x))/eps
numpoints = 100
plot_x = np.linspace(-5, 0, numpoints)
plt.plot(plot_x, f(plot_x))
plt.plot(plot_x, fp(plot_x))
plt.plot(plot_x, fpp(plot_x))