# Builtin - 数学 / 矩阵

## 矩阵运算

## `mInit(size_or_shape, value)`

声明：function

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

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

返回：fmarray

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

声明：function

生成对角线填充值的 FMArray。

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

返回：fmarray

## `mRand(rows, cols)`

声明：function

生成随机 FMArray。

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

返回：fmarray

## 数值微积分

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

声明：function

均值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)`

声明：function

均值BS压缩估计

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

返回：array

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

声明：function

均值BOP压缩估计

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

返回：array

## `frameCov_LW(data, alpha)`

声明：function

协方差LW压缩估计

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

返回：array

## `frameCov_OAS(data, alpha)`

声明：function

协方差OAS压缩估计

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

返回：array

## `frameCov_BS(data, alpha)`

声明：function

协方差BS压缩估计

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

返回：array

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

声明：function

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

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

返回：array

## `frameIndex_getilocDZ(raw_data_cols)`

声明：function

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

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

返回：array

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

声明：function

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

声明：function

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

声明：function

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

声明：function

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

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

返回：any

## `mt_iv_Gauss_Jordan(a, x)`

声明：function

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

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

返回：any

## `mt_iv_Ldl(a, x)`

声明：function

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

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

返回：any

## `mt_va_Gauss_Jordan(a, v)`

声明：function

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

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

返回：any

## `mt_va_Cholesky(a, v)`

声明：function

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

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

返回：any

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

声明：function

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

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

返回：any

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

声明：function

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

声明：function

计算特征值及特征向量

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

返回：array

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

声明：function

矩阵的奇异值(SVD)分解

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

返回：any

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

声明：function

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

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

返回：array

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

声明：function

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
