📜  获取 interp1d 的导数 - Python (1)

📅  最后修改于: 2023-12-03 15:27:47.741000             🧑  作者: Mango

获取 interp1d 的导数 - Python

interp1d 是一个 SciPy 库中的函数,用于生成一维插值函数。如果想获取一维插值函数的导数,可以使用 interp1dderivative 参数。

以下是使用 interp1d 生成一维插值函数,并获取其导数的示例代码:

import numpy as np
from scipy.interpolate import interp1d

# 创建一些模拟数据
x = np.linspace(0, 10, num=11, endpoint=True)
y = np.sin(x)

# 生成一维插值函数
f = interp1d(x, y)

# 获取插值函数的导数
df = f.derivative()

# 在新的 x 值上计算插值函数和导数
new_x = np.linspace(0, 10, num=101, endpoint=True)
new_y = f(new_x)
new_df = df(new_x)

# 绘制插值函数和导数的图形
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(new_x, new_y, label='f(x)')
ax.plot(new_x, new_df, label='f\'(x)')
ax.legend()
plt.show()

上述代码中,我们首先创建了一些模拟数据 xy,并在其上使用 interp1d 函数生成了一维插值函数 f。接着,我们使用 f.derivative() 获取了插值函数的导数 df。最后,在新的 x 值上计算了插值函数和导数,并使用 matplotlib 绘制了图形。

需要注意的是,使用 interp1d 生成的插值函数是分段平滑的,即在每个原始数据点之间使用了一个局部多项式进行拟合。如果在这些数据点之外的位置计算导数,将得到不连续点。因此,如果需要在数据点之外计算导数,建议使用其他方法,比如使用 np.gradient 函数计算数值梯度。

参考资料: