天软金融分析.NET函数大全 > TSL函数 > 数学函数 > 数值计算 > 插值 > interp_unit

pchip    

简述
分段三次hermite插值
定义
pchip(x;y;xx:array):array
参数
名称类型说明
xarray 一维数组 横坐标序列
yarray 一维数组 纵坐标序列
xxarray 一维数组 插值点序列
返回array一维数组,插值序列。
  • 算法

    (x0,y0), (x1,y1)是数据集上相异的两点,且x0<x1。y=fx在xi上的函数值和一阶导数值分别为yi=fxi和mi=f'xi (i=0,1),求三次多项式H3x,使其满足H3xi=yiH3'xi=mi  (i=0,1)。
    构造三次埃尔米特插值多项式
    H3x=y0a0x+y1a1x+m0β0x+m1β1x
    条件 函数 函数值 导数值
    x0 x1 x0 x1
    a0x 1 0 0 0
    a1x 0 1 0 0
    β0x 0 0 1 0
    β1x 0- 0 0 1

    由  a0x1=a0'x1=0
    可写成 a0x=[a+b(x-x0)](x-x1)2
    由a0x0=1 得 a=1(x0-x1)2
    再由a0'(x0) = 0得b = - 2(x0-x1)3,所以

    a0x = [1+2x-x0x1-x0]( x-x1x0-x1)2
    同理(将x0<->x1)

    a1x = [1+2x-x0x1-x0]( x-x1x0-x1)2
    同样由β0(x0) = β0(x1)= β0'(x1) = 0,可令

    β0(x) = c(x-x0)( x-x1)2
    再由β0'(x0) = 1,得c = 1(x0-x1)2

    β0(x) = (x-x0) ( x-x1x0-x1)2 ,β1(x) = (x-x1) ( x-x0x1-x0)2
    a0(x) = [1+2x-x0x1-x0] ( x-x1x0-x1)2 ,β0(x) = (x-x0) ( x-x1x0-x1)2
    a1(x) = [1+2x-x1x0-x1] ( x-x0x1-x0)2 ,β1(x) = (x-x1) ( x-x0x1-x0)2


    a0(x) = [1+2l1(x)]l02(x)
    β0(x) = [x-x0]l02(x)

    a1(x) = [1+2l0(x)]l12(x)
    β1(x) = [x-x1]l12(x)
    l02(x) ,l12(x) 为以(x0,y0),(x1,y1) 插值点得Lagrange一次基函数。

    可得满足条件得三次埃尔米特插值多项式为
    H3x = y0a0(x) + y1a1(x) + m0β0x+m1β1x

     = y0[1+2x-x0x1-x0] ( x-x1x0-x1)2 + y1[1+2x-x1x0-x1] ( x-x0x1-x0)2 + m0(x-x0) ( x-x1x0-x1)2 + m1(x-x1) ( x-x0x1-x0)2
    范例

      uses interp_unit;//置顶
      x:=array(5,1,19,8);
      y:=array(2,3,1,7);
      xx:=array(4,12);
      return pchip(x,y,xx);
    //返回:array(3.3403,6.9345)
相关