计算插值数据的二阶导数
Computing the second derivative of interpolated data
我有 100 (x,y)
对的一维数据。我们将 x
的数组称为 data_x
,将 y
的数组称为 data_y
.
得到f(x)
:
import numpy as np
from scipy.interpolate import interp1d
f = interp1d(data_x, data_y, bounds_error=False, fill_value=np.nan)
得到f'(x)
:
def fp(x):
return (f(x+eps) - f(x))/eps
# where eps is a very small number, for example 1e-3
得到f''(x)
:
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))
当我绘制这 3 个函数时,二阶导数出现一条有问题的锯齿线。我该如何摆脱这些?
你想要一个二次微分插值器,使用例如CubicSpline :CubicSpline(x_data, y_data).derivative(2)
是表示二阶导数的可调用对象。或者,如果您想要导数,请使用 CubicSpline(x_data, y_data)(xnew, 2)
我有 100 (x,y)
对的一维数据。我们将 x
的数组称为 data_x
,将 y
的数组称为 data_y
.
得到f(x)
:
import numpy as np
from scipy.interpolate import interp1d
f = interp1d(data_x, data_y, bounds_error=False, fill_value=np.nan)
得到f'(x)
:
def fp(x):
return (f(x+eps) - f(x))/eps
# where eps is a very small number, for example 1e-3
得到f''(x)
:
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))
当我绘制这 3 个函数时,二阶导数出现一条有问题的锯齿线。我该如何摆脱这些?
你想要一个二次微分插值器,使用例如CubicSpline :CubicSpline(x_data, y_data).derivative(2)
是表示二阶导数的可调用对象。或者,如果您想要导数,请使用 CubicSpline(x_data, y_data)(xnew, 2)