操纵样条的导数

Derivative of manipulated spline

我正在使用 scipy.interpolate 库中的 InterpolatedUnivariateSpline 函数。我知道存在一个函数来评估生成的样条曲线的导数。我感兴趣的是样条对数的导数。有办法直接计算吗?

FlyingTeller's suggestion 可能是最优的:log(f) 的导数是 f'/f 这很容易实现:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import InterpolatedUnivariateSpline
x = np.arange(1, 9)
y = np.sqrt(x)                                  # something to use as y-values
spl = InterpolatedUnivariateSpline(x, y)

logder = lambda x: spl.derivative()(x)/spl(x)   # derivative of log of spline

t = np.linspace(x.min(), x.max())
plt.plot(t, logder(t))
plt.show()

根据数据的对数构造样条也是一种合理的做法,但它与原始样条的对数不是一回事。

if you can define a function, depending on a spline, which can be differentiated by python (analytically)

解析地微分任意函数超出了 SciPy 的范围。在上面的例子中,我必须知道 log(x) 的导数是 1/x; SciPy 不知道。 SymPy 是一个用于符号数学运算(例如导数)的库。

可以使用 SymPy 以符号方式找到函数的导数,然后使用 lambdify 将其转换为 SciPy 或 matplotlib 等可以使用的可调用函数。

也可以使用 SymPy 在 中处理样条,但速度很慢。