# Builtin - 数学 / 矩阵

## 矩阵运算

### `mInit(size_or_shape, value)`

生成指定尺寸并填充指定值的 FMArray。

| 参数            | 类型  | 说明                                            |
| --------------- | ----- | ----------------------------------------------- |
| `size_or_shape` | array | 一维长度，或形如 `array(rows, cols)` 的尺寸数组 |
| `value`         | float | 填充值；值的类型决定 FMArray 单元格类型         |

返回：fmarray

### `mInitDiag(rows, cols, value)`

生成对角线填充值的 FMArray。

| 参数    | 类型    | 说明         |
| ------- | ------- | ------------ |
| `rows`  | integer | 行数         |
| `cols`  | integer | 列数         |
| `value` | float   | 对角线填充值 |

返回：fmarray

### `mRand(rows, cols)`

生成随机 FMArray。

| 参数   | 类型    | 说明 |
| ------ | ------- | ---- |
| `rows` | integer | 行数 |
| `cols` | integer | 列数 |

返回：fmarray

## 数值微积分

### `MTM_f(n, m, _type)`

动力指标

| 参数    | 类型 | 说明     |
| ------- | ---- | -------- |
| `n`     | any  | 天数     |
| `m`     | any  | 天数     |
| `_type` | any  | 结果类型 |

返回：any

### `MTMMa_v(n, m)`

动力指标MTM的移动平均MTMMa，与系统证券pn_stock()、系统时间pn_date()、系统周期pn_cycle()、复权方式pn_rate()和复权基准日pn_rateday()相关。调用时需注意设置系统参数。

| 参数 | 类型 | 说明             |
| ---- | ---- | ---------------- |
| `n`  | any  | 整数，交易日天数 |
| `m`  | any  | 整数，交易日天数 |

返回：float

### `MTM_v(n)`

动力指标MTM，计算当日收盘价C与N日前的收盘价Cn之差M，差值越来越大则意味着市势正加速上升，与系统证券pn_stock()、系统时间pn_date()、系统周期pn_cycle()、复权方式pn_rate()和复权基准日pn_rateday()相关。调用时需注意设置系统参数。

| 参数 | 类型 | 说明             |
| ---- | ---- | ---------------- |
| `n`  | any  | 整数，交易日天数 |

返回：float

### `frameMean_JS(data, b_type, equal_var, alpha)`

均值JS压缩估计

| 参数        | 类型   | 说明                                                                                   |
| ----------- | ------ | -------------------------------------------------------------------------------------- |
| `data`      | array  | 二维数据表，T×N，T期样本数量，N个股票                                                  |
| `b_type`    | string | 字符串，压缩目标均值向量，b0:零向量，b1:均值，b2:波动率加权均值，b3:样本均值的均方误差 |
| `equal_var` | bool   | object                                                                                 |
| `alpha`     | float  | 实数，压缩系数，0到1，缺省时系统自动计算(推荐)，计算方式见JS均值压缩估计               |

返回：array

### `frameMean_BS(data, alpha)`

均值BS压缩估计

| 参数    | 类型  | 说明                                                                     |
| ------- | ----- | ------------------------------------------------------------------------ |
| `data`  | array | 二维数据表，T×N，T期样本数量，N个股票                                    |
| `alpha` | float | 实数，压缩系数，0到1，缺省时系统自动计算(推荐)，计算方式见BS均值压缩估计 |

返回：array

### `frameMean_BOP(data, b_type, alpha)`

均值BOP压缩估计

| 参数     | 类型   | 说明                                                                                   |
| -------- | ------ | -------------------------------------------------------------------------------------- |
| `data`   | array  | 二维数据表，T×N，T期样本数量，N个股票                                                  |
| `b_type` | string | 字符串，压缩目标均值向量，b0:零向量，b1:均值，b2:波动率加权均值，b3:样本均值的均方误差 |
| `alpha`  | float  | 实数，压缩系数，0到1，缺省时系统自动计算(推荐)，计算方式见BOP均值压缩估计              |

