Python 使用三次样条插值时,确保第一个和第二个微分是连续的
我正在读这个。在286页的这篇文章中,他们说他们使用三次样条插值来确保连续一阶微分和二阶微分的存在 我目前正试图用python实现这一点。从这句话中,我推断他们想要确保相邻样条曲线的一阶导数和二阶导数是相同的。我现在的问题是,我怎样才能用scipy做到这一点?我发现: 其中有一个参数Python 使用三次样条插值时,确保第一个和第二个微分是连续的,python,scipy,interpolation,Python,Scipy,Interpolation,我正在读这个。在286页的这篇文章中,他们说他们使用三次样条插值来确保连续一阶微分和二阶微分的存在 我目前正试图用python实现这一点。从这句话中,我推断他们想要确保相邻样条曲线的一阶导数和二阶导数是相同的。我现在的问题是,我怎样才能用scipy做到这一点?我发现: 其中有一个参数der(要计算的样条曲线的导数顺序)。那么这就是2的参数吗 *关于这一点的后续问题,他们稍后使用一阶微分点。我可以假设这些只是每个样条曲线的一阶导数吗?怎样才能得到这些呢?由scipy计算的样条曲线。按顺序k插值的
der
(要计算的样条曲线的导数顺序)。那么这就是2的参数吗
*关于这一点的后续问题,他们稍后使用一阶微分点。我可以假设这些只是每个样条曲线的一阶导数吗?怎样才能得到这些呢?由scipy计算的样条曲线。按顺序
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()
将numpy作为np导入
从scipy导入插值
将matplotlib.pyplot作为plt导入
x=np.linspace(0,10100)
y=np.sin(x)
spl=插值.splrep(x,y,k=3)
xx=np.linspace(0,10,100000)
yy=插值.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])
小地块(311)
地块(xx[1:],d1)
产品名称(“一阶导数”)
小地块(312)
平面图(xx[1:-1],d2)
产品名称(“二阶导数”)
小地块(313)
平面图(xx[2:-1],d3)
plt.title(‘三阶导数’)
plt.show()
三阶导数是显示不连续性的第一阶导数
实际上,可以通过splev(…,der=2)
直接获得二阶导数
(未阅读论文,我无法对你的第二个问题发表评论。)论文:www.ojtwist.be/ibi.pdf:),第286页,下半部分。