python - 使用三次样条插值时确保一阶微分和二阶微分连续

标签 python scipy interpolation

我正在读这篇文章paper 。在第 286 页的这篇论文中,他们说他们使用三次样条插值来确保连续一阶微分和二阶微分的存在。

我目前正在尝试在 python 中执行此操作。从这句话我推断他们想要确保彼此相邻的样条线的一阶和二阶导数是相同的。我现在的问题是,我该如何使用 scipy 做到这一点?我发现了这个:http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.splev.html

其中有一个参数der(要计算的样条曲线的导数阶数)。那么这个参数是2吗?


*关于此的后续问题,他们稍后会使用一阶微分点。我可以假设这些只是每个样条线的一阶导数吗?怎么可能得到这些?

最佳答案

scipy.interpolate 计算出的 k 阶样条曲线具有连续的 1 ... k-1:th 导数。对于您的情况,订单 k=3 将具有连续的一阶和二阶导数。您可以通过样条线的数值微分亲自检查这是否正确:

import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y = np.sin(x)
spl = interpolate.splrep(x, y, k=3)
xx = np.linspace(0, 10, 100000)
yy = interpolate.splev(xx, spl)
d1 = np.diff(yy) / np.diff(xx)
d2 = np.diff(d1) / np.diff(xx[1:])
d3 = np.diff(d2) / np.diff(xx[1:-1])
plt.subplot(311)
plt.plot(xx[1:], d1)
plt.title('first derivative')
plt.subplot(312)
plt.plot(xx[1:-1], d2)
plt.title('second derivative')
plt.subplot(313)
plt.plot(xx[2:-1], d3)
plt.title('third derivative')
plt.show()

三阶导数是第一个显示不连续性的导数。

二阶导数确实可以直接通过 splev(..., der=2) 完成。

(在没有阅读论文的情况下,我无法评论你的第二个问题。)

关于python - 使用三次样条插值时确保一阶微分和二阶微分连续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15928129/

相关文章:

python - 在 Windows、Linux、Spyder、命令行中生成 matplotlib 交互式图形的可移植方法

python - 如何让odeint成功?

java - 如何正确绘制路径?

python - 将包含字符串的列表和嵌套的字符串列表拆分为平面列表

python - 将 Sage 矩阵赋值给 R 中的变量

python - 使用 Komodo 和 Anaconda 在 python 中导入 scipy.misc.pilutil?

python - Hotelling 在 python 中的 T^2 分数

matlab - 矢量化插值matlab

Python:使用 GPU 进行双三次插值

python - 从嵌套列表创建树结构列表