返回：array

### `frameCov_LW(data, alpha)`

协方差LW压缩估计

| 参数    | 类型  | 说明                                                                       |
| ------- | ----- | -------------------------------------------------------------------------- |
| `data`  | array | 二维数据表，T×N，T期样本数量，N个股票                                      |
| `alpha` | float | 实数，压缩系数，0到1，缺省时系统自动计算(推荐)，计算方式见LW协方差压缩估计 |

返回：array

### `frameCov_OAS(data, alpha)`

协方差OAS压缩估计

| 参数    | 类型  | 说明                                                                        |
| ------- | ----- | --------------------------------------------------------------------------- |
| `data`  | array | 二维数据表，T×N，T期样本数量，N个股票                                       |
| `alpha` | float | 实数，压缩系数，0到1，缺省时系统自动计算(推荐)，计算方式见OAS协方差压缩估计 |

返回：array

### `frameCov_BS(data, alpha)`

协方差BS压缩估计

| 参数    | 类型  | 说明                                                                       |
| ------- | ----- | -------------------------------------------------------------------------- |
| `data`  | array | 二维数据表，T×N，T期样本数量，N个股票                                      |
| `alpha` | float | 实数，压缩系数，0到1，缺省时系统自动计算(推荐)，计算方式见BS协方差压缩估计 |

返回：array

### `ar_GetValue2()`

数组类型教学函数。返回当前股票历史资产负债表序列的第四项，与系统参数(股票)相关。

返回：array

### `ar_SubArray(stocks, rdate)`

字符串数组类型教学函数。返回字符串数组Stocks中每一只股票在指定报告期Rdate的十大股东情况。

| 参数     | 类型     | 说明           |
| -------- | -------- | -------------- |
| `stocks` | array    | 证券，股票代码 |
| `rdate`  | datetime | 报告期         |

返回：array

### `ar_Define1(_type)`

数组类型教学函数。跟据Type的值来返回相应的随机数组。

| 参数    | 类型 | 说明       |
| ------- | ---- | ---------- |
| `_type` | any  | 用户自定义 |

返回：array

### `ar_GetValue1(bkname)`

数组类型教学函数。对板块Bkname下证券代码遍历，获得每个证券当前时间的收盘价。

| 参数     | 类型   | 说明       |
| -------- | ------ | ---------- |
| `bkname` | string | 市场与板块 |

返回：array

### `ar_Define3()`

数组类型教学函数。创建一个10×10的二维随机数组，同时对列下标命名。

返回：array

### `Demo_mt_va_Cholesky()`

mt_va_Cholesky()函数教学函数。对指定对称正定矩阵的行列式值平方根，其中矩阵为array( (5.0,7.0,6.0,5.0),(7.0,12.0,8.0,7.0), (6.0,8.0,10.0,9.0),(5.0,7.0,9.0,10.0));。

返回：float

### `Demo_mt_iv_Gauss_Jordan()`

mt_iv_Gauss_Jordan()函数教学函数。求一般实矩阵的逆矩阵，其中求逆的矩阵A=array((0.2368,0.2471,0.2568,1.2671),(0.1968,0.2071,1.2168,0.2271),(0.1581,1.1675,0.1768,0.1871),(1.1161,0.1254,0.1397,0.149))。

返回：any

### `Demo_mt_Subtraction()`

mt_Subtraction()函数教学函数。矩阵减法，其中矩阵A=array((3,-3),(5,-5))，B=array((-2,4),(1,8))，返回A-B。

返回：any

### `Demo_mt_Addition()`

mt_Addition ()函数教学函数。矩阵加法，其中矩阵A=array((3,-3),(5,-5))，B=array((-2,4),(1,8))，返回A+B。

返回：any

### `Demo_mt_Transposition()`

mt_Transposition()函数教学函数。矩阵转置，返回转置后的矩阵，其中转置的矩阵A=array((3,-3,11),()5,-5,8)。

返回：any

### `Framedrop_duplicates(data, subset, keep, rowname)`

数据表-去重

