原文:https://docs.scipy.org/doc/numpy/reference/generated/numpy.polynomial.hermite.hermfit.html
校对:(虚位以待)
numpy.polynomial.hermite.
hermfit
(x, y, deg, rcond=None, full=False, w=None)[source]Hermite系列的最小二乘拟合数据。
返回对于在点x给出的数据值y的最小二乘拟合的度数deg的Hermite系列的系数。如果y是1-D,则返回的系数也将是1-D。如果y是2-D多重拟合,对于y的每一列进行一次,并且所得到的系数存储在2-D返回的相应列中。拟合的多项式是形式
其中n是deg。
参数: | x:array_like,shape(M,)
y:array_like,shape(M,)或(M,K)
deg:int或1-D array_like
rcond:float,可选
full:bool,可选
w:array_like,shape(M,),可选
|
---|---|
返回: | coef:ndarray,shape(M,)或(M,K)
[residuals,rank,singular_values,rcond]:list
|
警告: | RankWarning
|
也可以看看
chebfit
,legfit
,lagfit
,polyfit
,hermefit
hermval
hermvander
hermweight
linalg.lstsq
scipy.interpolate.UnivariateSpline
笔记
解决方案是Hermite系列p的系数,其使加权平方误差的和最小化
其中是权重。这个问题通过设置(通常)过度确定的矩阵方程来解决
其中V是x的加权伪Vandermonde矩阵,c是要求解的系数,w权重,y是观察值。然后使用V的奇异值分解来求解该方程。
如果V的一些奇异值如此小以至于被忽略,则将发出RankWarning。这意味着可能不良地确定系数值。使用较低的顺序通常会摆脱警告。rcond参数也可以设置为小于其默认值的值,但是所得到的拟合可能是假的并且具有来自舍入误差的较大贡献。
使用Hermite系列的拟合可能是最有用的,当数据可以近似为sqrt(w(x)) * p >
,其中w(x)是Hermite重量。在这种情况下,应当与数据值y[i]/sqrt(w(x[i])
一起使用权重sqrt(w(x[i])
。加权函数可用为hermweight
。
参考文献
[R61] | 维基百科,“曲线拟合”,http://en.wikipedia.org/wiki/Curve_fitting |
例子
>>> from numpy.polynomial.hermite import hermfit, hermval
>>> x = np.linspace(-10, 10)
>>> err = np.random.randn(len(x))/10
>>> y = hermval(x, [1, 2, 3]) + err
>>> hermfit(x, y, 2)
array([ 0.97902637, 1.99849131, 3.00006 ])