Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用三次样条插值时,确保第一个和第二个微分是连续的_Python_Scipy_Interpolation - Fatal编程技术网

Python 使用三次样条插值时,确保第一个和第二个微分是连续的

Python 使用三次样条插值时,确保第一个和第二个微分是连续的,python,scipy,interpolation,Python,Scipy,Interpolation,我正在读这个。在286页的这篇文章中,他们说他们使用三次样条插值来确保连续一阶微分和二阶微分的存在 我目前正试图用python实现这一点。从这句话中,我推断他们想要确保相邻样条曲线的一阶导数和二阶导数是相同的。我现在的问题是,我怎样才能用scipy做到这一点?我发现: 其中有一个参数der(要计算的样条曲线的导数顺序)。那么这就是2的参数吗 *关于这一点的后续问题,他们稍后使用一阶微分点。我可以假设这些只是每个样条曲线的一阶导数吗?怎样才能得到这些呢?由scipy计算的样条曲线。按顺序k插值的

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

我目前正试图用python实现这一点。从这句话中,我推断他们想要确保相邻样条曲线的一阶导数和二阶导数是相同的。我现在的问题是,我怎样才能用scipy做到这一点?我发现:

其中有一个参数
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页,下半部分。