| 参数      | 类型   | 说明                                                |
| --------- | ------ | --------------------------------------------------- |
| `data`    | array  | Table,二维数据表,源数据                             |
| `subset`  | string | String,去重字段                                     |
| `keep`    | string | String,去重保留方法，""f"":保留首个，""l"":保留最后 |
| `rowname` | string | String,保留原索引重置字段名                         |

返回：array

### `Framedrop_na(data, how, subset)`

数据表-去掉含Nan的行

| 参数     | 类型   | 说明                                                   |
| -------- | ------ | ------------------------------------------------------ |
| `data`   | array  | Table,二维数据表,源数据                                |
| `how`    | string | String,去na行方法，默认/1/""any"":任意，2/""all"":所有 |
| `subset` | string | String,去重字段                                        |

返回：array

### `framePivot_table(t, index, columns, vals, aggfunc, aggfuncnames)`

分组、透视、汇总，类似可见Pivot_table

| 参数           | 类型   | 说明                                                                                                                                                                                                                  |
| -------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `t`            | any    | 数据表类型,数据表                                                                                                                                                                                                     |
| `index`        | string | 字符串,行分类字段，字段值含有nill等不可设为索引                                                                                                                                                                       |
| `columns`      | array  | 一维字符串数组,列分类字段，字段值含有nill等不可设为索引                                                                                                                                                               |
| `vals`         | array  | 一维字符串数组,值字段，未指定时，代表对所有除index、columns 指定字段之外的所有字段计算                                                                                                                                |
| `aggfunc`      | string | 字符串,值汇总函数,支持如下:；a、所有 TS_SQL 聚合函数:e.g:"avg"(avgof),"sum"(sumof)；b、内置函数:；"\_details": 分组详情；"\_first": 第一个；"\_last": 最后一个；c、自定义函数中使用关键字thisgroup 得到当前分组数据。 |
| `aggfuncnames` | array  | 一维字符串数组,自定义汇总函数名称对照表                                                                                                                                                                               |

返回：array

### `Framelag_zf(t, period, fillzero)`

数据表-推移涨幅(%) 涨幅(%)算法： period>0: 前n期涨幅 r\[i\] := (t(i)/t(i-period)-1)\*100; period<0: 到未来n期涨幅 r\[i\] := (t(i-period)/t(i)-1)\*100; 注意period>0时，与framePct_change的结果一致。

| 参数       | 类型  | 说明                                    |
| ---------- | ----- | --------------------------------------- |
| `t`        | array | Array of number,数据表，支持一维和二维  |
| `period`   | any   | Integer,移动期数，默认1                 |
| `fillzero` | bool  | Bool,下标越界是，是否返回0.False返回inf |

返回：array

### `Framepct_change(t, period, fillzero)`

数据表-到当期的变动百分比(%) 变动百分比(%)算法 r\[i\] := (t(i)/t(i-period)-1)\*100;

| 参数       | 类型  | 说明                                     |
| ---------- | ----- | ---------------------------------------- |
| `t`        | array | Array of number,数据表，支持一维和二维   |
| `period`   | any   | Integer,变动期数，默认1                  |
| `fillzero` | bool  | Bool,下标越界是，是否返回0. False返回inf |

返回：array

### `Frame_addprefix(t, prefix, ifcopy)`

数据表-数组下标批量加前缀 二维数组，对列名加前缀 一维数组，对行下标加前缀

| 参数     | 类型   | 说明                                   |
| -------- | ------ | -------------------------------------- |
| `t`      | any    | Table,源数组                           |
| `prefix` | string | String,前缀                            |
| `ifcopy` | bool   | Bool,是否在拷贝后的数组改列名,默认True |

返回：array

### `Frame_addsuffix(t, suffix, ifcopy)`

数据表-数组下标批量加后缀 二维数组，对列名加后缀 一维数组，对行下标加后缀

| 参数     | 类型   | 说明                                    |
| -------- | ------ | --------------------------------------- |
| `t`      | any    | Table,源数组                            |
| `suffix` | string | String,后缀                             |
| `ifcopy` | bool   | Bool,是否在拷贝后的数组改列名，默认True |

