本文简要介绍 python 语言中 scipy.interpolate.splrep
的用法。
用法:
scipy.interpolate.splrep(x, y, w=None, xb=None, xe=None, k=3, task=0, s=None, t=None, full_output=0, per=0, quiet=1)#
找到一维曲线的B-spline 表示。
给定一组数据点
(x[i], y[i])
确定区间xb <= x <= xe
上 k 度的平滑样条近似。- x, y: array_like
定义曲线 y = f(x) 的数据点。
- w: 数组,可选
严格正的 1 阶权重数组,其长度与 x 和 y 相同。权重用于计算加权最小二乘样条拟合。如果 y 值中的误差具有由向量 d 给出的标准差,则 w 应为 1/d。默认值为ones(len(x))。
- xb, xe: 浮点数,可选
适合的间隔。如果没有,它们分别默认为 x[0] 和 x[-1]。
- k: 整数,可选
样条拟合的程度。建议使用三次样条。应避免使用偶数 k 值,尤其是在 s 值较小的情况下。 1 <= k <= 5
- task: {1, 0, -1},可选
如果 task==0 找到给定平滑因子 s 的 t 和 c。
如果 task==1 找到 t 和 c 以获得平滑因子的另一个值,s。对于同一组数据,之前必须有一个 task=0 或 task=1 的调用(t 将被存储在内部使用)
如果 task=-1 找到给定节点集 t 的加权最小二乘样条。这些应该是内部结,因为末端的结将自动添加。
- s: 浮点数,可选
平滑条件。平滑度通过满足以下条件来确定:
sum((w * (y - g))**2,axis=0) <= s
,其中 g(x) 是 (x,y) 的平滑插值。用户可以使用 s 来控制贴合的紧密度和平滑度之间的权衡。较大的 s 意味着更多的平滑,而较小的 s 值表明更少的平滑。 s 的推荐值取决于权重 w。如果权重表示 y 标准差的倒数,则应在 (m-sqrt(2*m),m+sqrt(2*m)) 范围内找到良好的 s 值,其中 m 是x、y 和 w 中的数据点。默认值:如果提供了权重,则 s=m-sqrt(2*m)。如果未提供权重,则 s = 0.0(插值)。- t: 数组,可选
任务所需的结=-1。如果给定,则任务自动设置为-1。
- full_output: 布尔型,可选
如果非零,则返回可选输出。
- per: 布尔型,可选
如果非零,则认为数据点是周期性的,周期为 x[m-1] - x[0],并返回平滑的周期性样条近似。不使用 y[m-1] 和 w[m-1] 的值。
- quiet: 布尔型,可选
非零抑制消息。
- tck: 元组
一个元组 (t,c,k),包含节点向量、B-spline 系数和样条曲线的度数。
- fp: 数组,可选
样条近似的残差平方和的加权和。
- ier: 整数,可选
关于 splrep 成功的整数标志。如果 ier<=0,则表示成功。如果 ier 在 [1,2,3] 中发生错误但未引发错误。否则会引发错误。
- msg: str,可选
与整数标志 ier 对应的消息。
参数 ::
返回 ::
注意:
请参阅
splev
以评估样条及其导数。使用来自 FITPACK 的 FORTRAN 例程curfit
。用户有责任确保x是独一无二的。否则,
splrep
不会返回合理的结果。如果提供,结t必须满足Schoenberg-Whitney条件,即必须有数据点的子集
x[j]
这样t[j] < x[j] < t[j+k+1]
, 为了j=0, 1,...,n-k-2
.此例程 zero-pads 系数数组
c
具有与结数组t
相同的长度(评估例程忽略尾随的k + 1
系数,splev
和BSpline
。)这是在与splprep
相比,它没有 zero-pad 系数。参考:
基于 [1]、[2]、[3] 和 [4] 中说明的算法:
[1]P. Dierckx,“使用样条函数对实验数据进行平滑、微分和积分的算法”,J.Comp.Appl.Maths 1 (1975) 165-184。
[2]P. Dierckx,“使用样条函数在矩形网格上平滑数据的快速算法”,SIAM J.Numer.Anal。 19 (1982) 1286-1304。
[3]P. Dierckx,“用样条函数进行曲线拟合的改进算法”,报告 tw54,计算机科学系,K.U.鲁汶,1981 年。
[4]P. Dierckx,“用样条拟合曲线和曲面”,数值分析专着,牛津大学出版社,1993 年。
例子:
您可以使用B-spline 曲线插入一维点。教程中提供了更多示例。
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> from scipy.interpolate import splev, splrep >>> x = np.linspace(0, 10, 10) >>> y = np.sin(x) >>> spl = splrep(x, y) >>> x2 = np.linspace(0, 10, 200) >>> y2 = splev(x2, spl) >>> plt.plot(x, y, 'o', x2, y2) >>> plt.show()
相关用法
- Python SciPy interpolate.splder用法及代码示例
- Python SciPy interpolate.splantider用法及代码示例
- Python SciPy interpolate.splprep用法及代码示例
- Python SciPy interpolate.sproot用法及代码示例
- Python SciPy interpolate.make_interp_spline用法及代码示例
- Python SciPy interpolate.krogh_interpolate用法及代码示例
- Python SciPy interpolate.InterpolatedUnivariateSpline用法及代码示例
- Python SciPy interpolate.BSpline用法及代码示例
- Python SciPy interpolate.LSQSphereBivariateSpline用法及代码示例
- Python SciPy interpolate.griddata用法及代码示例
- Python SciPy interpolate.LinearNDInterpolator用法及代码示例
- Python SciPy interpolate.PPoly用法及代码示例
- Python SciPy interpolate.NdBSpline用法及代码示例
- Python SciPy interpolate.pade用法及代码示例
- Python SciPy interpolate.barycentric_interpolate用法及代码示例
- Python SciPy interpolate.RegularGridInterpolator用法及代码示例
- Python SciPy interpolate.NdPPoly用法及代码示例
- Python SciPy interpolate.interp2d用法及代码示例
- Python SciPy interpolate.approximate_taylor_polynomial用法及代码示例
- Python SciPy interpolate.RectSphereBivariateSpline用法及代码示例
- Python SciPy interpolate.CloughTocher2DInterpolator用法及代码示例
- Python SciPy interpolate.interp1d用法及代码示例
- Python SciPy interpolate.BPoly用法及代码示例
- Python SciPy interpolate.BarycentricInterpolator用法及代码示例
- Python SciPy interpolate.make_smoothing_spline用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.interpolate.splrep。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。