Commit 12daaf1c by Lian-runzhe Committed by GitHub

Update RustScript手册.md

parent bcbcf3c8
# RustScript 语言规范 # RustScript 语言规范
...@@ -79,8 +79,8 @@ z3 = c(5.0, 0); // 实数 ...@@ -79,8 +79,8 @@ z3 = c(5.0, 0); // 实数
// 复数运算 // 复数运算
result = z1 + z2 * 2.0; result = z1 + z2 * 2.0;
magnitude = abs(z1); magnitude = abs(z1); //abs()为复数模长函数
phase = arg(z1); phase = angle(z1); //angle()为复数辐角函数
``` ```
### 3.3 张量类型 ### 3.3 张量类型
...@@ -112,9 +112,12 @@ tensor3d = [ ...@@ -112,9 +112,12 @@ tensor3d = [
``` ```
**重要区别:** **重要区别:**
- **一维张量**:shape为 [n],在运算时相当于行向量 - **一维张量**:shape为 [n],在运算时相当于行向量;
- **二维张量**:包括矩阵、行向量 [1, n]、列向量 [m, 1] - **二维张量**:包括矩阵、行向量 [1, n]、列向量 [m, 1]
- **行向量和列向量都属于二维张量**,但形状不同 - **行向量和列向量都属于二维张量**,但形状不同。
**特别注意**
- 张量涉及多行定义时,矩阵行间不能添加注释。
### 3.4 数据组织方式 ### 3.4 数据组织方式
由于没有结构体,复杂数据通过张量和多个相关变量来组织: 由于没有结构体,复杂数据通过张量和多个相关变量来组织:
...@@ -165,56 +168,85 @@ QD = 3; ...@@ -165,56 +168,85 @@ QD = 3;
## 5. 创建张量 ## 5. 创建张量
### 5.1 创建全0张量 ### 5.1 基本语法
```rustscript ```rustscript
函数 // 1D 张量(一维张量)- shape为 [n]
vector = [1.0, 2.0, 3.0, 4.0]; // shape: [4]
// 2D 张量(二维张量)- shape为 [m, n]
matrix = [
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
[7.0, 8.0, 9.0]
]; // shape: [3, 3]
// 行向量(二维张量)- shape为 [1, n]
row_vector = [[1.0, 2.0, 3.0]]; // shape: [1, 3]
// 列向量(二维张量)- shape为 [m, 1]
col_vector = [[1.0], [2.0], [3.0]]; // shape: [3, 1]
// 3D 张量
tensor3d = [
[[1.0, 2.0], [3.0, 4.0]],
[[5.0, 6.0], [7.0, 8.0]]
]; // shape: [2, 2, 2]
```
**注意**:张量涉及多行定义时,矩阵行间不能添加注释(“[]”间的每行末尾、独立一行均不能添加注释)。
### 5.2 创建张量函数
可通过zeros()、ones()、eye()等函数创建2D 张量。
#### 5.2.1 创建全0张量:zeros()
```rustscript
函数:
zeros zeros
语法 语法
t = zeros(s1, s2, ..., si, ...); t = zeros(s1, s2, ..., si, ...);
输入参数 输入参数
si - 标量,生成张量的第i维长度 si - 标量,生成张量的第i维长度
示例 示例
输入 zeros(3,4) 输入 zeros(3,4)
结果 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 结果 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
``` ```
### 5.2 创建全1张量 #### 5.2.2 创建全1张量:ones()
```rustscript ```rustscript
函数 函数
ones ones
语法 语法
t = ones(s1, s2, ..., si, ...); t = ones(s1, s2, ..., si, ...);
输入参数 输入参数
si - 标量,生成张量的第i维长度 si - 标量,生成张量的第i维长度
示例 示例
输入 ones(3,4) 输入 ones(3,4)
结果 [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]] 结果 [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
``` ```
### 5.3 创建单位矩阵 #### 5.2.3 创建单位矩阵:eye()
```rustscript ```rustscript
函数 函数
eye eye
语法 语法
t = eye(s); t = eye(s);
输入参数 输入参数
s - 标量,生成矩阵阶数 s - 标量,生成矩阵阶数
示例 示例
输入 eye(3) 输入 eye(3)
结果 [[1, 0, 0], [0, 1, 0], [0, 0, 1]] 结果 [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
``` ```
### 5.4 创建序列 ### 5.3 创建序列
```rustscript ```rustscript
函数 函数
range range
语法 语法
t = range(start, end, step); t = range(start, end, step);
输入参数 输入参数
start - 标量,起始值 start - 标量,起始值
end - 标量,终止值 end - 标量,终止值
step - 标量,步长 step - 标量,步长
示例 示例
输入 range(1, 10, 2) 输入 range(1, 10, 2)
结果 [1, 3, 5, 7, 9] 结果 [1, 3, 5, 7, 9]
``` ```
...@@ -223,17 +255,17 @@ QD = 3; ...@@ -223,17 +255,17 @@ QD = 3;
### 6.1 张量索引 ### 6.1 张量索引
```rustscript ```rustscript
函数 函数
get get
语法 语法
element = get(t, row, col); // 获取指定位置的单个元素 element = get(t, row, col); // 获取指定位置的单个元素
注意:不支持 A[0,1] 这样的直接索引方式 注意:不支持 A[0,1] 这样的直接索引方式
输入参数 输入参数
t - 张量,若为稀疏矩阵,仅能获取非零元 t - 张量,若为稀疏矩阵,仅能获取非零元
row - 行索引,标量 row - 行索引,标量
col - 列索引,标量 col - 列索引,标量
v - 向量 v - 向量
示例 示例
输入 get([1, 2, 3], 1) 输入 get([1, 2, 3], 1)
结果 2 结果 2
...@@ -246,15 +278,15 @@ QD = 3; ...@@ -246,15 +278,15 @@ QD = 3;
### 6.2 张量切片 ### 6.2 张量切片
```rustscript ```rustscript
函数 函数
slice slice
语法 语法
slice(t, row_spec, col_spec) slice(t, row_spec, col_spec)
输入参数 输入参数
t - 张量 t - 张量
row_spec - 行索引,数值代表单个索引,[0]代表所有行,[start,end,step]代表范围和步长 row_spec - 行索引,数值代表单个索引,[0]代表所有行,[start,end,step]代表范围和步长
col_spec - 列索引,数值代表单个索引,[0]代表所有列,[start,end,step]代表范围和步长 col_spec - 列索引,数值代表单个索引,[0]代表所有列,[start,end,step]代表范围和步长
返回类型 返回类型
1. 使用范围参数[start, end] - 返回二维张量 1. 使用范围参数[start, end] - 返回二维张量
col_2d = slice(a, [0], [1, 2]); // 取第2列所有行,返回3×1列向量(二维张量) col_2d = slice(a, [0], [1, 2]); // 取第2列所有行,返回3×1列向量(二维张量)
row_2d = slice(a, [1, 2], [0]); // 取第2行所有列,返回1×3行向量(二维张量) row_2d = slice(a, [1, 2], [0]); // 取第2行所有列,返回1×3行向量(二维张量)
...@@ -263,7 +295,7 @@ QD = 3; ...@@ -263,7 +295,7 @@ QD = 3;
2. 使用单个索引 - 返回一维张量 2. 使用单个索引 - 返回一维张量
col_1d = slice(a, [0], 1); // 取第2列所有行,返回shape为[3]的一维张量 col_1d = slice(a, [0], 1); // 取第2列所有行,返回shape为[3]的一维张量
row_1d = slice(a, 1, [0]); // 取第2行所有列,返回shape为[3]的一维张量 row_1d = slice(a, 1, [0]); // 取第2行所有列,返回shape为[3]的一维张量
示例 示例
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
输入 slice(a, [0], [1, 2]) 输入 slice(a, [0], [1, 2])
结果 [[2], [5], [8]] 结果 [[2], [5], [8]]
...@@ -283,22 +315,22 @@ QD = 3; ...@@ -283,22 +315,22 @@ QD = 3;
输入 slice(a, 1, [0]) 输入 slice(a, 1, [0])
结果 [4, 5, 6] 结果 [4, 5, 6]
电力系统应用示例 电力系统应用示例
voltage = slice(bus, [0], [VM-1, VM]); // 所有行,VM列(二维张量) voltage = slice(bus, [0], [VM-1, VM]); // 所有行,VM列(二维张量)
angle = slice(bus, [0], VA-1); // 所有行,VA列(一维张量) angle = slice(bus, [0], VA-1); // 所有行,VA列(一维张量)
``` ```
### 6.3 获取张量指定行列 ### 6.3 获取张量指定行列
```rustscript ```rustscript
函数 函数
select select
语法 语法
select(t, row_spec, col_spec) select(t, row_spec, col_spec)
输入参数 输入参数
t - 张量 t - 张量
row_spec - 行索引,数值代表单个索引,[]代表所有行,向量代表指定多行 row_spec - 行索引,数值代表单个索引,[]代表所有行,向量代表指定多行
col_spec - 列索引,数值代表单个索引,[]代表所有列,向量代表指定多列 col_spec - 列索引,数值代表单个索引,[]代表所有列,向量代表指定多列
示例 示例
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
输入 select(a, [0,1], [2]) 输入 select(a, [0,1], [2])
结果 [[3], [6]] 结果 [[3], [6]]
...@@ -315,17 +347,17 @@ QD = 3; ...@@ -315,17 +347,17 @@ QD = 3;
### 6.4 张量赋值操作 ### 6.4 张量赋值操作
```rustscript ```rustscript
函数 函数
assign assign
语法 语法
assign(target, source, row_spec, col_spec) assign(target, source, row_spec, col_spec)
输入参数 输入参数
target - 待赋值张量 target - 待赋值张量
source - 赋值张量 source - 赋值张量
row_spec - 行索引,数值代表单个索引,[0]代表所有行,[start,end,step]代表范围和步长 row_spec - 行索引,数值代表单个索引,[0]代表所有行,[start,end,step]代表范围和步长
col_spec - 列索引,数值代表单个索引,[0]代表所有列,[start,end,step]代表范围和步长 col_spec - 列索引,数值代表单个索引,[0]代表所有列,[start,end,step]代表范围和步长
重要:source的维度必须与target切片的形状匹配 重要:source的维度必须与target切片的形状匹配
输入参数示例 输入参数示例
1. 赋值二维张量 - source必须是匹配的二维张量 1. 赋值二维张量 - source必须是匹配的二维张量
b_2d = [[1.0], [2.0], [3.0]]; // 3×1列向量(二维张量) b_2d = [[1.0], [2.0], [3.0]]; // 3×1列向量(二维张量)
assign(a, b_2d, [0], [1, 2]); // 正确:b_2d是3×1列向量,匹配slice(a,[0],[1,2]) assign(a, b_2d, [0], [1, 2]); // 正确:b_2d是3×1列向量,匹配slice(a,[0],[1,2])
...@@ -341,7 +373,7 @@ QD = 3; ...@@ -341,7 +373,7 @@ QD = 3;
错误示例(形状不匹配) 错误示例(形状不匹配)
// assign(a, b_1d, [0], [1, 2]); // 错误:一维张量不能赋值给二维位置 // assign(a, b_1d, [0], [1, 2]); // 错误:一维张量不能赋值给二维位置
// assign(a, b_2d, [0], 1); // 错误:二维张量不能赋值给一维位置 // assign(a, b_2d, [0], 1); // 错误:二维张量不能赋值给一维位置
示例 示例
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
输入 assign(a, [[-2],[-5],[-8]], [0], [1,2]) 输入 assign(a, [[-2],[-5],[-8]], [0], [1,2])
结果 [[1, -2, 3], [4, -5, 6], [7, -8, 9]] 结果 [[1, -2, 3], [4, -5, 6], [7, -8, 9]]
...@@ -361,7 +393,7 @@ QD = 3; ...@@ -361,7 +393,7 @@ QD = 3;
输入 assign(a, [-4,-5,-6], 1, [0]) 输入 assign(a, [-4,-5,-6], 1, [0])
结果 [[1, 2, 3], [-4, -5, -6], [7, 8, 9]] 结果 [[1, 2, 3], [-4, -5, -6], [7, 8, 9]]
电力系统应用示例 电力系统应用示例
voltage = slice(bus, [0], [VM-1, VM]); // 获取电压幅值列(二维张量) voltage = slice(bus, [0], [VM-1, VM]); // 获取电压幅值列(二维张量)
new_voltage = [[1.05], [1.02], [1.01]]; // 新的电压值(二维张量) new_voltage = [[1.05], [1.02], [1.01]]; // 新的电压值(二维张量)
assign(bus, new_voltage, [0], [VM-1, VM]); // 更新电压幅值 assign(bus, new_voltage, [0], [VM-1, VM]); // 更新电压幅值
...@@ -385,13 +417,13 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -385,13 +417,13 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 6.5.2 获取张量维数 #### 6.5.2 获取张量维数
```rustscript ```rustscript
函数 函数
ndim ndim
语法 语法
ndim(t) ndim(t)
输入参数 输入参数
t - 张量 t - 张量
示例 示例
输入 ndim([1, 2, 3]) 输入 ndim([1, 2, 3])
结果 1 结果 1
...@@ -403,14 +435,14 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -403,14 +435,14 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 6.5.3 获取指定维度大小 #### 6.5.3 获取指定维度大小
```rustscript ```rustscript
函数 函数
size size
语法 语法
size(t, dim) size(t, dim)
输入参数 输入参数
t - 张量 t - 张量
dim - 指定维度,若该参数为空则返回各维度大小构成的向量 dim - 指定维度,若该参数为空则返回各维度大小构成的向量
示例 示例
输入 size([[1., 0.5, 0.3, 0.2], [0.5, 1., 0.6, 0.5], [0.3, 0.6, 1., 0.7]]) 输入 size([[1., 0.5, 0.3, 0.2], [0.5, 1., 0.6, 0.5], [0.3, 0.6, 1., 0.7]])
结果 [3,4] 结果 [3,4]
...@@ -435,53 +467,53 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -435,53 +467,53 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
#### 7.1.1 标量运算 #### 7.1.1 标量运算
##### 7.1.1.1 加法 ##### 7.1.1.1 加法
```rustscript ```rustscript
运算符 运算符
+ +
语法 语法
a + b; a + b;
``` ```
##### 7.1.1.2 减法 ##### 7.1.1.2 减法
```rustscript ```rustscript
运算符 运算符
- -
语法 语法
a - b; a - b;
``` ```
##### 7.1.1.3 乘法 ##### 7.1.1.3 乘法
```rustscript ```rustscript
运算符 运算符
* *
语法 语法
a * b; a * b;
``` ```
##### 7.1.1.4 除法 ##### 7.1.1.4 除法
```rustscript ```rustscript
运算符 运算符
/ /
语法 语法
a / b; a / b;
``` ```
##### 7.1.1.5 幂运算 ##### 7.1.1.5 幂运算
```rustscript ```rustscript
运算符 运算符
^ ^
语法 语法
a ^ b; a ^ b;
``` ```
#### 7.1.2 元素级运算(张量) #### 7.1.2 元素级运算(张量)
##### 7.1.2.1 元素级加法 ##### 7.1.2.1 元素级加法
```rustscript ```rustscript
运算符 运算符
+ +
语法 语法
A + B; A + B;
输入参数 输入参数
A - 矩阵 A - 矩阵
B - 矩阵 B - 矩阵
若A的形状与B的形状相同,对应元素相加 若A的形状与B的形状相同,对应元素相加
若A为行向量且长度与B的列数相同,则B的每一行均与A相加,反之亦然 若A为行向量且长度与B的列数相同,则B的每一行均与A相加,反之亦然
若A为列向量且长度与B的行数相同,则B的每一列均与A相加,反之亦然 若A为列向量且长度与B的行数相同,则B的每一列均与A相加,反之亦然
示例 示例
输入 [10,20]+[[1,2],[3,4]] 输入 [10,20]+[[1,2],[3,4]]
结果 [[11,22],[13,24]] 结果 [[11,22],[13,24]]
...@@ -496,17 +528,17 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -496,17 +528,17 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.2.2 元素级减法 ##### 7.1.2.2 元素级减法
```rustscript ```rustscript
运算符 运算符
- -
语法 语法
A - B; A - B;
输入参数 输入参数
A - 矩阵 A - 矩阵
B - 矩阵 B - 矩阵
若A的形状与B的形状相同,对应元素相减 若A的形状与B的形状相同,对应元素相减
若A为行向量且长度与B的列数相同,则B的每一行均与A相减,反之亦然 若A为行向量且长度与B的列数相同,则B的每一行均与A相减,反之亦然
若A为列向量且长度与B的行数相同,则B的每一列均与A相减,反之亦然 若A为列向量且长度与B的行数相同,则B的每一列均与A相减,反之亦然
示例 示例
输入 [10,20]-[[1,2],[3,4]] 输入 [10,20]-[[1,2],[3,4]]
结果 [[9,18],[7,16]] 结果 [[9,18],[7,16]]
...@@ -521,17 +553,17 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -521,17 +553,17 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.2.3 元素级乘法 ##### 7.1.2.3 元素级乘法
```rustscript ```rustscript
运算符 运算符
.* .*
语法 语法
A .* B; A .* B;
输入参数 输入参数
A - 矩阵 A - 矩阵
B - 矩阵 B - 矩阵
若A的形状与B的形状相同,对应元素相乘 若A的形状与B的形状相同,对应元素相乘
若A为行向量且长度与B的列数相同,则B的每一行均与A相乘,反之亦然 若A为行向量且长度与B的列数相同,则B的每一行均与A相乘,反之亦然
若A为列向量且长度与B的行数相同,则B的每一列均与A相乘,反之亦然 若A为列向量且长度与B的行数相同,则B的每一列均与A相乘,反之亦然
示例 示例
输入 [10,20].*[[1,2],[3,4]] 输入 [10,20].*[[1,2],[3,4]]
结果 [[10,40],[30,80]] 结果 [[10,40],[30,80]]
...@@ -546,17 +578,17 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -546,17 +578,17 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.2.4 元素级除法 ##### 7.1.2.4 元素级除法
```rustscript ```rustscript
运算符 运算符
./ ./
语法 语法
A ./ B; A ./ B;
输入参数 输入参数
A - 矩阵 A - 矩阵
B - 矩阵 B - 矩阵
若A的形状与B的形状相同,对应元素相除 若A的形状与B的形状相同,对应元素相除
若A为行向量且长度与B的列数相同,则B的每一行均与A相除,反之亦然 若A为行向量且长度与B的列数相同,则B的每一行均与A相除,反之亦然
若A为列向量且长度与B的行数相同,则B的每一列均与A相除,反之亦然 若A为列向量且长度与B的行数相同,则B的每一列均与A相除,反之亦然
示例 示例
输入 [10,20]./[[1,2],[3,4]] 输入 [10,20]./[[1,2],[3,4]]
结果 [[10,10],[10/3, 5]] 结果 [[10,10],[10/3, 5]]
...@@ -571,14 +603,14 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -571,14 +603,14 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.2.5 元素级幂运算 ##### 7.1.2.5 元素级幂运算
```rustscript ```rustscript
运算符 运算符
.^ .^
语法 语法
A .^ n; A .^ n;
输入参数 输入参数
A - 矩阵 A - 矩阵
n - 标量 n - 标量
示例 示例
输入 [[1,2],[3,4]].^(-1) 输入 [[1,2],[3,4]].^(-1)
结果 [[1,0.5], [1/3.,0.25]] 结果 [[1,0.5], [1/3.,0.25]]
...@@ -590,17 +622,17 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -590,17 +622,17 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.2.6 元素级模运算 ##### 7.1.2.6 元素级模运算
```rustscript ```rustscript
运算符 运算符
% %
语法 语法
A % B; A % B;
输入参数 输入参数
A - 矩阵 A - 矩阵
B - 矩阵 B - 矩阵
若A的形状与B的形状相同,对应元素相模 若A的形状与B的形状相同,对应元素相模
若A为行向量且长度与B的列数相同,则B的每一行均与A相模,反之亦然 若A为行向量且长度与B的列数相同,则B的每一行均与A相模,反之亦然
若A为列向量且长度与B的行数相同,则B的每一列均与A相模,反之亦然 若A为列向量且长度与B的行数相同,则B的每一列均与A相模,反之亦然
示例 示例
输入 [10,20]%[[2,3],[4,5]] 输入 [10,20]%[[2,3],[4,5]]
结果 [[0,2],[2,0]] 结果 [[0,2],[2,0]]
...@@ -613,15 +645,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -613,15 +645,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
#### 7.1.3 矩阵运算 #### 7.1.3 矩阵运算
##### 7.1.3.1 矩阵加法 ##### 7.1.3.1 矩阵加法
```rustscript ```rustscript
运算符 运算符
+ +
语法 语法
A + B; A + B;
输入参数 输入参数
A - 矩阵 A - 矩阵
B - 矩阵 B - 矩阵
A与B的形状相同 A与B的形状相同
示例 示例
输入 [[1,2],[3,4]]+[[5,6],[7,8]] 输入 [[1,2],[3,4]]+[[5,6],[7,8]]
结果 [[6,8],[10,12]] 结果 [[6,8],[10,12]]
...@@ -637,15 +669,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -637,15 +669,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.3.2 矩阵减法 ##### 7.1.3.2 矩阵减法
```rustscript ```rustscript
运算符 运算符
- -
语法 语法
A - B; A - B;
输入参数 输入参数
A - 矩阵 A - 矩阵
B - 矩阵 B - 矩阵
A与B的形状相同 A与B的形状相同
示例 示例
输入 [[1,2],[3,4]]-[[7,8],[5,6]] 输入 [[1,2],[3,4]]-[[7,8],[5,6]]
结果 [[-6,-6],[-2,-2]] 结果 [[-6,-6],[-2,-2]]
...@@ -661,15 +693,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -661,15 +693,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.3.3 矩阵标量乘法 ##### 7.1.3.3 矩阵标量乘法
```rustscript ```rustscript
运算符 运算符
* *
语法 语法
n * A; n * A;
A * n; A * n;
输入参数 输入参数
n - 标量 n - 标量
A - 矩阵 A - 矩阵
示例 示例
输入 2*[[3],[2]] 输入 2*[[3],[2]]
结果 [[6],[4]] 结果 [[6],[4]]
...@@ -681,14 +713,14 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -681,14 +713,14 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.3.4 矩阵标量除法 ##### 7.1.3.4 矩阵标量除法
```rustscript ```rustscript
运算符 运算符
/ /
语法 语法
A / n; A / n;
输入参数 输入参数
A - 矩阵 A - 矩阵
n - 标量 n - 标量
示例 示例
输入 [[3],[2]]/2 输入 [[3],[2]]/2
结果 [[1.5],[1]] 结果 [[1.5],[1]]
...@@ -700,15 +732,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -700,15 +732,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.3.5 矩阵乘法 ##### 7.1.3.5 矩阵乘法
```rustscript ```rustscript
运算符 运算符
* *
语法 语法
A * B; A * B;
输入参数 输入参数
A - 矩阵 A - 矩阵
B - 矩阵 B - 矩阵
A的列数需与B的行数相同 A的列数需与B的行数相同
示例 示例
输入 [[1,2,3],[4,5,6]]*[[1,2],[3,4],[5,6]] 输入 [[1,2,3],[4,5,6]]*[[1,2],[3,4],[5,6]]
结果 [[22,28], [49,64]] 结果 [[22,28], [49,64]]
...@@ -724,15 +756,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -724,15 +756,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.3.6 矩阵右除 ##### 7.1.3.6 矩阵右除
```rustscript ```rustscript
运算符 运算符
/ /
语法 语法
A / B; A / B;
输入参数 输入参数
A - 矩阵 A - 矩阵
B - 方阵 B - 方阵
A的列数需与B的行数相同 A的列数需与B的行数相同
示例 示例
输入 [[19,22],[43,50]]/[[1,2],[3,4]] 输入 [[19,22],[43,50]]/[[1,2],[3,4]]
结果 [[-5,8],[-11,18]] 结果 [[-5,8],[-11,18]]
...@@ -748,15 +780,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -748,15 +780,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.3.7 矩阵左除 ##### 7.1.3.7 矩阵左除
```rustscript ```rustscript
运算符 运算符
\ \
语法 语法
A \ B; A \ B;
输入参数 输入参数
A - 方阵 A - 方阵
B - 矩阵 B - 矩阵
A的列数需与B的行数相同 A的列数需与B的行数相同
示例 示例
输入 [[2,1],[1,-3]]\[[5],[-1]] 输入 [[2,1],[1,-3]]\[[5],[-1]]
结果 [[2],[1]] 结果 [[2],[1]]
...@@ -772,14 +804,14 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -772,14 +804,14 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.3.8 矩阵幂 ##### 7.1.3.8 矩阵幂
```rustscript ```rustscript
运算符 运算符
^ ^
语法 语法
A ^ n; A ^ n;
输入参数 输入参数
A - 方阵 A - 方阵
n - 标量 n - 标量
示例 示例
输入 [[1,2],[3,4]]^0 输入 [[1,2],[3,4]]^0
结果 [[1,0], [0,1]] 结果 [[1,0], [0,1]]
...@@ -794,13 +826,13 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -794,13 +826,13 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.3.9 转置 ##### 7.1.3.9 转置
```rustscript ```rustscript
运算符 运算符
' '
语法 语法
A'; A';
输入参数 输入参数
A - 矩阵 A - 矩阵
示例 示例
输入 [1, 2, 3]' 输入 [1, 2, 3]'
结果 [[1], [2], [3]] 结果 [[1], [2], [3]]
...@@ -812,25 +844,25 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -812,25 +844,25 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
##### 7.1.3.10 逆矩阵 ##### 7.1.3.10 逆矩阵
```rustscript ```rustscript
运算符 运算符
^(-1) ^(-1)
语法 语法
A ^ (-1); A ^ (-1);
输入参数 输入参数
A - 方阵 A - 方阵
示例 示例
输入 [[1,2],[3,4]]^(-1) 输入 [[1,2],[3,4]]^(-1)
结果 [[-2, 1], [1.5, -0.5]] 结果 [[-2, 1], [1.5, -0.5]]
``` ```
##### 7.1.3.11 行列式 ##### 7.1.3.11 行列式
```rustscript ```rustscript
函数 函数
det det
语法 语法
det(A); det(A);
输入参数 输入参数
A - 方阵 A - 方阵
示例 示例
输入 det([[1,2],[3,4]]) 输入 det([[1,2],[3,4]])
结果 -2 结果 -2
...@@ -841,11 +873,11 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -841,11 +873,11 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
### 7.2 比较运算符 ### 7.2 比较运算符
#### 7.2.1 等于 #### 7.2.1 等于
```rustscript ```rustscript
运算符 运算符
== ==
语法 语法
A == B; A == B;
输入参数 输入参数
A - 张量或标量 A - 张量或标量
B - 张量或标量 B - 张量或标量
若A、B均为张量,A、B形状应相同 若A、B均为张量,A、B形状应相同
...@@ -854,7 +886,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -854,7 +886,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的比较结果 若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的比较结果
若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的比较结果 若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的比较结果
若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的比较结果 若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的比较结果
示例 示例
输入 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]==5 输入 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]==5
结果 [[0,0,0],[0,1,0],[0,0,0]] 结果 [[0,0,0],[0,1,0],[0,0,0]]
...@@ -866,20 +898,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -866,20 +898,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 7.2.2 不等于 #### 7.2.2 不等于
```rustscript ```rustscript
运算符 运算符
!= !=
语法 语法
A != B; A != B;
输入参数 输入参数
A - 张量或标量 A - 张量或标量
B - 张量或标量 B - 张量或标量
若A、B均为张量,A、B形状应相同 若A、B均为张量,A、B形状应相同
对于复数,取实部进行比较 对于复数,取实部进行比较
返回参数 返回参数
若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的比较结果 若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的比较结果
若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的比较结果 若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的比较结果
若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的比较结果 若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的比较结果
示例 示例
输入 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]!=5 输入 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]!=5
结果 [[1,1,1],[1,0,1],[1,1,1]] 结果 [[1,1,1],[1,0,1],[1,1,1]]
...@@ -891,20 +923,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -891,20 +923,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 7.2.3 小于 #### 7.2.3 小于
```rustscript ```rustscript
运算符 运算符
< <
语法 语法
A < B; A < B;
输入参数 输入参数
A - 张量或标量 A - 张量或标量
B - 张量或标量 B - 张量或标量
若A、B均为张量,A、B形状应相同 若A、B均为张量,A、B形状应相同
对于复数,取实部进行比较 对于复数,取实部进行比较
返回参数 返回参数
若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的比较结果 若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的比较结果
若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的比较结果 若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的比较结果
若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的比较结果 若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的比较结果
示例 示例
输入 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]<5 输入 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]<5
结果 [[1,1,1],[1,0,0],[0,0,0]] 结果 [[1,1,1],[1,0,0],[0,0,0]]
...@@ -916,20 +948,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -916,20 +948,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 7.2.4 小于等于 #### 7.2.4 小于等于
```rustscript ```rustscript
运算符 运算符
<= <=
语法 语法
A <= B; A <= B;
输入参数 输入参数
A - 张量或标量 A - 张量或标量
B - 张量或标量 B - 张量或标量
若A、B均为张量,A、B形状应相同 若A、B均为张量,A、B形状应相同
对于复数,取实部进行比较 对于复数,取实部进行比较
返回参数 返回参数
若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的比较结果 若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的比较结果
若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的比较结果 若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的比较结果
若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的比较结果 若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的比较结果
示例 示例
输入 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]<=5 输入 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]<=5
结果 [[1,1,1],[1,1,0],[0,0,0]] 结果 [[1,1,1],[1,1,0],[0,0,0]]
...@@ -941,20 +973,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -941,20 +973,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 7.2.5 大于 #### 7.2.5 大于
```rustscript ```rustscript
运算符 运算符
> >
语法 语法
A > B; A > B;
输入参数 输入参数
A - 张量或标量 A - 张量或标量
B - 张量或标量 B - 张量或标量
若A、B均为张量,A、B形状应相同 若A、B均为张量,A、B形状应相同
对于复数,取实部进行比较 对于复数,取实部进行比较
返回参数 返回参数
若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的比较结果 若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的比较结果
若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的比较结果 若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的比较结果
若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的比较结果 若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的比较结果
示例 示例
输入 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]>5 输入 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]>5
结果 [[0,0,0],[0,0,1],[1,1,1]] 结果 [[0,0,0],[0,0,1],[1,1,1]]
...@@ -966,20 +998,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -966,20 +998,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 7.2.6 大于等于 #### 7.2.6 大于等于
```rustscript ```rustscript
运算符 运算符
>= >=
语法 语法
A >= B; A >= B;
输入参数 输入参数
A - 张量或标量 A - 张量或标量
B - 张量或标量 B - 张量或标量
若A、B均为张量,A、B形状应相同 若A、B均为张量,A、B形状应相同
对于复数,取实部进行比较 对于复数,取实部进行比较
返回参数 返回参数
若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的比较结果 若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的比较结果
若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的比较结果 若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的比较结果
若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的比较结果 若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的比较结果
示例 示例
输入 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]>=5 输入 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]>=5
结果 [[0,0,0],[0,1,1],[1,1,1]] 结果 [[0,0,0],[0,1,1],[1,1,1]]
...@@ -993,20 +1025,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -993,20 +1025,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
### 7.3 逻辑运算符 ### 7.3 逻辑运算符
#### 7.3.1 逻辑与 #### 7.3.1 逻辑与
```rustscript ```rustscript
运算符 运算符
&& &&
语法 语法
A && B; A && B;
输入参数 输入参数
A - 张量或标量 A - 张量或标量
B - 张量或标量 B - 张量或标量
若A、B均为张量,A、B形状应相同 若A、B均为张量,A、B形状应相同
对于复数,取实部进行逻辑运算 对于复数,取实部进行逻辑运算
返回参数 返回参数
若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的逻辑运算结果 若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的逻辑运算结果
若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的逻辑运算结果 若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的逻辑运算结果
若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的逻辑运算结果 若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的逻辑运算结果
示例 示例
输入 [[1, 0, 3], [0, 5, 6], [7, 0, 9]]&&5 输入 [[1, 0, 3], [0, 5, 6], [7, 0, 9]]&&5
结果 [[1,0,1],[0,1,1],[1,0,1]] 结果 [[1,0,1],[0,1,1],[1,0,1]]
...@@ -1018,20 +1050,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1018,20 +1050,20 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 7.3.2 逻辑或 #### 7.3.2 逻辑或
```rustscript ```rustscript
运算符 运算符
|| ||
语法 语法
A || B; A || B;
输入参数 输入参数
A - 张量或标量 A - 张量或标量
B - 张量或标量 B - 张量或标量
若A、B均为张量,A、B形状应相同 若A、B均为张量,A、B形状应相同
对于复数,取实部进行逻辑运算 对于复数,取实部进行逻辑运算
返回参数 返回参数
若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的逻辑运算结果 若A为标量、B为张量,则返回与B形状相同的张量,其中元素为A与B对应元素的逻辑运算结果
若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的逻辑运算结果 若A为张量、B为标量,则返回与A形状相同的张量,其中元素为A对应元素与B的逻辑运算结果
若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的逻辑运算结果 若A、B均为张量,则返回与二者形状相同的张量,其中元素为A对应元素与B对应元素的逻辑运算结果
示例 示例
输入 [[1, 0, 3], [0, 5, 6], [7, 0, 9]]||5 输入 [[1, 0, 3], [0, 5, 6], [7, 0, 9]]||5
结果 [[1,1,1],[1,1,1],[1,1,1]] 结果 [[1,1,1],[1,1,1],[1,1,1]]
...@@ -1043,19 +1075,19 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1043,19 +1075,19 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 7.3.3 逻辑非 #### 7.3.3 逻辑非
```rustscript ```rustscript
运算符 运算符
~~ ~~
语法 语法
~~A; ~~A;
输入参数 输入参数
A - 张量或标量,对于复数,取实部进行逻辑运算 A - 张量或标量,对于复数,取实部进行逻辑运算
示例 示例
输入 ~~[[1, 0, 3], [0, 5, 6], [7, 0, 9]] 输入 ~~[[1, 0, 3], [0, 5, 6], [7, 0, 9]]
结果 [[0,1,0],[1,0,0],[0,1,0]] 结果 [[0,1,0],[1,0,0],[0,1,0]]
输入 ~~[[c(1,9), c(0,8), c(0,7)],[c(0,6), c(5,5), c(0,4)],[c(0,3), c(0,2), c(9,1)]] 输入 ~~[[c(1,9), c(0,8), c(0,7)],[c(0,6), c(5,5), c(0,4)],[c(0,3), c(0,2), c(9,1)]]
结果 [[c(0,0), c(1,0), c(1,0)],[c(1,0), c(0,0), c(1,0)],[c(1,0), c(1,0), c(0,0)]] 结果 [[c(0,0), c(1,0), c(1,0)],[c(1,0), c(0,0), c(1,0)],[c(1,0), c(1,0), c(0,0)]]
电力系统实际使用示例 电力系统实际使用示例
bus_gen_status = ~~bus_gen_status; // 逻辑非运算 bus_gen_status = ~~bus_gen_status; // 逻辑非运算
pq = find(bus_type == PQ || ~~bus_gen_status); // 组合逻辑运算 pq = find(bus_type == PQ || ~~bus_gen_status); // 组合逻辑运算
``` ```
...@@ -1063,15 +1095,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1063,15 +1095,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
### 7.4 位运算符 ### 7.4 位运算符
#### 7.4.1 位与 #### 7.4.1 位与
```rustscript ```rustscript
运算符 运算符
& &
语法 语法
a & b; a & b;
输入参数 输入参数
a - 标量 a - 标量
b - 标量 b - 标量
对于复数,取实部进行位运算 对于复数,取实部进行位运算
示例 示例
输入 5&3 输入 5&3
结果 1 结果 1
...@@ -1080,15 +1112,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1080,15 +1112,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 7.4.2 位或 #### 7.4.2 位或
```rustscript ```rustscript
运算符 运算符
| |
语法 语法
a | b; a | b;
输入参数 输入参数
a - 标量 a - 标量
b - 标量 b - 标量
对于复数,取实部进行位运算 对于复数,取实部进行位运算
示例 示例
输入 5|3 输入 5|3
结果 7 结果 7
...@@ -1097,15 +1129,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1097,15 +1129,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 7.4.3 位异或 #### 7.4.3 位异或
```rustscript ```rustscript
运算符 运算符
^^ ^^
语法 语法
a ^^ b; a ^^ b;
输入参数 输入参数
a - 标量 a - 标量
b - 标量 b - 标量
对于复数,取实部进行位运算 对于复数,取实部进行位运算
示例 示例
输入 5^^3 输入 5^^3
结果 6 结果 6
...@@ -1114,13 +1146,13 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1114,13 +1146,13 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 7.4.4 位取反 #### 7.4.4 位取反
```rustscript ```rustscript
运算符 运算符
~ ~
语法 语法
~a; ~a;
输入参数 输入参数
a - 标量,对于复数,取实部进行位运算 a - 标量,对于复数,取实部进行位运算
示例 示例
输入 ~5 输入 ~5
结果 -6 结果 -6
...@@ -1129,15 +1161,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1129,15 +1161,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 7.4.5 位左移 #### 7.4.5 位左移
```rustscript ```rustscript
运算符 运算符
<< <<
语法 语法
a << b; a << b;
输入参数 输入参数
a - 标量 a - 标量
b - 标量 b - 标量
对于复数,取实部进行位运算 对于复数,取实部进行位运算
示例 示例
输入 5<<1 输入 5<<1
结果 10 结果 10
...@@ -1146,15 +1178,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1146,15 +1178,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 7.4.6 位右移 #### 7.4.6 位右移
```rustscript ```rustscript
运算符 运算符
>> >>
语法 语法
a >> b; a >> b;
输入参数 输入参数
a - 标量 a - 标量
b - 标量 b - 标量
对于复数,取实部进行位运算 对于复数,取实部进行位运算
示例 示例
输入 5>>1 输入 5>>1
结果 2 结果 2
...@@ -1163,15 +1195,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1163,15 +1195,15 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
``` ```
#### 7.4.7 位取值 #### 7.4.7 位取值
```rustscript ```rustscript
运算符 运算符
@ @
语法 语法
a @ b; a @ b;
输入参数 输入参数
a - 标量 a - 标量
b - 标量 b - 标量
对于复数,取实部进行位运算 对于复数,取实部进行位运算
示例 示例
输入 5@1 输入 5@1
结果 1 结果 1
...@@ -1208,10 +1240,13 @@ if a == 0{ ...@@ -1208,10 +1240,13 @@ if a == 0{
### 8.2 循环语句 ### 8.2 循环语句
```rustscript ```rustscript
//for语句 //for语句
for i in 0..10 { a = 0;
r = runpf(); b = 10;
for i in 0..b {
a = a + 1;
} }
``` ```
**注意**:循环序列需“0..10”格式,不能跟tensor。
## 9. 函数定义 ## 9. 函数定义
...@@ -1261,14 +1296,14 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1261,14 +1296,14 @@ fn make_y_bus(baseMVA, bus, branch) {
### 10.1 数学函数 ### 10.1 数学函数
### 10.1.1 根号函数 ### 10.1.1 根号函数
```rustscript ```rustscript
函数 函数
sqrt sqrt
语法 语法
sqrt(x); sqrt(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算
示例 示例
输入 sqrt([[1,4],[9,16]) 输入 sqrt([[1,4],[9,16]])
结果 [[1,2], [3,4]] 结果 [[1,2], [3,4]]
输入 [c(-3,4), c(-7,24)] 输入 [c(-3,4), c(-7,24)]
...@@ -1279,13 +1314,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1279,13 +1314,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.2 自然指数函数 ### 10.1.2 自然指数函数
```rustscript ```rustscript
函数 函数:
exp exp
语法 语法:
exp(x); exp(x);
输入参数 输入参数:
x - 矩阵或标量,若为稠密矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为稠密矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 exp([[1,2],[3,4]]) 输入 exp([[1,2],[3,4]])
结果 [[e,e^2],[e^3,e^4]] 结果 [[e,e^2],[e^3,e^4]]
...@@ -1297,13 +1332,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1297,13 +1332,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.3 自然对数函数 ### 10.1.3 自然对数函数
```rustscript ```rustscript
函数 函数
ln ln
语法 语法
ln(x); ln(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 ln([[1,e],[e^2,e^3]]) 输入 ln([[1,e],[e^2,e^3]])
结果 [[0,1],[2,3]] 结果 [[0,1],[2,3]]
...@@ -1315,13 +1350,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1315,13 +1350,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.4 常用对数函数 ### 10.1.4 常用对数函数
```rustscript ```rustscript
函数 函数
log10 log10
语法 语法
log10(x); log10(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 log10([[1,10],[100,1000]]) 输入 log10([[1,10],[100,1000]])
结果 [[0.,1.],[2.,3.]] 结果 [[0.,1.],[2.,3.]]
...@@ -1333,13 +1368,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1333,13 +1368,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.5 正弦函数 ### 10.1.5 正弦函数
```rustscript ```rustscript
函数 函数
sin sin
语法 语法
sin(x); sin(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 sin([[0,pi/6],[pi/2,pi]]) 输入 sin([[0,pi/6],[pi/2,pi]])
结果 [[0,0.5],[1,0]] 结果 [[0,0.5],[1,0]]
...@@ -1351,13 +1386,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1351,13 +1386,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.6 余弦函数 ### 10.1.6 余弦函数
```rustscript ```rustscript
函数 函数
cos cos
语法 语法
cos(x); cos(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 cos([[0,pi/3],[pi/2,pi]]) 输入 cos([[0,pi/3],[pi/2,pi]])
结果 [[1,0.5],[0,-1]] 结果 [[1,0.5],[0,-1]]
...@@ -1369,13 +1404,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1369,13 +1404,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.7 正切函数 ### 10.1.7 正切函数
```rustscript ```rustscript
函数 函数
tan tan
语法 语法
tan(x); tan(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 tan([[0,pi/4],[0.75*pi,pi]]) 输入 tan([[0,pi/4],[0.75*pi,pi]])
结果 [[0,1],[-1,0]] 结果 [[0,1],[-1,0]]
...@@ -1387,13 +1422,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1387,13 +1422,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.8 反正弦函数 ### 10.1.8 反正弦函数
```rustscript ```rustscript
函数 函数
asin asin
语法 语法
asin(x); asin(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 asin([[0,0.5],[1,-0.5]]) 输入 asin([[0,0.5],[1,-0.5]])
结果 [[0,pi/6],[pi/2,-pi/6]] 结果 [[0,pi/6],[pi/2,-pi/6]]
...@@ -1405,13 +1440,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1405,13 +1440,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.9 反余弦函数 ### 10.1.9 反余弦函数
```rustscript ```rustscript
函数 函数
acos acos
语法 语法
acos(x); acos(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 acos([[1,0.5],[0,-1]]) 输入 acos([[1,0.5],[0,-1]])
结果 [[0,pi/3],[pi/2,pi]] 结果 [[0,pi/3],[pi/2,pi]]
...@@ -1423,13 +1458,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1423,13 +1458,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.10 反正切函数 ### 10.1.10 反正切函数
```rustscript ```rustscript
函数 函数
atan atan
语法 语法
atan(x); atan(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 atan([[0,1],[-1,sqrt(3)]]) 输入 atan([[0,1],[-1,sqrt(3)]])
结果 [[0,pi/4],[-pi/4,pi/3]] 结果 [[0,pi/4],[-pi/4,pi/3]]
...@@ -1441,13 +1476,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1441,13 +1476,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.11 双曲正弦函数 ### 10.1.11 双曲正弦函数
```rustscript ```rustscript
函数 函数
sinh sinh
语法 语法
sinh(x); sinh(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 sinh([[0,1],[-2,ln(3+sqrt(10))]]) 输入 sinh([[0,1],[-2,ln(3+sqrt(10))]])
结果 [[0,1.175201],[-3.626860,3]] 结果 [[0,1.175201],[-3.626860,3]]
...@@ -1459,13 +1494,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1459,13 +1494,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.12 双曲余弦函数 ### 10.1.12 双曲余弦函数
```rustscript ```rustscript
函数 函数
cosh cosh
语法 语法
cosh(x); cosh(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 cosh([[0,1],[-0.5,ln(2+sqrt(3))]]) 输入 cosh([[0,1],[-0.5,ln(2+sqrt(3))]])
结果 [[1.,1.543081],[1.127626,2]] 结果 [[1.,1.543081],[1.127626,2]]
...@@ -1477,13 +1512,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1477,13 +1512,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.13 双曲正切函数 ### 10.1.13 双曲正切函数
```rustscript ```rustscript
函数 函数
tanh tanh
语法 语法
tanh(x); tanh(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 tanh([[0,1],[-2,ln(3)]]) 输入 tanh([[0,1],[-2,ln(3)]])
结果 [[0,0.761594],[-0.964028,0.8]] 结果 [[0,0.761594],[-0.964028,0.8]]
...@@ -1495,13 +1530,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1495,13 +1530,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.14 双曲反正弦函数 ### 10.1.14 双曲反正弦函数
```rustscript ```rustscript
函数 函数
asinh asinh
语法 语法
asinh(x); asinh(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 asinh([[0,1],[-2,3]]) 输入 asinh([[0,1],[-2,3]])
结果 [[0, 0.881374],[-1.443635, ln(3+sqrt(10))]] 结果 [[0, 0.881374],[-1.443635, ln(3+sqrt(10))]]
...@@ -1513,13 +1548,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1513,13 +1548,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.15 双曲反余弦函数 ### 10.1.15 双曲反余弦函数
```rustscript ```rustscript
函数 函数
acosh acosh
语法 语法
acosh(x); acosh(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 acosh([[1,2],[cosh(3),5]]) 输入 acosh([[1,2],[cosh(3),5]])
结果 [[0,1.316958],[3,ln(5+2*sqrt(6))]] 结果 [[0,1.316958],[3,ln(5+2*sqrt(6))]]
...@@ -1531,13 +1566,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1531,13 +1566,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.16 双曲反正切函数 ### 10.1.16 双曲反正切函数
```rustscript ```rustscript
函数 函数
atanh atanh
语法 语法
atanh(x); atanh(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 atanh([[0,0.5],[-2/3,3/4]]) 输入 atanh([[0,0.5],[-2/3,3/4]])
结果 [[0, 0.549306],[-0.804719,0.5*ln(7)]] 结果 [[0, 0.549306],[-0.804719,0.5*ln(7)]]
...@@ -1549,13 +1584,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1549,13 +1584,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.17 绝对值函数 ### 10.1.17 绝对值函数
```rustscript ```rustscript
函数 函数
abs abs
语法 语法
abs(x); abs(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 abs([[0,-1],[-2,3]]) 输入 abs([[0,-1],[-2,3]])
结果 [[0,1],[2,3]] 结果 [[0,1],[2,3]]
...@@ -1564,13 +1599,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1564,13 +1599,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.18 符号函数 ### 10.1.18 符号函数
```rustscript ```rustscript
函数 函数
signum signum
语法 语法
signum(x); signum(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 signum([[0,-1],[-2,3]]) 输入 signum([[0,-1],[-2,3]])
结果 [[1,-1],[-1,1]] 结果 [[1,-1],[-1,1]]
...@@ -1582,13 +1617,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1582,13 +1617,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.19 向下取整函数 ### 10.1.19 向下取整函数
```rustscript ```rustscript
函数 函数
floor floor
语法 语法
floor(x); floor(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 floor([[0.6,-2.3],[1.3,-3.6]]) 输入 floor([[0.6,-2.3],[1.3,-3.6]])
结果 [[0,-3],[1,-4]] 结果 [[0,-3],[1,-4]]
...@@ -1600,13 +1635,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1600,13 +1635,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.20 向上取整函数 ### 10.1.20 向上取整函数
```rustscript ```rustscript
函数 函数
ceil ceil
语法 语法
ceil(x); ceil(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 ceil([[0.6,-2.3],[1.3,-3.6]]) 输入 ceil([[0.6,-2.3],[1.3,-3.6]])
结果 [[1,-2],[2,-3]] 结果 [[1,-2],[2,-3]]
...@@ -1618,13 +1653,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1618,13 +1653,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.21 四舍五入函数 ### 10.1.21 四舍五入函数
```rustscript ```rustscript
函数 函数
round round
语法 语法
round(x); round(x);
输入参数 输入参数
x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 x - 矩阵或标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 round([[0.6,-2.3],[1.3,-3.6]]) 输入 round([[0.6,-2.3],[1.3,-3.6]])
结果 [[1,-2],[1,-4]] 结果 [[1,-2],[1,-4]]
...@@ -1636,13 +1671,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1636,13 +1671,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.22 度转弧度函数 ### 10.1.22 度转弧度函数
```rustscript ```rustscript
函数 函数
deg2rad deg2rad
语法 语法
deg2rad(x); deg2rad(x);
输入参数 输入参数
x - 矩阵或标量 x - 矩阵或标量
示例 示例
输入 deg2rad([30, 45]) 输入 deg2rad([30, 45])
结果 [pi/6, pi/4] 结果 [pi/6, pi/4]
...@@ -1654,13 +1689,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1654,13 +1689,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.23 弧度转度函数 ### 10.1.23 弧度转度函数
```rustscript ```rustscript
函数 函数
rad2deg rad2deg
语法 语法
rad2deg(x); rad2deg(x);
输入参数 输入参数
x - 矩阵或标量 x - 矩阵或标量
示例 示例
输入 rad2deg([pi, pi/2]) 输入 rad2deg([pi, pi/2])
结果 [180, 90] 结果 [180, 90]
...@@ -1672,13 +1707,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1672,13 +1707,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.24 复数取实部函数 ### 10.1.24 复数取实部函数
```rustscript ```rustscript
函数 函数
real real
语法 语法
real(z); real(z);
输入参数 输入参数
z - 复数矩阵或复数标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 z - 复数矩阵或复数标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 real([c(1, 2), c(3, 4)]) 输入 real([c(1, 2), c(3, 4)])
结果 [c(1, 0), c(3, 0)] 结果 [c(1, 0), c(3, 0)]
...@@ -1687,13 +1722,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1687,13 +1722,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.25 复数取虚部函数 ### 10.1.25 复数取虚部函数
```rustscript ```rustscript
函数 函数
imag imag
语法 语法
imag(z); imag(z);
输入参数 输入参数
z - 复数矩阵或复数标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 z - 复数矩阵或复数标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 imag([c(1, 2), c(3, 4)]) 输入 imag([c(1, 2), c(3, 4)])
结果 [c(2, 0), c(4, 0)] 结果 [c(2, 0), c(4, 0)]
...@@ -1702,13 +1737,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1702,13 +1737,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.26 共轭复数函数 ### 10.1.26 共轭复数函数
```rustscript ```rustscript
函数 函数
conj conj
语法 语法
conj(z); conj(z);
输入参数 输入参数
z - 复数矩阵或复数标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 z - 复数矩阵或复数标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 conj([c(1, 2), c(3, 4)]) 输入 conj([c(1, 2), c(3, 4)])
结果 [c(1, -2), c(3, -4)] 结果 [c(1, -2), c(3, -4)]
...@@ -1717,13 +1752,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1717,13 +1752,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.27 复数模函数 ### 10.1.27 复数模函数
```rustscript ```rustscript
函数 函数
abs abs
语法 语法
abs(z); abs(z);
输入参数 输入参数
z - 复数矩阵或复数标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 z - 复数矩阵或复数标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 abs([c(3, 4), c(5, 12)]) 输入 abs([c(3, 4), c(5, 12)])
结果 [c(5, 0), c(13, 0)] 结果 [c(5, 0), c(13, 0)]
...@@ -1732,17 +1767,17 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1732,17 +1767,17 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.1.28 复数辐角函数 ### 10.1.28 复数辐角函数
```rustscript ```rustscript
函数 函数
arg angle
语法 语法
arg(z); angle(z);
输入参数 输入参数
z - 复数矩阵或复数标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算 z - 复数矩阵或复数标量,若为矩阵对每个元素分别进行计算,若为稀疏矩阵仅对非零元进行计算
示例 示例
输入 arg([c(sqrt(3), 1), c(1, 1)]) 输入 angle([c(sqrt(3), 1), c(1, 1)])
结果 [c(pi/6, 0), c(pi/4, 0)] 结果 [c(pi/6, 0), c(pi/4, 0)]
输入 arg(sparse([c(0,0),c(0,0)],[c(0,0),c(1,0)],[c(sqrt(3), 1),c(1, 1)], c(2,0), c(2,0))) 输入 angle(sparse([c(0,0),c(0,0)],[c(0,0),c(1,0)],[c(sqrt(3), 1),c(1, 1)], c(2,0), c(2,0)))
结果 [[c(2,0), c(2,0), c(0,0)], [c(0,0), c(0,0), c(pi/6,0)], [c(0,0), c(1,0), c(pi/4,0)]] 结果 [[c(2,0), c(2,0), c(0,0)], [c(0,0), c(0,0), c(pi/6,0)], [c(0,0), c(1,0), c(pi/4,0)]]
``` ```
...@@ -1750,13 +1785,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1750,13 +1785,13 @@ fn make_y_bus(baseMVA, bus, branch) {
### 10.2.1 线性代数 ### 10.2.1 线性代数
### 10.2.1.1 行列式 ### 10.2.1.1 行列式
```rustscript ```rustscript
函数 函数
det det
语法 语法
det(A); det(A);
输入参数 输入参数
A - 方阵 A - 方阵
示例 示例
输入 det([[1,2],[3,4]]) 输入 det([[1,2],[3,4]])
结果 -2 结果 -2
...@@ -1765,87 +1800,87 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1765,87 +1800,87 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.2.1.2 逆矩阵 ### 10.2.1.2 逆矩阵
```rustscript ```rustscript
运算符 运算符
^(-1) ^(-1)
语法 语法
A ^ (-1); A ^ (-1);
输入参数 输入参数
A - 方阵 A - 方阵
示例 示例
输入 [[1,2],[3,4]]^(-1) 输入 [[1,2],[3,4]]^(-1)
结果 [[-2, 1], [1.5, -0.5]] 结果 [[-2, 1], [1.5, -0.5]]
``` ```
### 10.2.1.3 矩阵的秩 ### 10.2.1.3 矩阵的秩
```rustscript ```rustscript
运算符 运算符
rank rank
语法 语法
rank(A); rank(A);
输入参数 输入参数
A - 矩阵 A - 矩阵
示例 示例
输入 rank([[1,2,3],[4,5,6]]) 输入 rank([[1,2,3],[4,5,6]])
结果 2 结果 2
``` ```
### 10.2.1.4 矩阵的迹 ### 10.2.1.4 矩阵的迹
```rustscript ```rustscript
运算符 运算符
trace trace
语法 语法
trace(A); trace(A);
输入参数 输入参数
A - 方阵 A - 方阵
示例 示例
输入 trace([[1,2,3],[4,5,6],[7,8,9]) 输入 trace([[1,2,3],[4,5,6],[7,8,9]])
结果 15 结果 15
输入 trace([[c(1,1), c(2,2), c(3,3)],[c(4,4), c(5,5) ,c(6,6)],[c(7,7), c(8,8), c(9,9)]) 输入 trace([[c(1,1), c(2,2), c(3,3)],[c(4,4), c(5,5) ,c(6,6)],[c(7,7), c(8,8), c(9,9)]])
结果 c(15,15) 结果 c(15,15)
``` ```
### 10.2.1.5 特征值 ### 10.2.1.5 特征值
```rustscript ```rustscript
运算符 运算符
eig eig
语法 语法
eig(A); eig(A);
输入参数 输入参数
A - 方阵,大小为N*N A - 方阵,大小为N*N
返回参数 返回参数
输入参数若为实数方阵,返回矩阵中第1列和第2列分别为特征值向量的实部和虚部,第3列至N+2列为右特征向量矩阵的实部,第N+3列至最后1列为右特征向量矩阵的虚部,顺序与特征值向量中元素顺序对应 输入参数若为实数方阵,返回矩阵中第1列和第2列分别为特征值向量的实部和虚部,第3列至N+2列为右特征向量矩阵的实部,第N+3列至最后1列为右特征向量矩阵的虚部,顺序与特征值向量中元素顺序对应
输入参数若为复数方阵,返回矩阵中第1列为特征值向量,第2列至最后一列为右特征向量矩阵,顺序与特征值向量中元素顺序对应 输入参数若为复数方阵,返回矩阵中第1列为特征值向量,第2列至最后一列为右特征向量矩阵,顺序与特征值向量中元素顺序对应
示例 示例
输入 eig([[4, 1], [2, 3]]) 输入 eig([[4, 1], [2, 3]])
结果 [[5, 0, 0.707107, -0.447214, 0, 0], [2, 0, 0.707107, 0.894427, 0, 0]] 结果 [[5, 0, 0.707107, -0.447214, 0, 0], [2, 0, 0.707107, 0.894427, 0, 0]]
输入 eig([[c(0,0), c(-1,0)],[c(1,0), c(0,0)]) 输入 eig([[c(0,0), c(-1,0)],[c(1,0), c(0,0)]])
结果 [[c(0, 1), c(0, 0.707107), c(0, -0.707107)], 结果 [[c(0, 1), c(0, 0.707107), c(0, -0.707107)],
[c(0, -1), c(0.707107, 0.), c(0.707107, 0)]] [c(0, -1), c(0.707107, 0.), c(0.707107, 0)]]
输入 eig([[c(2,0), c(-3,0)],[c(1,0), c(2,0)]) 输入 eig([[c(2,0), c(-3,0)],[c(1,0), c(2,0)]])
结果 [[c(2, 1.732051), c(0.866025, 0), c(0.866025, 0)], 结果 [[c(2, 1.732051), c(0.866025, 0), c(0.866025, 0)],
[c(2, -1.732051), c(0, -0.5), c(0, 0.5)]] [c(2, -1.732051), c(0, -0.5), c(0, 0.5)]]
``` ```
### 10.2.1.6 奇异值 ### 10.2.1.6 奇异值
```rustscript ```rustscript
运算符 运算符
svd svd
语法 语法
svd(A); svd(A);
输入参数 输入参数
A - 矩阵 A - 矩阵
示例 示例
输入 输入
结果 结果
``` ```
### 10.2.1.7 1范数 ### 10.2.1.7 1范数
```rustscript ```rustscript
函数 函数
norm_l1 norm_l1
语法 语法
norm_l1(A); norm_l1(A);
输入参数 输入参数
A - 矩阵 A - 矩阵
示例 示例
输入 norm_l1([1, -2, 3, -4]) 输入 norm_l1([1, -2, 3, -4])
结果 10 结果 10
...@@ -1860,13 +1895,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1860,13 +1895,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.2.1.8 max范数 ### 10.2.1.8 max范数
```rustscript ```rustscript
函数 函数
norm_l1 norm_l1
语法 语法
norm_l1(A); norm_l1(A);
输入参数 输入参数
A - 矩阵 A - 矩阵
示例 示例
输入 norm_max([1, -2, 3, -4]) 输入 norm_max([1, -2, 3, -4])
结果 4 结果 4
...@@ -1881,13 +1916,13 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1881,13 +1916,13 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.2.1.9 2范数 ### 10.2.1.9 2范数
```rustscript ```rustscript
函数 函数
norm_l2 norm_l2
语法 语法
norm_l2(A); norm_l2(A);
输入参数 输入参数
A - 矩阵 A - 矩阵
示例 示例
输入 norm_l2([1, -1, 1, 2, -2, 3, -4]) 输入 norm_l2([1, -1, 1, 2, -2, 3, -4])
结果 6 结果 6
...@@ -1902,15 +1937,15 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1902,15 +1937,15 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.2.1.10 线性方程组求解 ### 10.2.1.10 线性方程组求解
```rustscript ```rustscript
函数 函数
linsolve linsolve
语法 语法
linsolve(A, b); linsolve(A, b);
输入参数 输入参数
A - 方阵 A - 方阵
b - 向量,仅支持稠密矩阵形式 b - 向量,仅支持稠密矩阵形式
求解A * x = b 求解A * x = b
示例 示例
输入 linsolve([[2,1], [1,-3]], [[5], [-1]]) 输入 linsolve([[2,1], [1,-3]], [[5], [-1]])
结果 [[2], [1]] 结果 [[2], [1]]
...@@ -1922,15 +1957,15 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1922,15 +1957,15 @@ fn make_y_bus(baseMVA, bus, branch) {
``` ```
### 10.2.1.11 线性方程组系数矩阵转置求解 ### 10.2.1.11 线性方程组系数矩阵转置求解
```rustscript ```rustscript
函数 函数
linsolve_t linsolve_t
语法 语法
linsolve_t(A, b); linsolve_t(A, b);
输入参数 输入参数
A - 方阵 A - 方阵
b - 向量,仅支持稠密矩阵形式 b - 向量,仅支持稠密矩阵形式
求解A^T * x = b 求解A^T * x = b
示例 示例
输入 linsolve_t([[2,1], [3,-1]], [[13], [1]]) 输入 linsolve_t([[2,1], [3,-1]], [[13], [1]])
结果 [[3.2], [2.2]] 结果 [[3.2], [2.2]]
...@@ -1947,13 +1982,13 @@ qr(A), chol(A)cond(A) ...@@ -1947,13 +1982,13 @@ qr(A), chol(A)cond(A)
### 10.2.2 矩阵操作 ### 10.2.2 矩阵操作
### 10.2.2.1 转置 ### 10.2.2.1 转置
```rustscript ```rustscript
函数 函数
transpose transpose
语法 语法
transpose(A); transpose(A);
输入参数 输入参数
A - 矩阵 A - 矩阵
示例 示例
输入 transpose([1, 2, 3]) 输入 transpose([1, 2, 3])
结果 [[1], [2], [3]] 结果 [[1], [2], [3]]
...@@ -1965,13 +2000,13 @@ qr(A), chol(A)cond(A) ...@@ -1965,13 +2000,13 @@ qr(A), chol(A)cond(A)
``` ```
### 10.2.2.2 共轭转置 ### 10.2.2.2 共轭转置
```rustscript ```rustscript
函数 函数
ctranspose ctranspose
语法 语法
ctranspose(A); ctranspose(A);
输入参数 输入参数
A - 复数矩阵 A - 复数矩阵
示例 示例
输入 ctranspose([[c(1, 1), c(2, 2)], [c(3, 3), c(4, 4)]]) 输入 ctranspose([[c(1, 1), c(2, 2)], [c(3, 3), c(4, 4)]])
结果 [[c(1, -1), c(3, -3)], [c(2, -2), c(4, -4)]] 结果 [[c(1, -1), c(3, -3)], [c(2, -2), c(4, -4)]]
...@@ -1980,13 +2015,13 @@ qr(A), chol(A)cond(A) ...@@ -1980,13 +2015,13 @@ qr(A), chol(A)cond(A)
``` ```
### 10.2.2.3 对角矩阵 ### 10.2.2.3 对角矩阵
```rustscript ```rustscript
运算符 运算符
diag diag
语法 语法
diag(A); diag(A);
输入参数 输入参数
A - 向量或张量。若A为张量,返回其对角元向量;若A为向量,返回以A为对角元的对角矩阵 A - 向量或张量。若A为张量,返回其对角元向量;若A为向量,返回以A为对角元的对角矩阵
示例 示例
输入 diag([1, 2, 3]) 输入 diag([1, 2, 3])
结果 [[1, 0, 0],[0, 2, 0],[0, 0, 3]] 结果 [[1, 0, 0],[0, 2, 0],[0, 0, 3]]
...@@ -2006,14 +2041,14 @@ reshape(A, m, n), repmat(A, m, n) ...@@ -2006,14 +2041,14 @@ reshape(A, m, n), repmat(A, m, n)
#### 10.3.1 形状和尺寸 #### 10.3.1 形状和尺寸
#### 10.3.1.1 获取指定维度大小 #### 10.3.1.1 获取指定维度大小
```rustscript ```rustscript
函数 函数
size size
语法 语法
size(t, dim) size(t, dim)
输入参数 输入参数
t - 张量 t - 张量
dim - 指定维度,若该参数为空则返回各维度大小构成的向量 dim - 指定维度,若该参数为空则返回各维度大小构成的向量
示例 示例
输入 size([[1., 0.5, 0.3, 0.2], [0.5, 1., 0.6, 0.5], [0.3, 0.6, 1., 0.7]]) 输入 size([[1., 0.5, 0.3, 0.2], [0.5, 1., 0.6, 0.5], [0.3, 0.6, 1., 0.7]])
结果 [3,4] 结果 [3,4]
...@@ -2034,13 +2069,13 @@ reshape(A, m, n), repmat(A, m, n) ...@@ -2034,13 +2069,13 @@ reshape(A, m, n), repmat(A, m, n)
``` ```
#### 10.3.1.2 获取元素总数 #### 10.3.1.2 获取元素总数
```rustscript ```rustscript
函数 函数
length length
语法 语法
length(t) length(t)
输入参数 输入参数
t - 张量,若为稀疏矩阵,返回非零元个数 t - 张量,若为稀疏矩阵,返回非零元个数
示例 示例
输入 length([1, 2, 3]) 输入 length([1, 2, 3])
结果 3 结果 3
...@@ -2052,13 +2087,13 @@ reshape(A, m, n), repmat(A, m, n) ...@@ -2052,13 +2087,13 @@ reshape(A, m, n), repmat(A, m, n)
``` ```
#### 10.3.1.3 获取维度数 #### 10.3.1.3 获取维度数
```rustscript ```rustscript
函数 函数
ndim ndim
语法 语法
ndim(t) ndim(t)
输入参数 输入参数
t - 张量 t - 张量
示例 示例
输入 ndim([1, 2, 3]) 输入 ndim([1, 2, 3])
结果 1 结果 1
...@@ -2076,15 +2111,15 @@ numel(tensor) // 元素个数 ...@@ -2076,15 +2111,15 @@ numel(tensor) // 元素个数
#### 10.3.2 张量切片和操作 #### 10.3.2 张量切片和操作
#### 10.3.2.1 张量切片操作 #### 10.3.2.1 张量切片操作
```rustscript ```rustscript
函数 函数
slice slice
语法 语法
slice(t, row_spec, col_spec) slice(t, row_spec, col_spec)
输入参数 输入参数
t - 张量 t - 张量
row_spec - 行索引,数值代表单个索引,[0]代表所有行,[start,end,step]代表范围和步长 row_spec - 行索引,数值代表单个索引,[0]代表所有行,[start,end,step]代表范围和步长
col_spec - 列索引,数值代表单个索引,[0]代表所有列,[start,end,step]代表范围和步长 col_spec - 列索引,数值代表单个索引,[0]代表所有列,[start,end,step]代表范围和步长
返回类型 返回类型
1. 使用范围参数[start, end] - 返回二维张量 1. 使用范围参数[start, end] - 返回二维张量
col_2d = slice(a, [0], [1, 2]); // 取第2列所有行,返回3×1列向量(二维张量) col_2d = slice(a, [0], [1, 2]); // 取第2列所有行,返回3×1列向量(二维张量)
row_2d = slice(a, [1, 2], [0]); // 取第2行所有列,返回1×3行向量(二维张量) row_2d = slice(a, [1, 2], [0]); // 取第2行所有列,返回1×3行向量(二维张量)
...@@ -2093,7 +2128,7 @@ numel(tensor) // 元素个数 ...@@ -2093,7 +2128,7 @@ numel(tensor) // 元素个数
2. 使用单个索引 - 返回一维张量 2. 使用单个索引 - 返回一维张量
col_1d = slice(a, [0], 1); // 取第2列所有行,返回shape为[3]的一维张量 col_1d = slice(a, [0], 1); // 取第2列所有行,返回shape为[3]的一维张量
row_1d = slice(a, 1, [0]); // 取第2行所有列,返回shape为[3]的一维张量 row_1d = slice(a, 1, [0]); // 取第2行所有列,返回shape为[3]的一维张量
示例 示例
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
输入 slice(a, [0], [1, 2]) 输入 slice(a, [0], [1, 2])
结果 [[2], [5], [8]] 结果 [[2], [5], [8]]
...@@ -2112,21 +2147,21 @@ numel(tensor) // 元素个数 ...@@ -2112,21 +2147,21 @@ numel(tensor) // 元素个数
输入 slice(a, 1, [0]) 输入 slice(a, 1, [0])
结果 [4, 5, 6] 结果 [4, 5, 6]
电力系统应用示例 电力系统应用示例
voltage = slice(bus, [0], [VM-1, VM]); // 所有行,VM列(二维张量) voltage = slice(bus, [0], [VM-1, VM]); // 所有行,VM列(二维张量)
angle = slice(bus, [0], VA-1); // 所有行,VA列(一维张量) angle = slice(bus, [0], VA-1); // 所有行,VA列(一维张量)
``` ```
#### 10.3.2.2 设置张量元素值 #### 10.3.2.2 设置张量元素值
```rustscript ```rustscript
函数 函数
set set
语法 语法
set(t, indices, values) set(t, indices, values)
输入参数 输入参数
t - 张量 t - 张量
indices - 张量,其中元素表示t按行顺序排列的位置索引 indices - 张量,其中元素表示t按行顺序排列的位置索引
values - 张量,形状应与indices相同,indices中索引位置元素设置为values中的对应值 values - 张量,形状应与indices相同,indices中索引位置元素设置为values中的对应值
示例 示例
输入 set([[1, 2], [3, 4]], [2, 0], -3) 输入 set([[1, 2], [3, 4]], [2, 0], -3)
结果 [[-3, 2], [-3, 4]] 结果 [[-3, 2], [-3, 4]]
...@@ -2141,15 +2176,15 @@ numel(tensor) // 元素个数 ...@@ -2141,15 +2176,15 @@ numel(tensor) // 元素个数
``` ```
#### 10.3.2.3 张量元素累加赋值 (相当于 +=) #### 10.3.2.3 张量元素累加赋值 (相当于 +=)
```rustscript ```rustscript
函数 函数
set2 set2
语法 语法
set2(t, indices, values) set2(t, indices, values)
输入参数 输入参数
t - 张量 t - 张量
indices - 张量,其中元素表示t按行顺序排列的位置索引 indices - 张量,其中元素表示t按行顺序排列的位置索引
values - 张量,形状应与indices相同,indices中索引位置元素设置为values中的对应值 values - 张量,形状应与indices相同,indices中索引位置元素设置为values中的对应值
示例 示例
输入 set2([[1, 2], [3, 4]], [2, 0], -3) 输入 set2([[1, 2], [3, 4]], [2, 0], -3)
结果 [[-2, 2], [0, 4]] 结果 [[-2, 2], [0, 4]]
...@@ -2166,15 +2201,15 @@ numel(tensor) // 元素个数 ...@@ -2166,15 +2201,15 @@ numel(tensor) // 元素个数
#### 10.3.3 张量拼接 #### 10.3.3 张量拼接
#### 10.3.3.1 横向拼接张量 #### 10.3.3.1 横向拼接张量
```rustscript ```rustscript
函数 函数
horzcat horzcat
语法 语法
horzcat(A, B, ...) horzcat(A, B, ...)
输入参数 输入参数
A - 张量 A - 张量
B - 张量 B - 张量
输入各张量的行数应相同 输入各张量的行数应相同
示例 示例
输入 horzcat([[1, 2, 3], [4, 5, 6]], [[7, 9], [8, 10]]) 输入 horzcat([[1, 2, 3], [4, 5, 6]], [[7, 9], [8, 10]])
结果 [[1, 2, 3, 7, 9], [4, 5, 6, 8, 10]] 结果 [[1, 2, 3, 7, 9], [4, 5, 6, 8, 10]]
...@@ -2185,15 +2220,15 @@ numel(tensor) // 元素个数 ...@@ -2185,15 +2220,15 @@ numel(tensor) // 元素个数
``` ```
#### 10.3.3.2 纵向拼接张量 #### 10.3.3.2 纵向拼接张量
```rustscript ```rustscript
函数 函数
vertcat vertcat
语法 语法
vertcat(A, B, ...) vertcat(A, B, ...)
输入参数 输入参数
A - 张量 A - 张量
B - 张量 B - 张量
输入各张量的列数应相同 输入各张量的列数应相同
示例 示例
输入 vertcat([[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]) 输入 vertcat([[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]])
结果 [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] 结果 [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
...@@ -2216,14 +2251,14 @@ linspace(start, end, num) ...@@ -2216,14 +2251,14 @@ linspace(start, end, num)
#### 10.3.5 统计函数 #### 10.3.5 统计函数
#### 10.3.5.1 按维度求和 #### 10.3.5.1 按维度求和
```rustscript ```rustscript
函数 函数
sum sum
语法 语法
sum(t,d) sum(t,d)
输入参数 输入参数
t - 张量 t - 张量
d - 维度,可选参数 d - 维度,可选参数
示例 示例
输入 sum([[[1.1, 2.2], [3.3, 4.4]], [[5.5, 6.6], [7.7, 8.1]]]) 输入 sum([[[1.1, 2.2], [3.3, 4.4]], [[5.5, 6.6], [7.7, 8.1]]])
结果 [[6.6, 8.8], [11.0, 12.5]] 结果 [[6.6, 8.8], [11.0, 12.5]]
...@@ -2248,13 +2283,13 @@ linspace(start, end, num) ...@@ -2248,13 +2283,13 @@ linspace(start, end, num)
``` ```
#### 10.3.5.2 所有元素求和 #### 10.3.5.2 所有元素求和
```rustscript ```rustscript
函数 函数
sum_all sum_all
语法 语法
sum_all(t) sum_all(t)
输入参数 输入参数
t - 张量 t - 张量
示例 示例
输入 sum_all([[1, 2], [3, 4]]) 输入 sum_all([[1, 2], [3, 4]])
结果 10 结果 10
...@@ -2266,13 +2301,13 @@ linspace(start, end, num) ...@@ -2266,13 +2301,13 @@ linspace(start, end, num)
``` ```
#### 10.3.5.3 平均值 #### 10.3.5.3 平均值
```rustscript ```rustscript
函数 函数
mean mean
语法 语法
mean(t) mean(t)
输入参数 输入参数
t - 张量 t - 张量
示例 示例
输入 mean([[1, 2], [3, 4]]) 输入 mean([[1, 2], [3, 4]])
结果 10 结果 10
...@@ -2292,15 +2327,15 @@ var(tensor) ...@@ -2292,15 +2327,15 @@ var(tensor)
``` ```
#### 10.3.5.6 最大值 #### 10.3.5.6 最大值
```rustscript ```rustscript
函数 函数
max max
语法 语法
max(t, row_spec, col_spec) max(t, row_spec, col_spec)
输入参数 输入参数
t - 张量 t - 张量
row_spec - 可选参数,行索引,数值代表单个索引,[0]代表所有行,[start,end,step]代表范围和步长 row_spec - 可选参数,行索引,数值代表单个索引,[0]代表所有行,[start,end,step]代表范围和步长
col_spec - 可选参数,列索引,数值代表单个索引,[0]代表所有列,[start,end,step]代表范围和步长 col_spec - 可选参数,列索引,数值代表单个索引,[0]代表所有列,[start,end,step]代表范围和步长
示例 示例
输入 max([[1, 2], [3, 4]]) 输入 max([[1, 2], [3, 4]])
结果 4 结果 4
...@@ -2315,15 +2350,15 @@ var(tensor) ...@@ -2315,15 +2350,15 @@ var(tensor)
``` ```
#### 10.3.5.7 最小值 #### 10.3.5.7 最小值
```rustscript ```rustscript
函数 函数
min min
语法 语法
min(t, row_spec, col_spec) min(t, row_spec, col_spec)
输入参数 输入参数
t - 张量 t - 张量
row_spec - 可选参数,行索引,数值代表单个索引,[0]代表所有行,[start,end,step]代表范围和步长 row_spec - 可选参数,行索引,数值代表单个索引,[0]代表所有行,[start,end,step]代表范围和步长
col_spec - 可选参数,列索引,数值代表单个索引,[0]代表所有列,[start,end,step]代表范围和步长 col_spec - 可选参数,列索引,数值代表单个索引,[0]代表所有列,[start,end,step]代表范围和步长
示例 示例
输入 min([[1, 2], [3, 4]]) 输入 min([[1, 2], [3, 4]])
结果 1 结果 1
...@@ -2345,13 +2380,13 @@ median(tensor) ...@@ -2345,13 +2380,13 @@ median(tensor)
#### 10.3.6 查找函数 #### 10.3.6 查找函数
#### 10.3.6.1 查找非零元素 #### 10.3.6.1 查找非零元素
```rustscript ```rustscript
函数 函数
find find
语法 语法
find(t) find(t)
输入参数 输入参数
t - 张量 t - 张量
示例 示例
输入 find([1, 0, 3, 0]) 输入 find([1, 0, 3, 0])
结果 [0, 2] 结果 [0, 2]
...@@ -2363,14 +2398,14 @@ median(tensor) ...@@ -2363,14 +2398,14 @@ median(tensor)
``` ```
#### 10.3.6.2 查找最接近指定值的元素 #### 10.3.6.2 查找最接近指定值的元素
```rustscript ```rustscript
函数 函数
find_nearest find_nearest
语法 语法
find_nearest(t, v) find_nearest(t, v)
输入参数 输入参数
t - 张量,若为稀疏矩阵,仅查找非零元 t - 张量,若为稀疏矩阵,仅查找非零元
v - 标量 v - 标量
示例 示例
输入 find_nearest([1, 2.1, 3], 2) 输入 find_nearest([1, 2.1, 3], 2)
结果 2.1 结果 2.1
...@@ -2382,15 +2417,15 @@ median(tensor) ...@@ -2382,15 +2417,15 @@ median(tensor)
``` ```
#### 10.3.6.3 查找最接近指定值的元素位置 #### 10.3.6.3 查找最接近指定值的元素位置
```rustscript ```rustscript
函数 函数
find_nearest_pos find_nearest_pos
语法 语法
find_nearest_pos(t, v) find_nearest_pos(t, v)
输入参数 输入参数
t - 张量,若为稀疏矩阵,仅查找非零元 t - 张量,若为稀疏矩阵,仅查找非零元
v - 标量 v - 标量
若有多个元素与指定值,返回第一个元素位置 若有多个元素与指定值,返回第一个元素位置
示例 示例
输入 find_nearest_pos([4, 3, 1], 2) 输入 find_nearest_pos([4, 3, 1], 2)
结果 [1] 结果 [1]
...@@ -2402,14 +2437,14 @@ median(tensor) ...@@ -2402,14 +2437,14 @@ median(tensor)
``` ```
#### 10.3.6.4 检测指定维度是否存在非零元素 #### 10.3.6.4 检测指定维度是否存在非零元素
```rustscript ```rustscript
函数 函数
any any
语法 语法
any(t,d) any(t,d)
输入参数 输入参数
t - 张量 t - 张量
d - 维度 d - 维度
示例 示例
输入 any([0, 2, 3]) 输入 any([0, 2, 3])
结果 1 结果 1
...@@ -2430,13 +2465,13 @@ median(tensor) ...@@ -2430,13 +2465,13 @@ median(tensor)
``` ```
#### 10.3.6.5 检测张量是否为空 #### 10.3.6.5 检测张量是否为空
```rustscript ```rustscript
函数 函数
is_empty is_empty
语法 语法
is_empty(t) is_empty(t)
输入参数 输入参数
t - 张量。若为稠密矩阵,检测矩阵是否为空;若为稀疏矩阵,则检测是否存在非零元 t - 张量。若为稠密矩阵,检测矩阵是否为空;若为稀疏矩阵,则检测是否存在非零元
示例 示例
输入 is_empty([]) 输入 is_empty([])
结果 1 结果 1
...@@ -2448,13 +2483,13 @@ median(tensor) ...@@ -2448,13 +2483,13 @@ median(tensor)
``` ```
#### 10.3.6.6 检测是否无穷数 #### 10.3.6.6 检测是否无穷数
```rustscript ```rustscript
函数 函数
is_inf is_inf
语法 语法
is_inf(t) is_inf(t)
输入参数 输入参数
t - 张量 t - 张量
示例 示例
输入 is_inf([[0, INF], [2, NEG_INF]]) 输入 is_inf([[0, INF], [2, NEG_INF]])
结果 [[0, 1],[0, 1]] 结果 [[0, 1],[0, 1]]
...@@ -2472,14 +2507,14 @@ all(tensor) ...@@ -2472,14 +2507,14 @@ all(tensor)
#### 10.3.7 获取多个元素 #### 10.3.7 获取多个元素
#### 10.3.7.1 根据索引获取多个元素(可不连续) #### 10.3.7.1 根据索引获取多个元素(可不连续)
```rustscript ```rustscript
函数 函数
get_multi get_multi
语法 语法
get_multi(t, indices); get_multi(t, indices);
输入参数 输入参数
t - 张量 t - 张量
indices - 张量,其中元素表示t按行顺序排列的位置索引 indices - 张量,其中元素表示t按行顺序排列的位置索引
示例 示例
输入 get_multi([1, 2, 3, 4], [1, 3]) 输入 get_multi([1, 2, 3, 4], [1, 3])
结果 [2, 4] 结果 [2, 4]
...@@ -2491,31 +2526,31 @@ all(tensor) ...@@ -2491,31 +2526,31 @@ all(tensor)
### 10.4.1 创建稀疏矩阵 ### 10.4.1 创建稀疏矩阵
### 10.4.1.1 由三元组创建稀疏矩阵 ### 10.4.1.1 由三元组创建稀疏矩阵
```rustscript ```rustscript
函数 函数
sparse sparse
语法 语法
sparse(row, col, v, m, n); sparse(row, col, v, m, n);
输入参数 输入参数
row - 向量,行索引 row - 向量,行索引
col - 向量,列索引 col - 向量,列索引
v - 向量,值 v - 向量,值
m - 稀疏矩阵行数 m - 稀疏矩阵行数
n - 稀疏矩阵列数 n - 稀疏矩阵列数
row、col和v的长度应相等 row、col和v的长度应相等
示例 示例
输入 sparse([0, 1, 2], [1, 0, 1], [2, 3, 6], 3, 2) 输入 sparse([0, 1, 2], [1, 0, 1], [2, 3, 6], 3, 2)
结果 [[3, 2, 0], [0, 1, 2], [1, 0, 3], [2, 1, 6]] 结果 [[3, 2, 0], [0, 1, 2], [1, 0, 3], [2, 1, 6]]
``` ```
### 10.4.2 稀疏矩阵操作 ### 10.4.2 稀疏矩阵操作
### 10.4.2.1 转为稠密矩阵 ### 10.4.2.1 转为稠密矩阵
```rustscript ```rustscript
函数 函数
full full
语法 语法
full(t); full(t);
输入参数 输入参数
t - 稀疏矩阵 t - 稀疏矩阵
示例 示例
输入 full(sparse([0, 1, 1], [1, 0, 2], 2, 3)) 输入 full(sparse([0, 1, 1], [1, 0, 2], 2, 3))
结果 [[0, 2, 0], [4, 0, 6]] 结果 [[0, 2, 0], [4, 0, 6]]
``` ```
...@@ -2556,19 +2591,19 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t), ...@@ -2556,19 +2591,19 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t),
## 11. 方程组和优化模型求解 ## 11. 方程组和优化模型求解
### 11.1 线性方程组求解 ### 11.1 线性方程组求解
```rustscript ```rustscript
函数 函数
sp_linsolve sp_linsolve
语法 语法
sp_linsolve([eqs], b, [init_val], [var_name]); sp_linsolve([eqs], b, [init_val], [var_name]);
输入参数 输入参数
eqs - 包含变量的方程组表达式,多个方程之间用","分隔 eqs - 包含变量的方程组表达式,多个方程之间用","分隔
b - 常数向量 b - 常数向量
init_val - 变量初值,用","分隔 init_val - 变量初值,用","分隔
var_name - 变量名称,用","分隔 var_name - 变量名称,用","分隔
注意:变量名称需包含在"`"中,如`x` 注意:变量名称需包含在"`"中,如`x`
返回结果 返回结果
[变量求解结果,迭代次数] [变量求解结果,迭代次数]
示例 示例
输入 g1 = `x1`+3/3 * `x2`+ min(2,5)*`x3` - 1; 输入 g1 = `x1`+3/3 * `x2`+ min(2,5)*`x3` - 1;
g2 = 1*3*`x2` - 4*3; g2 = 1*3*`x2` - 4*3;
g3 = 1*3 * `x2`+sin(8-2)*x3 - 7; g3 = 1*3 * `x2`+sin(8-2)*x3 - 7;
...@@ -2579,19 +2614,19 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t), ...@@ -2579,19 +2614,19 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t),
### 11.2 混合整数线性规划 ### 11.2 混合整数线性规划
```rustscript ```rustscript
函数 函数
intlinprog intlinprog
语法 语法
intlinprog(obj, [st], var_type, [var_name]); intlinprog(obj, [st], var_type, [var_name]);
输入参数 输入参数
obj - 目标函数表达式 obj - 目标函数表达式
st - 约束条件表达式,多个约束条件之间用","分隔 st - 约束条件表达式,多个约束条件之间用","分隔
var_type - 变量类型向量,1为0-1变量、2为整型变量、3为实数变量 var_type - 变量类型向量,1为0-1变量、2为整型变量、3为实数变量
var_name - 变量名称,用","分隔 var_name - 变量名称,用","分隔
注意:变量名称需包含在"`"中,如`x` 注意:变量名称需包含在"`"中,如`x`
返回结果 返回结果
[变量优化结果,最优目标值,迭代次数] [变量优化结果,最优目标值,迭代次数]
示例 示例
输入 f = (5*1)*`x1`+3*`x2`+2*`x3`+(10-3)*`x4`+4*x5; 输入 f = (5*1)*`x1`+3*`x2`+2*`x3`+(10-3)*`x4`+4*x5;
g1 = 2*`x1` - (2*4)*`x2` + 4*`x3` + 2*`x4` + max(1,5)*`x5` <= 5*2; g1 = 2*`x1` - (2*4)*`x2` + 4*`x3` + 2*`x4` + max(1,5)*`x5` <= 5*2;
g2 = `x2` <= 0.2; g2 = `x2` <= 0.2;
...@@ -2601,11 +2636,11 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t), ...@@ -2601,11 +2636,11 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t),
### 11.3 非线性规划 ### 11.3 非线性规划
```rustscript ```rustscript
函数 函数
fmincon fmincon
语法 语法
fmincon(obj, [st], st_lower, st_upper, var_lower, var_upper, [var_name]); fmincon(obj, [st], st_lower, st_upper, var_lower, var_upper, [var_name]);
输入参数 输入参数
obj - 目标函数表达式 obj - 目标函数表达式
st - 约束条件表达式,多个约束条件之间用","分隔 st - 约束条件表达式,多个约束条件之间用","分隔
st_lower - 约束下限向量 st_lower - 约束下限向量
...@@ -2614,9 +2649,9 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t), ...@@ -2614,9 +2649,9 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t),
var_upper - 变量上限向量 var_upper - 变量上限向量
var_name - 变量名称,用","分隔 var_name - 变量名称,用","分隔
注意:变量名称需包含在"`"中,如`x` 注意:变量名称需包含在"`"中,如`x`
返回结果 返回结果
[变量优化结果,最优目标值,迭代次数] [变量优化结果,最优目标值,迭代次数]
示例 示例
输入 f = `x1` * x4 * (x1 + x2 + x3) + x3; 输入 f = `x1` * x4 * (x1 + x2 + x3) + x3;
g1 = `x1` * x2 * x3 * x4; g1 = `x1` * x2 * x3 * x4;
g2 = `x1`^2 + x2^2 + x3^2 + x4^2; g2 = `x1`^2 + x2^2 + x3^2 + x4^2;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论