# Builtin - 数学 / 数值方法

## `any(data, n)`

声明：function

判断任意值或数组或数组其行列数据的真假，集合中只要有一个元素是真则为真。

| 参数   | 类型    | 说明                                                                    |
| ------ | ------- | ----------------------------------------------------------------------- |
| `data` | any     | 当N缺省或取默认值0时，可以为任意数据，否则只能是数组。                  |
| `n`    | integer | 若取值0，对Data整体判断，如果Data是数组，则对所有元素进行判断，缺省值。 |

返回：real/table

### 示例

范例一：

```tsl
// 判断非数组的真假
return any('a', 0);
// 输出：
// 1
```

范例二：

```tsl
// 判断特殊数据类型的真假
return any(array(1, '', ' ', nan, nil, inf, -inf, array()), 1);
// 结果
```

范例三：

```tsl
// 判断二维数组的行
f := array('e': ('A': 1, 'B': 0), 'f': ('A': 2, 'B': ''), 'd': ('A': 3, 'B': nil));
return any(f, 1);
// 输出：’e’,’f’,’d’为行标，表示该行结果。其中，’d’行中，对集合(3,nil)判断为真，则该行值判断结果为1，’B’列中。
```

范例四：

```tsl
// 判断多维数组的行
t := array('e': ('A': 0, 'B': 0), 'f': ('A': 2, 'B': array(1, 0)));
return any(t, 1);
// 输出：’f’行中对集合(0,array(1,0))->(0,1)->1，则该列结果为1
```

范例五：

```tsl
// 判断多维数组的列
t := array('e': ('A': 1, 'B': 1), 'f': ('A': 2, 'B': array(1, 0)));
return any(t, 2);
// 结果
```

## `all(data, n)`

声明：function

所有为真，判断任意值或数组或数组其行列数据的真假，集合中只要有一个元素为假则为假。

| 参数   | 类型    | 说明                                                                      |
| ------ | ------- | ------------------------------------------------------------------------- |
| `data` | any     | 当N缺省或取默认值0时，可以为任意数据，否则只能是数组。                    |
| `n`    | integer | 若值为0，则对Data整体判断，如果Data是数组，则对所有元素进行判断，缺省值。 |

返回：real/table

### 示例

范例一：

```tsl
// 判断数组中所有元素是否都为真
return all(array(1, 2, -1, 1, 9));
// 输出：
// 1
```

范例二：

```tsl
// 判断特殊数据类型的真假
return all(array(1, '', ' ', nan, nil, inf, -inf, array()), 1);
// 结果
```

范例三：

```tsl
// 判断二维数组的行
f := array('e': ('A': 1, 'B': 0), 'f': ('A': 2, 'B': 3), 'd': ('A': 3, 'B': nil));
return all(f, 1);
// 输出：’e’,’f’,’d’为行标，表示该行判断结果。其中，’d’行中，对集合(3,nil)判断为假，因为其中nil判断为假。
```

范例四：

```tsl
// 判断多维数组的行
t := array('e': ('A': 1, 'B': 1), 'f': ('A': 2, 'B': array(1, 0)));
return all(t, 1);
// 输出：’f’行中对集合(2,array(1,0))->(1,0)->0，则该行结果为0
```

范例五：

```tsl
// 判断多维数组的列
t := array('e': ('A': 1, 'B': 1), 'f': ('A': 2, 'B': array(1, 0)));
return all(t, 2);
// 输出：’B’列中对集合(1,array(1,0))->(1,0)->0，则该行结果为0
```

## `conv(a, b)`

声明：function

计算输入序列A、B的卷积

| 参数 | 类型  | 说明         |
| ---- | ----- | ------------ |
| `a`  | array | 一维数字数组 |
| `b`  | array | 一维数字数组 |

返回：array

### 示例

```tsl
a := array(0.4044, 0.32362, 0.38548, 0.17435, 0.08502, 0.41899, 0.02551, 0.46226);
b := array(0.82284, 0.7466, 0.17411, 0.85894, 0.7105, 0.51353, 0.30399, 0.01498, 0.0914, 0.36445, 0.14731, 0.1659, 0.98853, 0.44569, 0.11908);
return conv(a, b);
```

## `setSysParams(params)`

声明：function

一次性设置整个系统参数。

| 参数     | 类型  | 说明 |
| -------- | ----- | ---- |
| `params` | array |      |

返回：integer

### 示例

```tsl
s0 := getSysParams();
echo toStn(s0), '\r\n';
r := setSysParams(array("StockID": "SZ000001"));
s1 := getSysParams();
echo r, ':', toStn(s1), '\r\n';
// 打印结果：
```

## `GM_Icorr(values, target_index)`