返回：array

### `frameIndex_filter(rawkeys, filter_cond, filter_type, dz_valuetokey)`

数组筛选器，用于下标数组行名或列名的筛选器

| 参数            | 类型   | 说明                                     |
| --------------- | ------ | ---------------------------------------- |
| `rawkeys`       | array  | 一维字符串数组,下标数组(0开始的自增下标) |
| `filter_cond`   | string | 字符串,筛选条件                          |
| `filter_type`   | any    | 用户自定义,筛选类型                      |
| `dz_valuetokey` | any    | 整数,Out:类型1时，输出ivalue对照用       |

返回：array

### `frameIndex_getilocDZ(raw_data_cols)`

用于方便获取 下标值 与 字段位置 下标数组对照（下标值->下标位置）

| 参数            | 类型  | 说明                                     |
| --------------- | ----- | ---------------------------------------- |
| `raw_data_cols` | array | 一维字符串数组,下标数组(从0开始自增数组) |

返回：array

### `mt_Multiplication(a, b, c)`

求N×M阶矩阵A与M×L阶矩阵B的乘积矩阵，即C=A×B

| 参数 | 类型  | 说明                                    |
| ---- | ----- | --------------------------------------- |
| `a`  | array | 实型二维数组，体积为N×M。被乘矩阵       |
| `b`  | array | 实型二维数组，体积为M×L。乘矩阵         |
| `c`  | array | 实型二维数组，体积为N×L。返回的结果矩阵 |

返回：any

### `mt_Addition(a, b, c)`

求N×M阶矩阵A与N×M阶矩阵B的和矩阵，即C=A+B

| 参数 | 类型  | 说明                                    |
| ---- | ----- | --------------------------------------- |
| `a`  | array | 实型二维数组，体积为N×M。被加矩阵       |
| `b`  | array | 实型二维数组，体积为N×M。加矩阵         |
| `c`  | array | 实型二维数组，体积为N×M。返回的结果矩阵 |

返回：any

### `mt_Subtraction(a, b, c)`

求N×M阶矩阵A与N×M阶矩阵B的差矩阵，即C=A-B

| 参数 | 类型  | 说明                                    |
| ---- | ----- | --------------------------------------- |
| `a`  | array | 实型二维数组，体积为N×M。被减矩阵       |
| `b`  | array | 实型二维数组，体积为N×M。减矩阵         |
| `c`  | array | 实型二维数组，体积为N×M。返回的结果矩阵 |

返回：any

### `mt_Transposition(a, c)`

求m×n阶矩阵A的转置矩阵，即C=

| 参数 | 类型  | 说明                                          |
| ---- | ----- | --------------------------------------------- |
| `a`  | array | 实型二维数组，体积为N×M。转置前矩阵           |
| `c`  | array | 实型二维数组，体积为M×N。返回转置后的结果矩阵 |

返回：any

### `mt_iv_Gauss_Jordan(a, x)`

用高斯-约当(Gauss-Jordan)法求解n阶方阵A的逆矩阵

| 参数 | 类型  | 说明                                  |
| ---- | ----- | ------------------------------------- |
| `a`  | array | 实型二维数组，体积为N×N。原矩阵       |
| `x`  | array | 实型二维数组，体积为N×N。返回的逆矩阵 |

返回：any

### `mt_iv_Ldl(a, x)`

求n阶对称正定矩阵A的逆矩阵

| 参数 | 类型  | 说明                                                |
| ---- | ----- | --------------------------------------------------- |
| `a`  | array | 实型二维数组，体积为N×N。原矩阵，必须为一个对称矩阵 |
| `x`  | array | 实型二维数组，体积为N×N。返回的逆矩阵               |

返回：any

### `mt_va_Gauss_Jordan(a, v)`

用高斯-约当(Gauss-Jordan)法求解n阶方阵A的行列式值

