cubicHermiteSplineFit
语法
cubicHermiteSplineFit(X, Y, derivative,
[extrapolate=true])
参数
X 数值型向量,表示用于插值的点的 x 坐标(自变量)。X 必须严格递增,且至少包含两个元素。
Y 与 X 等长的数值型向量,表示用于插值的点的 y 坐标(因变量)。
derivative 与 X 等长的数值型向量,表示 Y 对 X 的一阶导数。
extrapolate 可选参数,布尔标量,表示当预测点超出已知数据范围时是否进行外插。默认为 true。
详情
对一组数值向量 X 和 Y 进行三次埃尔米特(Hermite)插值。
返回值:一个字典,包含以下键值对:
- modelName:字符串“CubicHermiteSpline”,表示模型名称。
- X:DOUBLE 类型向量,即输入 X 。
- extrapolate:布尔标量,即输入 extrapolate。
- coeffs:数值型向量,表示根据输入数据点拟合得到的多项式系数。
- predict:模型的预测函数。可通过
model.predict(X)
或predict(model, X)
调用。其中:- model:
cubicHermiteSplineFit
函数返回的字典。 - X:数值型向量,表示需要求值的点的 x 坐标,
predict
函数将返回在 X 点处的插值结果。
- model:
例子
对 x 和 y 进行三次埃尔米特(Hermite)插值。
x = [0.0000,0.0800,0.1000,0.1700,0.2000,0.2500,0.3000,0.4000,0.5000,0.6000,0.7000,0.7500,0.8000,0.9000,1.0000]
y = [1.2157,1.4000,1.4000,1.4000,1.4055,1.4323,1.4585,1.5096,1.5291,1.4985,1.4562,1.4440,1.4427,1.4461,1.4504]
N = shape(x)[0]
derv = take([0.0], N)
derv[0] = (y[1] - y[0]) \ (x[1] - x[0])
derv[N-1] = (y[N-1] - y[N-2]) \ (x[N-1] - x[N-2])
for (i in 1..(N-2)) {
derv[i] = (y[i+1] - y[i-1]) \ (x[i+1] - x[i-1])
}
model = cubicHermiteSplineFit(x, y, derv)
model;
/* output:
modelName->CubicHermiteSpline
X->[0,0.08,0.1,0.17,0.2,0.25,0.3,0.4,0.5,0.6,0.7,0.75,0.8,0.9,1]
coeffs->#0 #1 #2 #3
-------------------- -------------------- ------------------ ------
-71.992187499999985 5.759375 2.303749999999999 1.2157
4607.499999999995452 -184.299999999999869 1.842999999999999 1.4
11.224489795918488 -0.785714285714294 0 1.4
102.314814814811015 1.208333333333494 0.055000000000001 1.4
-55.2999999999993 5.409999999999942 0.40375 1.4055
-1.066666666666638 -0.066666666666655 0.53 1.4323
-15.366666666666818 1.493333333333353 0.515333333333334 1.4585
-9.249999999999774 -0.655000000000037 0.353 1.5096
19.199999999999896 -4.424999999999982 -0.055500000000001 1.5291
11.816666666666725 -1.766666666666675 -0.3645 1.4985
-4.133333333332982 2.593333333333321 -0.363333333333333 1.4562
-27.600000000001628 3.560000000000105 -0.134999999999998 1.444
-1.549999999999794 0.354999999999965 0.014 1.4427
-0.450000000000062 0.090000000000012 0.038499999999999 1.4461
extrapolate->1
predict->cubicHermiteSplinePredict
*/
通过 predict
函数对 x 进行插值预测。
preds = predict(model, x)
preds;
// output: [1.2157,1.4,1.4,1.4,1.4055,1.4323,1.4585,1.5096,1.5291,1.4985,1.4562,1.444,1.4427,1.4461,1.4504]