feat(tsl-api-reference): add class and framework API lookup

This commit is contained in:
csh
2026-08-20 13:49:55 +08:00
parent 7233646398
commit 651c1f68d2
637 changed files with 25498 additions and 36673 deletions
@@ -0,0 +1,278 @@
# 数学函数 / 数值计算 / 插值
## `chckxy(x, y)`
声明:function
合并xy后对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
对插值点列的值数据区间中计算出插值
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ----------------------------- |
| `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
计算下xy所对应的不同间隔区间
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| -------- | ----- | -------- |
| `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,要求X0<X1...<Xn-1 |
| `y` | array of real | 实型一维数组,长度为N。存放N个给定点上的函数值Yi |
| `xi` | array of real | 实数或者一维实数数组,存放指定插值点的值 |
| `method` | string | 方法选择,具体取值如下: |
返回:array
### 示例
范例01:使用三次样条插值生成一组插值点
```tsl
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:最近邻插值
```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)
```