spline
简述
三次样条插值
算法说明:
设S(x)满足样本点要求,则只需在每个子区间[xj,xj+1]上确定1个三次多项式,假设为:
Sj(x) = ajx3 + bjx2 + cjx + d
假设有n个点,需要n-1条线描述,每条线四个未知数,则未知数个数为4(n-1)。显然中间(n-2)个点具有4个约束条件:
S(xj) = f(xj)
S'(xj+0) = f'(xj-0)
S''(xj+0) = f''(xj-0)
S'''(xj+0) = f'''(xj-0)
两端断点存在约束 S(xi) = f(xi),则约束方程有4(n-2) + 2 = 4(n-1)-2,所以,总的未知数个数比方程个数多两个。所以需要额外的两个约束,于是就有了三种边界条件的插值算法。
第 1 类边界条件:给定端点处的一阶导数值
S'(x1) = y1' ,S'(xn) = yn'
第 2 类边界条件:给定端点处的一阶导数值
S''(x1) = y1'' ,S''(xn) = yn''
第 3 类边界条件是周期性条件,如果y=f(x)是以[xj, xj+1]为周期的函数,于是S(x)在端点处满足条件
S'(x1+0) = S'(xn- 0) ,S''(x1+0) = S''(xn- 0)
spline(x1;y1;xx1:array):array
名称 | 类型 | 说明 |
---|
x1 | array | 一维数字数组 横坐标序列 |
y1 | array | 一维数字数组 纵坐标序列 |
xx1 | array | 实数或一维数字数组 插值 |
返回 | array | 实数或一维数字数组,插值序列。 |
x:=array(5,1,19,8);
y:=array(2,3,1,7);
xx:=array(4,12);
return spline(x,y,xx);
//返回:array(1.1407,13.9444)