# 数学函数 / 数值计算 / 矩阵运算及分解

## `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 方法计算矩阵特征值和特征向量

<!-- tags: 计算 求解 -->

| 参数            | 类型  | 说明             |
| --------------- | ----- | ---------------- |
| `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 分解方法

<!-- tags: 判断 检查 -->

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

返回：real

### 示例

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

## `isSymmetry(a, tol)`

声明：function

判断是否为对称矩阵

<!-- tags: 判断 检查 -->

| 参数  | 类型  | 说明           |
| ----- | ----- | -------------- |
| `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
