操纵样条的导数
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 在 中处理样条,但速度很慢。
我正在使用 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 在