| 参数 | 类型  | 说明                      |
| ---- | ----- | ------------------------- |
| `a`  | array | 实型二维数组，体积为N×N。 |
| `v`  | float | 实型数。返回的行列式值    |

返回：any

### `mt_va_Cholesky(a, v)`

求对称正定矩阵的行列式值平方根

| 参数 | 类型  | 说明                                                |
| ---- | ----- | --------------------------------------------------- |
| `a`  | array | 实型二维数组，体积为N×N。原矩阵，必须为一个对称矩阵 |
| `v`  | float | 实型数。返回矩阵行列式值的平方根                    |

返回：any

### `Mt_decompose_lu(h, l, u)`

进行lu分解，H方阵，则可以得到下三角阵L，上三角矩阵U

| 参数 | 类型  | 说明                 |
| ---- | ----- | -------------------- |
| `h`  | array | 需要被分解的对称矩阵 |
| `l`  | array | 下三角阵             |
| `u`  | array | 上三角阵             |

返回：any

### `chol(h, l, p, options, sneg)`

进行乔列斯基分解，H对称正定，则可以得到三角阵L

| 参数      | 类型    | 说明                                                         |
| --------- | ------- | ------------------------------------------------------------ |
| `h`       | array   | 需要被分解的对称矩阵，正定矩阵的分解才能成功                 |
| `l`       | array   | 变参返回乔列斯基分解得到的三角阵                             |
| `p`       | integer | 变参返回H的分解信息，-1表示全部分解成功，否则表示分解到第p步 |
| `options` | array   | 三角阵选项，默认'upper'为上三角，'lower' 为下三角            |
| `sneg`    | array   | 当 H 非正定时计算曲率方向，正定时为空                        |

返回：array

#### 示例

```tsl
h := corr(rand(100, 4));
chol(h, l, p); // 乔列斯基分解
if p = -1 then return l; // p=-1表示分解成功
// 输出：
// Execute script error at Line:1
// function:__main__:line 1:instruction:rand: function:corr compile error or not found
// function:__main__:line 1:instruction:rand: function execute error
```

### `mt_decompose_qr(m, q, r, e, qr_type)`

E缺省的时候，对矩阵进行QR分解,M=Q :\*R，不缺省E的时候对矩阵进行QRe分解，M:\*e=Q:\*R.该分解使得R矩阵的对角元按绝对值从大倒小排列

| 参数      | 类型  | 说明                                                                                                          |
| --------- | ----- | ------------------------------------------------------------------------------------------------------------- |
| `m`       | array | 待分解矩阵                                                                                                    |
| `q`       | array | 可选参数，变参返回正交矩阵Q                                                                                   |
| `r`       | array | 可选参数，变参返回上三角矩阵R                                                                                 |
| `e`       | array | 可选参数，变参返回列置换矩阵E，默认E的结构是一个方阵，当有qr_Type参数时，0:E方阵，1:E为1维数组，2:忽略E参数。 |
| `qr_type` | any   | 可选参数，整数，为0,1,2之一，用于设定E参数的行为。                                                            |

返回：array

### `mt_decompose_eig(a, wr, wi, vr)`

计算特征值及特征向量

| 参数 | 类型  | 说明                              |
| ---- | ----- | --------------------------------- |
| `a`  | array | 需要被计算的n\*m矩阵              |
| `wr` | array | 变参返回A的特征值的实部，一维数组 |
| `wi` | array | 变参返回A的特征值的虚部，一维数组 |
| `vr` | array | 变参返回A的特征向量，二维数组     |

返回：array

### `mt_decompose_svd(a, s, u, d)`

矩阵的奇异值(SVD)分解

| 参数 | 类型  | 说明                            |
| ---- | ----- | ------------------------------- |
| `a`  | array | 待分解的m\*n矩阵                |
| `s`  | array | 变参返回A的奇异值，一维数组     |
| `u`  | array | 变参返回A的左奇异矩阵，二维数组 |
| `d`  | array | 变参返回A的右奇异矩阵，二维数组 |

返回：any