声明：function

计算灰色关联分析结果。

| 参数           | 类型  | 说明           |
| -------------- | ----- | -------------- |
| `values`       | array | 待分析序列矩阵 |
| `target_index` | any   | 参考序列下标   |

返回：array

## `se_Gauss(a, b, x)`

声明：function

用全选主元高斯消去法求解n阶线性方程组AX = B

| 参数 | 类型  | 说明 |
| ---- | ----- | ---- |
| `a`  | array |      |
| `b`  | array |      |
| `x`  | array |      |

返回：any

## `se_Gauss_Jordan(a, b, x)`

声明：function

用全主元高斯-约当(Gauss-Jordan)消去法同时求解系数矩阵相同而常数向量不同的m个n阶线性方程组AX = B

| 参数 | 类型  | 说明 |
| ---- | ----- | ---- |
| `a`  | array |      |
| `b`  | array |      |
| `x`  | array |      |

返回：any

## `se_Ldl(a, b, x)`

声明：function

用LU分解法求解系数矩阵为对称、右端具有m组常数向量的线性方程组 AX = B

| 参数 | 类型  | 说明                                                                         |
| ---- | ----- | ---------------------------------------------------------------------------- |
| `a`  | array | 实型二维数组，大小为NN。存放方程组的系数矩阵，此系数矩阵必须为对称矩阵（即） |
| `b`  | array | 实型二维数组，大小为NM。存放方程组右端的常数向量                             |
| `x`  | array | 实型一维数组，大小为NM。返回方程组的解向量                                   |

返回：any

## `se_Cholesky(a, b, x)`

声明：function

用乔列斯基(Cholesky)分解法（即平方根法）求解系数矩阵为对称正定、且右端具有m组常数向量的线性方程组AX = B

| 参数 | 类型  | 说明                                                                         |
| ---- | ----- | ---------------------------------------------------------------------------- |
| `a`  | array | 实型二维数组，大小为NN。存放方程组的系数矩阵，此系数矩阵必须为对称矩阵（即） |
| `b`  | array | 实型二维数组，大小为NM。存放方程组右端的常数向量                             |
| `x`  | array | 实型一维数组，大小为NM。返回方程组的解向量                                   |

返回：any

## `se_Gauss_Seidel(a, b, x)`

声明：function

用高斯-赛德尔迭代法求解系数矩阵具有主元占优的线性方程组AX = B

| 参数 | 类型  | 说明                                       |
| ---- | ----- | ------------------------------------------ |
| `a`  | array | 实型二维数组，NN。存放方程组的系数矩阵     |
| `b`  | array | 实型二维数组，NM。存放方程组右端的常数向量 |
| `x`  | array | 实型一维数组，NM。返回方程组的解向量       |

返回：any

## `ip_SLQ(x, y, z, xv, yv, zv)`

声明：function

根据给定矩形域上的nXm个结点（i=0,1…..n-1；j = 0 , 1, ….., m-1）上的函数值Zij = Z(Xi,Yj)，利用二元三点插值公式计算指定插值点（u,v）处的函数值w=Z(u,v)

| 参数 | 类型  | 说明                                                                        |
| ---- | ----- | --------------------------------------------------------------------------- |
| `x`  | array | 实型一维数组，长度为N。存放给定nXm个点的X方向上的n个坐标，要求X0<X1...<Xn-1 |
| `y`  | array | 实型一维数组，长度为N。存放给定nXm个点的X方向上的m个坐标，要求Y0<Y1...<Ym-1 |
| `z`  | array | 实型二维数组，体积为为nXm。存放给定nXm个点上的函数值                        |
| `xv` | float | 实型变量，插值点的X坐标                                                     |
| `yv` | float | 实型变量，插值点的Y坐标                                                     |
| `zv` | float | 实型变量，返回的插值结果                                                    |

返回：any

## `ip_SLG(x, y, z, xv, yv, zv)`

声明：function

根据给定矩形域上的nXm个结点（i=0,1…..n-1；j = 0 , 1, ….., m-1）上的函数值Zij = Z(Xi,Yj)，利用二元插值公式计算指定插值点（u,v）处的函数值w=Z(u,v)

| 参数 | 类型  | 说明                                                                        |
| ---- | ----- | --------------------------------------------------------------------------- |
| `x`  | array | 实型一维数组，长度为N。存放给定nXm个点的X方向上的n个坐标，要求X0<X1...<Xn-1 |
| `y`  | array | 实型一维数组，长度为N。存放给定nXm个点的X方向上的m个坐标，要求Y0<Y1...<Ym-1 |
| `z`  | array | 实型二维数组，体积为为nXm。存放给定nXm个点上的函数值                        |
| `xv` | float | 实型变量，插值点的X坐标                                                     |
| `yv` | float | 实型变量，插值点的Y坐标                                                     |
| `zv` | float | 实型变量，返回的插值结果                                                    |

