# 数学函数 / 数值计算 / 矩阵运算及分解 ## `chol(h, l, p, options, sneg)` 声明:function 进行乔列斯基分解,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表示分解成功 ``` ## `cond(x)` 声明:function 求矩阵 X 的条件数,最大奇异值除最小奇异值 | 参数 | 类型 | 说明 | | ---- | ----- | ---------------------------------- | | `x` | array | array 需要求条件数的矩阵或二维数组 | 返回:real ### 示例 ```tsl x := array((9, 1), (-1, 0), (0, 2), (1, 1)); return cond(x); // 输出:4.22 ``` ## `det(a)` 声明:function 行列式 | 参数 | 类型 | 说明 | | ---- | ----- | ----------------- | | `a` | array | 二维数字数组 样本 | 返回:real ### 示例 ```tsl a := array((1, 2), (3, 4)); return det(a); // 输出:-2 ``` ## `diag(a)` 声明:function 对角阵 | 参数 | 类型 | 说明 | | ---- | ----- | ---------- | | `a` | array | array 数组 | 返回:array ### 示例 ```tsl a := array((2, 1), (1, 3)); return diag(a); // 输出:array(2,3); ``` ## `eigen(a, eigen, eigenvectors, isreal)` 声明:function 特征根与特征向量 | 参数 | 类型 | 说明 | | -------------- | ------- | --------------------------------- | | `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) ``` ## `Eigen_Jacobi(matrix, eigen_values, eigen_vectors)` 声明:function 用 Jacobi 方法计算矩阵特征值和特征向量 | 参数 | 类型 | 说明 | | --------------- | ----- | ---------------- | | `matrix` | array | 待分解矩阵 | | `eigen_values` | any | 接收特征值数组 | | `eigen_vectors` | any | 接收特征向量矩阵 | 返回:void ### 示例 ```tsl matrix := array((2.0, 1.0), (1.0, 2.0)); eigen_values := array(); eigen_vectors := array(); Eigen_Jacobi(matrix, eigen_values, eigen_vectors); return array(eigen_values, eigen_vectors); // 输出:返回特征值数组和特征向量矩阵 ``` ## `isDefinite(h)` 声明:function 判断矩阵是否正定、半正定,采用 Cholesky 分解方法 | 参数 | 类型 | 说明 | | ---- | ----- | ---------- | | `h` | array | array 样本 | 返回:real ### 示例 ```tsl x := array((3, 1), (1, 4)); return isDefinite(x); // 输出:1 ``` ## `isSymmetry(a, tol)` 声明:function 判断是否为对称矩阵 | 参数 | 类型 | 说明 | | ----- | ----- | -------------- | | `a` | array | array 二维数组 | | `tol` | real | real 精度 | 返回:integer ### 示例 ```tsl a := array((2, 1), (1, 3)); return isSymmetry(a, 0.1); // 输出:1 ``` ## `norm2(a, flag)` 声明:function 范数 | 参数 | 类型 | 说明 | | ------ | ------ | ----------------- | | `a` | array | 二维数字数组 样本 | | `flag` | string | string 范数类型 | 返回:real ### 示例 ```tsl a := array((2, 1), (1, 3)); return norm2(a, 'inf'); // 输出:4 ``` ## `orth(a)` 声明:function 矩阵范围内的标准正交基向量 | 参数 | 类型 | 说明 | | ---- | ----- | ------ | | `a` | array | 数组, | 返回:array ### 示例 ```tsl // 计算矩阵A的标准正交基 a := array((0, 1), (1, 1), (1, 0)); return orth(a); ``` ## `pinv(a, t)` 声明:function 伪逆 | 参数 | 类型 | 说明 | | ---- | ----- | --------------------------------------- | | `a` | array | array 矩阵 | | `t` | real | real 精度 默认为 2.220446049250313e-016 | 返回:array ### 示例 ```tsl x := array((9, 1), (-1, 0), (0, 2), (1, 1)); return pinv(x); ``` ## `reIndex2(data, flag)` 声明:function 修改数组的行标或列名,主要用于字符串下标修改为数字下标等 | 参数 | 类型 | 说明 | | ------ | ---------------- | ---- | | `data` | array,tablearray | | | `flag` | integer | | 返回:array,tablearray ### 示例 范例01:将表列标改为数字 ```tsl a := array('C': ('A': 1, 'B': 'too'), 'D': ('A': 2, 'B': 'two')); return reIndex2(a, 0); ``` 范例02:将行列标作为首列首行 ```tsl a := array('C': ('A': 1, 'B': 'too'), 'D': ('A': 2, 'B': 'two')); return reIndex2(a, 5); ``` ## `roots(p)` 声明:function 一元n次方程求根 | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `p` | array | array 多项式 | 返回:array ### 示例 ```tsl // 求根:3x^3+x^2+x^1+0^0=0 return roots(array(0, 1, 1, 3)); ``` ## `Standarize_II(sample, leib)` 声明:function 数据预处理,对二维数字数组进行标准化化处理;行:样本个数;列:因子个数 | 参数 | 类型 | 说明 | | -------- | ----- | ----------------- | | `sample` | array | 二维数字数组 样本 | | `leib` | any | Int 标准化类型 | 返回:array