Files
playbook/skills/tsl-api-reference/references/codegen/dotnet/math/numerical_calculation-interpolation.md
T

5.8 KiB
Raw Blame History

数学函数 / 数值计算 / 插值

chckxy(x, y)

声明:function

合并xy后对x列正序排列

参数 类型 说明
x array 一维数组
y array 一维数组

返回:array

示例

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

示例

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

示例

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

示例

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

示例

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

计算下xy所对应的不同间隔区间

参数 类型 说明
x array 一维数组
y array 一维数组
s array 一维数组
dx array 一维数组
divdif array 一维数组

返回:array

示例

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,要求X0<X1...<Xn-1
y array of real 实型一维数组,长度为N。存放N个给定点上的函数值Yi
xi array of real 实数或者一维实数数组,存放指定插值点的值
method string 方法选择,具体取值如下:

返回:array

示例

范例01:使用三次样条插值生成一组插值点

x := array(0, 0.01)->1;
y := x^2-x;
xi := array(0.005, 0.01)->1;
yi := interp(x, y, xi, 'spline');
return yi;

范例02:最近邻插值

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:分段线性插值

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:三次样条插值

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 插值

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

示例

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

示例

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)