# 数学函数 / 数值计算 / 插值 ## `chckxy(x, y)` 声明:function 合并x,y后对x列正序排列 | 参数 | 类型 | 说明 | | ---- | ----- | -------- | | `x` | array | 一维数组 | | `y` | array | 一维数组 | 返回:array ### 示例 ```tsl uses interp_unit; x := array(5, 1, 19, 8); y := array(2, 3, 1, 7); chckxy(x, y); return x | y; // 输出:array((1,3),(5,2),(8,7),(19,1)) ``` ## `histc2(a, b)` 声明:function 记录a中的元素在b中第几个区间的位置 | 参数 | 类型 | 说明 | | ---- | ----- | -------- | | `a` | array | 一维数组 | | `b` | array | 一维数组 | 返回:array ### 示例 ```tsl uses interp_unit; a := 1->10; b := 3->7; return histc2(a, b); // 输出:array(0,0,1,1,2,3,4,0,0,0) ``` ## `nearest(x, y, xi)` 声明:function 最邻近插值 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------- | | `x` | array | 一维数组 横坐标序列 | | `y` | array | 一维数组 纵坐标序列 | | `xi` | array | 一维数组 插值点序列 | 返回:array ### 示例 ```tsl uses interp_unit; x := array(5, 1, 19, 8); y := array(2, 3, 1, 7); xi := array(4, 12); return nearest(x, y, xi); // 输出:array(3,1) ``` ## `pchip(x, y, xx)` 声明:function 分段三次hermite插值 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------- | | `x` | array | 一维数组 横坐标序列 | | `y` | array | 一维数组 纵坐标序列 | | `xx` | array | 一维数组 插值点序列 | 返回:array ### 示例 ```tsl 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.34030621353744,6.93450987255447) ``` ## `ppval(pp, xx)` 声明:function 对插值点列的值数据区间中计算出插值 | 参数 | 类型 | 说明 | | ---- | ----- | ----------------------------- | | `pp` | array | 二维数组,包含列 "x"、"coefs" | | `xx` | array | 一维数组 插值点序列 | 返回:array ### 示例 ```tsl uses interp_unit; x := array(1, 5, 8, 19); y := array(3, 2, 7, 1); s := array(0, 0, 0, 0); dx := array(4, 3, 11); divdif := array(-0.25, 1.66666666666667, -0.545454545454545); pp := pwch(x, y, s, dx, divdif); xx := array(4, 12); return ppval(pp, xx); // 输出:array(2.15625,5.19684447783622) ``` ## `pwch(x, y, s, dx, divdif)` 声明:function 计算下x,y所对应的不同间隔区间 | 参数 | 类型 | 说明 | | -------- | ----- | -------- | | `x` | array | 一维数组 | | `y` | array | 一维数组 | | `s` | array | 一维数组 | | `dx` | array | 一维数组 | | `divdif` | array | 一维数组 | 返回:array ### 示例 ```tsl uses interp_unit; x := array(1, 5, 8, 19); y := array(3, 2, 7, 1); s := array(0, 0, 0, 0); dx := array(4, 3, 11); divdif := array(-0.25, 1.66666666666667, -0.545454545454545); return pwch(x, y, s, dx, divdif); // 输出:array("x":(1,5,8,19),"coefs": // ((0.03125,-0.1875,0,3), // (-0.370370370370371,1.66666666666667,0,2), // (0.00901577761081892,-0.148760330578512,0,7))) ``` ## `interp(x, y, xi, method)` 声明:function 分段插值函数,根据给定的数据 x,y 对数据xv进行分段插值,可选择方法 | 参数 | 类型 | 说明 | | -------- | ------------- | ------------------------------------------------------------- | | `x` | array of real | 实型一维数组,长度为N。存放给定N个点的值Xi,要求X01; y := x^2-x; xi := array(0.005, 0.01)->1; yi := interp(x, y, xi, 'spline'); return yi; ``` 范例02:最近邻插值 ```tsl x_ := array(5, 1, 19, 8); y_ := array(2, 3, 1, 7); xi := array(4, 12); return interp(x_, y_, xi, "nearest"); // 输出:array(2,7) ``` 范例03:分段线性插值 ```tsl x_ := array(5, 1, 19, 8); y_ := array(2, 3, 1, 7); xi := array(4, 12); return interp(x_, y_, xi, "linear"); // 输出:array(2.25,4.8182) ``` 范例04:三次样条插值 ```tsl x_ := array(5, 1, 19, 8); y_ := array(2, 3, 1, 7); xi := array(4, 12); return interp(x_, y_, xi, "spline"); // 输出:array(1.1407,13.9444) ``` 范例05:分段三次 Hermite 插值 ```tsl x_ := array(5, 1, 19, 8); y_ := array(2, 3, 1, 7); xi := array(4, 12); return interp(x_, y_, xi, "pchip"); // 输出:array(2.0156,6.7115) ``` ## `linear(x, y, xi)` 声明:function 线性插值 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------- | | `x` | array | 一维数组 横坐标序列 | | `y` | array | 一维数组 纵坐标序列 | | `xi` | array | 一维数组 插值点序列 | 返回:array ### 示例 ```tsl uses interp_unit; // 置顶 x := array(5, 1, 19, 8); y := array(2, 3, 1, 7); xi := array(4, 12); return interp_unit.linear(x, y, xi); // 输出:array(2.66666666666667,1.77777777777778) ``` ## `spline(x1, y1, xx1)` 声明:function 三次样条插值 | 参数 | 类型 | 说明 | | ----- | ----- | ----------------------- | | `x1` | array | 一维数字数组 横坐标序列 | | `y1` | array | 一维数字数组 纵坐标序列 | | `xx1` | array | 实数或一维数字数组 插值 | 返回:array ### 示例 ```tsl 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) ```