返回：any

## `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)
```

## `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;
// 输出：
// Execute script error at Line:4
// function:__main__:line 4:instruction:usercall: function:chckxy compile error or not found
// function:__main__:line 4:instruction:usercall: function execute error
```

## `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)
```

## `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 linear(x, y, xi);
// 输出：array(2.6667,1.7778)
```

## `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.3403,6.9345)
```

## `pwch(x, y, s, dx, divdif)`

声明：function

计算下x，y所对应的不同间隔区间。

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

返回：array

## `ppval(pp, xx)`

声明：function

对插值点列的值数据区间中计算出插值。

| 参数 | 类型  | 说明                            |
| ---- | ----- | ------------------------------- |
| `pp` | array | 二维数组 包含列＂x＂，＂coefs＂ |
| `xx` | array | 一维数组 插值点序列             |

返回：array

## `ig_Trapezoid_1(a, b, call_back, v)`

声明：function

用变步长梯形求积法计算定积分

| 参数        | 类型   | 说明                     |
| ----------- | ------ | ------------------------ |
| `a`         | float  | 实型变量。积分下限       |
| `b`         | float  | 实型变量。积分上限       |
| `call_back` | string | 计算被积函数值的回调     |
| `v`         | float  | 实型变量，返回的积分结果 |

返回：any

## `ig_Trapezoid_2(a, b, call_back, v)`

声明：function

用自适应梯形求积法计算定积分

| 参数        | 类型   | 说明                     |
| ----------- | ------ | ------------------------ |
| `a`         | float  | 实型变量。积分下限       |
| `b`         | float  | 实型变量。积分上限       |
| `call_back` | string | 计算被积函数值的回调     |
| `v`         | float  | 实型变量，返回的积分结果 |

返回：any

## `ig_Simpson_1(a, b, call_back, v)`

声明：function

用变步长辛普森(Simpson)计算定积分

| 参数        | 类型   | 说明                     |
| ----------- | ------ | ------------------------ |
| `a`         | float  | 实型变量。积分下限       |
| `b`         | float  | 实型变量。积分上限       |
| `call_back` | string | 计算被积函数值的回调     |
| `v`         | float  | 实型变量，返回的积分结果 |

返回：any

## `ig_Simpson_2(a, b, call_back1, call_back2, call_back3, v)`

声明：function

用变步长辛普森(Simpson)计算二重积分

| 参数         | 类型   | 说明                           |
| ------------ | ------ | ------------------------------ |
| `a`          | float  | 实型变量。积分下限             |
| `b`          | float  | 实型变量。积分上限             |
| `call_back1` | string | 计算积分下限的回调             |
| `call_back2` | string | 计算积分上限的回调             |
| `call_back3` | string | 计算被积函数f(x,y)函数值的回调 |
| `v`          | float  | 实型变量，返回的积分结果       |

返回：any

## `ig_Romberg(a, b, call_back, v)`

声明：function

用龙贝格(Romberg)求积法计算定积分，

| 参数        | 类型   | 说明                     |
| ----------- | ------ | ------------------------ |
| `a`         | float  | 实型变量。积分下限       |
| `b`         | float  | 实型变量。积分上限       |
| `call_back` | string | 计算被积函数值的回调     |
| `v`         | float  | 实型变量，返回的积分结果 |

返回：any

## `sendToClient(cmd_type, cmd_text, cmd_param, cmd_data, time_out)`

声明：function

发送命令到客户端执行。

| 参数        | 类型        | 说明                       |
| ----------- | ----------- | -------------------------- |
| `cmd_type`  | string      | 命令类型。                 |
| `cmd_text`  | string      | 命令串。                   |
| `cmd_param` | any         | 命令参数。                 |
| `cmd_data`  | any         | 命令数据。                 |
| `time_out`  | integer=300 | 超时的秒数。默认是300s超时 |

返回：any

### 示例

```tsl
// 1)执行命令：return 100+1
return sendToClient("getdo", "return 100 + 1;", nil, nil);
// 输出：101
// 2)采用系统参数取得数据，将取得的数据相加，并设置超时时间为30s
return sendToClient("getdo", "return getsysparam('a') + getsysparam('b');", nil, array("a": 10, "b": 30), 30);
// 输出：40
```

## `setGlobalCache(name, value)`

声明：function

写入全局缓存。

| 参数    | 类型   | 说明         |
| ------- | ------ | ------------ |
| `name`  | string | 缓存键       |
| `value` | any    | 写入缓存的值 |

返回：any