### `mt_decompose_chol(a, ra, flag)`

cholesky分解基础函数;如果不担心效率可以使用公用函数chol

| 参数   | 类型  | 说明                                      |
| ------ | ----- | ----------------------------------------- |
| `a`    | array | 待分解的方正矩阵(二维数字数组,行列数相同) |
| `ra`   | array | 分解结果返回                              |
| `flag` | bool  | object                                    |

返回：array

### `mt_decompose_ldl(a, ra, p)`

ldl 分解基础函数,如果a正定L\*D\*`L=A;

| 参数 | 类型  | 说明                                                                                                                                                                                                                                                                                               |
| ---- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `a`  | array | 待分解的方正矩阵(二维数字数组,行列数相同)                                                                                                                                                                                                                                                          |
| `ra` | array | 分解结果返回,包括,三角矩阵,对角矩阵                                                                                                                                                                                                                                                                |
| `p`  | array | 分解结果的行列信息.a如果为正定矩阵那么p为1到length(a)递增序列.此时,ra的下三角为 L矩阵,对角元为D矩阵.当p为非递增序列,时表示行列置换信息.如果p\[i\]=k>0 and k<> i+1,那么a的i行和k-1行互换,i列与k-1列互换,p\[i\]=k<0 那么d在此处为2\*2的块,在ra的i-1,i行列的4个元,a的第i行和k-1行互换,i列和k-1列互换. |

返回：array

### `reIndex2(data, flag)`

修改数组的行标或列名，主要用于字符串下标修改为数字下标等

| 参数   | 类型             | 说明 |
| ------ | ---------------- | ---- |
| `data` | array,tablearray |      |
| `flag` | integer          |      |

返回：array,tablearray

#### 示例

范例数据表：a := array('C':('A':1,'B':'too'),'D':('A':2,'B':'two'));

```tsl
// 其显示如下：
```

范例一：将表列标改为数字

```tsl
a := array('C': ('A': 1, 'B': 'too'), 'D': ('A': 2, 'B': 'two'));
return reIndex2(a, 0);
// 输出：
// Execute script error at Line:2
// function:__main__:line 2:instruction:usercall: function:reIndex2 compile error or not found
// function:__main__:line 2:instruction:usercall: function execute error
```

范例二：将行列标作为首列首行

```tsl
a := array('C': ('A': 1, 'B': 'too'), 'D': ('A': 2, 'B': 'two'));
return reIndex2(a, 5);
// 输出：
// Execute script error at Line:2
// function:__main__:line 2:instruction:usercall: function:reIndex2 compile error or not found
// function:__main__:line 2:instruction:usercall: function execute error
```

### `orth(a)`

矩阵范围内的标准正交基向量

| 参数 | 类型  | 说明   |
| ---- | ----- | ------ |
| `a`  | array | 数组， |

返回：array

#### 示例

```tsl
// 计算矩阵A的标准正交基
a := array((0, 1), (1, 1), (1, 0));
return orth(a);
// 输出：
// Execute script error at Line:3
// function:__main__:line 3:instruction:usercall: function:orth compile error or not found
// function:__main__:line 3:instruction:usercall: function execute error
```

### `det(a)`

行列式

| 参数 | 类型  | 说明              |
| ---- | ----- | ----------------- |
| `a`  | array | 二维数字数组 样本 |

返回：real

#### 示例

```tsl
a := array((1, 2), (3, 4));
return det(a); // -2
```

### `isSymmetry(a, tol)`

判断是否为对称矩阵

| 参数  | 类型  | 说明           |
| ----- | ----- | -------------- |
| `a`   | array | array 二维数组 |
| `tol` | real  | real 精度      |

返回：integer

#### 示例

```tsl
a := array((2, 1), (1, 3));
return isSymmetry(a, 0.1); // 1
```

### `diag(a)`

对角阵

| 参数 | 类型  | 说明       |
| ---- | ----- | ---------- |
| `a`  | array | array 数组 |

返回：array

#### 示例

```tsl
a := array((2, 1), (1, 3));
return diag(a); // array(2,3);
```

### `norm2(a, flag)`

范数

| 参数   | 类型   | 说明              |
| ------ | ------ | ----------------- |
| `a`    | array  | 二维数字数组 样本 |
| `flag` | string | string 范数类型   |

返回：real

#### 示例

```tsl
a := array((2, 1), (1, 3));
return norm2(a, 'inf'); // 4
```

### `roots(p)`

一元n次方程求根

| 参数 | 类型  | 说明         |
| ---- | ----- | ------------ |
| `p`  | array | array 多项式 |

返回：array

#### 示例

```tsl
// 求根：3x^3+x^2+x^1+0^0=0
return roots(array(0, 1, 1, 3));
// 输出：
// Execute script error at Line:2
// function:__main__:line 2:instruction:array: function:roots compile error or not found
// function:__main__:line 2:instruction:array: function execute error
```

### `cond(x)`

求矩阵 X 的条件数，最大奇异值除最小奇异值

| 参数 | 类型  | 说明                               |
| ---- | ----- | ---------------------------------- |
| `x`  | array | array 需要求条件数的矩阵或二维数组 |

返回：real

#### 示例

```tsl
x := array((9, 1), (-1, 0), (0, 2), (1, 1));
return cond(x); // 4.22
```

### `pinv(a, t)`

伪逆

| 参数 | 类型  | 说明                                    |
| ---- | ----- | --------------------------------------- |
| `a`  | array | array 矩阵                              |
| `t`  | real  | real 精度 默认为 2.220446049250313e-016 |

返回：array

#### 示例

```tsl
x := array((9, 1), (-1, 0), (0, 2), (1, 1));
return pinv(x);
// 输出：
// Execute script error at Line:2
// function:__main__:line 2:instruction:usercall: function:pinv compile error or not found
// function:__main__:line 2:instruction:usercall: function execute error
```

### `eigen(a, eigen, eigenvectors, isreal)`

特征根与特征向量

| 参数           | 类型    | 说明                              |
| -------------- | ------- | --------------------------------- |
| `a`            | array   | array 特征值分解的数据            |
| `eigen`        | array   | array 变参返回特征值              |
| `eigenvectors` | array   | array 变参返回特征向量            |
| `isreal`       | integer | bool 是否只输出实特征值及特征向量 |

返回：integer

#### 示例

```tsl
a := array((1, 2), (3, 4));
eigen(a, eigen);
return eigen;
// array(-0.37,5.37)
```

### `isDefinite(h)`

判断矩阵是否正定、半正定，采用 Cholesky 分解方法

| 参数 | 类型  | 说明       |
| ---- | ----- | ---------- |
| `h`  | array | array 样本 |

返回：real

#### 示例

```tsl
x := array((3, 1), (1, 4));
return isDefinite(x); // 1
```

### `transPose(data)`

数组转置。注意，该函数主要用于客户端结果处理，不提供给用户程序编辑。

| 参数   | 类型  | 说明                                                  |
| ------ | ----- | ----------------------------------------------------- |
| `data` | array | 数据表结构数据，第一列数据必须为字符串并且列数要大于3 |

返回：array

### `transPoseForChart(data)`

表格转置。注意，该函数主要用于客户端结果处理，不提供给用户程序编辑。

| 参数   | 类型  | 说明       |
| ------ | ----- | ---------- |
| `data` | array | 数据表类型 |

返回：array

### `transPoseForChartSysParam()`

表格转置。注意，该函数主要用于客户端结果处理，不提供给用户程序编辑。

返回：array

### `transPoseForChartSysParamEx()`

表格转置。注意，该函数主要用于客户端结果处理，不提供给用户程序编辑。

返回：array

### `transDataStandardize(nil_v)`

空(NIL)数据标准化。注意，该函数主要用于客户端结果处理，不提供给用户程序编辑。

| 参数    | 类型    | 说明                      |
| ------- | ------- | ------------------------- |
| `nil_v` | integer | Nil类型的数据标准化后的值 |

返回：array
