kroghInterpolate

语法

kroghInterpolate(X, Y, newX, [der=0])

参数

X 数值向量,表示用于插值的点的 x 坐标。必须是递增序列,不能包含 NULL 值。

Y 数值向量,与 Xi 等长,表示用于插值的点的 y 坐标。不能包含 NULL 值。

newX 数值向量,表示需要求值的点的 x 坐标。不能包含 NULL 值。

der 可选参数,非负整数,表示返回值的导数阶数。默认值为 0,表示计算多项式函数本身的值。

详情

对一组点集进行多项式插值,该多项式通过点集中所有的数据点对 (x, y)。返回在 X 点处指定导数阶数的多项式估值。

可以额外指定在每个点 x 处的多个导数值:用户通过重复 xi 值并将导数值指定为连续的 yi 值来实现。

  • 当 x 是唯一值时,y 为多项式 f(x) 的值。

  • 当 x 出现相同值时,则第一个 y 是 f(x) 的值,第二个为对应的 x 的一阶导数值,第三个为对应的 x 的二阶导数值,依此类推。比如对于输入X = [0,0,1,1],Yi= [1,0,2,3],有 Y[0]=f(0),Y[1]=f'(0),Y[2]=f(1),Y[3]=f'(1)。

例子

以正弦函数为例进行多项式插值,分别计算 xx 点处的多项式估值和其一阶导数值。

def linspace(start, end, num, endpoint=true){
	if(endpoint) return end$DOUBLE\(num-1), start + end$DOUBLE\(num-1)*0..(num-1)
	else return start + end$DOUBLE\(num-1)*0..(num-1)	
}

x = 0 1 2 3 4 5
y = sin(x)
xx = linspace(0.0, 5.0, 10)[1]
yy=kroghInterpolate(x,y,xx)
yy;

yy1=kroghInterpolate(x,y,xx,1)
yy1;

yy 返回值:

[0,0.515119011157387,0.898231239576709,0.998548648650381,0.793484053410063,0.354287125066207,-0.188319604452395,-0.678504737959061,-0.969692008469677,-0.958924274663139]

yy1 返回值:

[0.885486080979582,0.875967413938641,0.459031117252456,-0.103633680213926,-0.612193041424271,-0.92866822117116,-0.976935666075988,-0.742727014588963,-0.273629096989106,0.320916064615744]