Commit 9cf68ff4 by xuchengsi

补充张量生成方法说明

parent bfe07d45
# RustScript 语言规范 # RustScript 语言规范
...@@ -163,9 +163,65 @@ PD = 2; ...@@ -163,9 +163,65 @@ PD = 2;
QD = 3; QD = 3;
``` ```
## 5. 张量操作 ## 5. 创建张量
### 5.1 张量索引 ### 5.1 创建全0张量
```rustscript
函数
zeros
语法
t = zeros(s1, s2, ..., si, ...);
输入参数
si - 标量,生成张量的第i维长度
示例
输入 zeros(3,4)
结果 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
```
### 5.2 创建全1张量
```rustscript
函数
ones
语法
t = ones(s1, s2, ..., si, ...);
输入参数
si - 标量,生成张量的第i维长度
示例
输入 ones(3,4)
结果 [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
```
### 5.3 创建单位矩阵
```rustscript
函数
eye
语法
t = eye(s);
输入参数
s - 标量,生成矩阵阶数
示例
输入 eye(3)
结果 [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
```
### 5.4 创建序列
```rustscript
函数
range
语法
t = range(start, end, step);
输入参数
start - 标量,起始值
end - 标量,终止值
step - 标量,步长
示例
输入 range(1, 10, 2)
结果 [1, 3, 5, 7, 9]
```
## 6. 张量操作
### 6.1 张量索引
```rustscript ```rustscript
函数 函数
get get
...@@ -188,7 +244,7 @@ QD = 3; ...@@ -188,7 +244,7 @@ QD = 3;
结果 2 结果 2
``` ```
### 5.2 张量切片 ### 6.2 张量切片
```rustscript ```rustscript
函数 函数
slice slice
...@@ -232,7 +288,7 @@ QD = 3; ...@@ -232,7 +288,7 @@ QD = 3;
angle = slice(bus, [0], VA-1); // 所有行,VA列(一维张量) angle = slice(bus, [0], VA-1); // 所有行,VA列(一维张量)
``` ```
### 5.3 获取张量指定行列 ### 6.3 获取张量指定行列
```rustscript ```rustscript
函数 函数
select select
...@@ -257,7 +313,7 @@ QD = 3; ...@@ -257,7 +313,7 @@ QD = 3;
结果 [[1,3]] 结果 [[1,3]]
``` ```
### 5.4 张量赋值操作 ### 6.4 张量赋值操作
```rustscript ```rustscript
函数 函数
assign assign
...@@ -315,8 +371,8 @@ QD = 3; ...@@ -315,8 +371,8 @@ QD = 3;
assign(bus, new_angles, [0], VA-1); // 更新电压角度 assign(bus, new_angles, [0], VA-1); // 更新电压角度
``` ```
### 5.5 张量形状和维度 ### 6.5 张量形状和维度
#### 5.5.1 重要概念区分 #### 6.5.1 重要概念区分
```rustscript ```rustscript
a = [1, 2, 3]; // 一维张量, shape: [3] a = [1, 2, 3]; // 一维张量, shape: [3]
b = [[1, 2, 3]]; // 行向量(二维张量), shape: [1, 3] b = [[1, 2, 3]]; // 行向量(二维张量), shape: [1, 3]
...@@ -327,7 +383,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -327,7 +383,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
- 行向量和列向量都属于二维张量,但形状不同 - 行向量和列向量都属于二维张量,但形状不同
- slice和assign函数的行为取决于参数格式和返回的张量维度 - slice和assign函数的行为取决于参数格式和返回的张量维度
``` ```
#### 5.5.2 获取张量维数 #### 6.5.2 获取张量维数
```rustscript ```rustscript
函数 函数
ndim ndim
...@@ -345,7 +401,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -345,7 +401,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 ndim([[1], [2], [3]]) 输入 ndim([[1], [2], [3]])
结果 2 结果 2
``` ```
#### 5.5.3 获取指定维度大小 #### 6.5.3 获取指定维度大小
```rustscript ```rustscript
函数 函数
size size
...@@ -374,46 +430,46 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -374,46 +430,46 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
结果 1 结果 1
``` ```
## 6. 运算符 ## 7. 运算符
### 6.1 算术运算符 ### 7.1 算术运算符
#### 6.1.1 标量运算 #### 7.1.1 标量运算
##### 6.1.1.1 加法 ##### 7.1.1.1 加法
```rustscript ```rustscript
运算符 运算符
+ +
语法 语法
a + b; a + b;
``` ```
##### 6.1.1.2 减法 ##### 7.1.1.2 减法
```rustscript ```rustscript
运算符 运算符
- -
语法 语法
a - b; a - b;
``` ```
##### 6.1.1.3 乘法 ##### 7.1.1.3 乘法
```rustscript ```rustscript
运算符 运算符
* *
语法 语法
a * b; a * b;
``` ```
##### 6.1.1.4 除法 ##### 7.1.1.4 除法
```rustscript ```rustscript
运算符 运算符
/ /
语法 语法
a / b; a / b;
``` ```
##### 6.1.1.5 幂运算 ##### 7.1.1.5 幂运算
```rustscript ```rustscript
运算符 运算符
^ ^
语法 语法
a ^ b; a ^ b;
``` ```
#### 6.1.2 元素级运算(张量) #### 7.1.2 元素级运算(张量)
##### 6.1.2.1 元素级加法 ##### 7.1.2.1 元素级加法
```rustscript ```rustscript
运算符 运算符
+ +
...@@ -438,7 +494,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -438,7 +494,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 [2,3]+sparse([0,1,2],[1,0,1],[2,3,6], 3, 2) 输入 [2,3]+sparse([0,1,2],[1,0,1],[2,3,6], 3, 2)
结果 [[2,5],[5,3],[2,9]] 结果 [[2,5],[5,3],[2,9]]
``` ```
##### 6.1.2.2 元素级减法 ##### 7.1.2.2 元素级减法
```rustscript ```rustscript
运算符 运算符
- -
...@@ -463,7 +519,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -463,7 +519,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 [2,3]-sparse([0,1,2],[1,0,1],[2,3,6], 3, 2) 输入 [2,3]-sparse([0,1,2],[1,0,1],[2,3,6], 3, 2)
结果 [[2,1],[-1,3],[2,3]] 结果 [[2,1],[-1,3],[2,3]]
``` ```
##### 6.1.2.3 元素级乘法 ##### 7.1.2.3 元素级乘法
```rustscript ```rustscript
运算符 运算符
.* .*
...@@ -488,7 +544,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -488,7 +544,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 [2,3].*sparse([0,1,2],[1,0,1],[2,3,6], 3, 2) 输入 [2,3].*sparse([0,1,2],[1,0,1],[2,3,6], 3, 2)
结果 [[0,6],[6,0],[0,18]] 结果 [[0,6],[6,0],[0,18]]
``` ```
##### 6.1.2.4 元素级除法 ##### 7.1.2.4 元素级除法
```rustscript ```rustscript
运算符 运算符
./ ./
...@@ -513,7 +569,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -513,7 +569,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 sparse([0,1,2],[1,0,1],[2,3,6], 3, 2)./[2,3] 输入 sparse([0,1,2],[1,0,1],[2,3,6], 3, 2)./[2,3]
结果 [[0,2/3],[1.5,0],[0,2]] 结果 [[0,2/3],[1.5,0],[0,2]]
``` ```
##### 6.1.2.5 元素级幂运算 ##### 7.1.2.5 元素级幂运算
```rustscript ```rustscript
运算符 运算符
.^ .^
...@@ -532,7 +588,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -532,7 +588,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 sparse([0,1,2],[1,0,1],[2,3,6], 3, 2).^3 输入 sparse([0,1,2],[1,0,1],[2,3,6], 3, 2).^3
结果 [[3, 2, 0], [0, 1, 8], [1, 0, 27], [2, 1, 216]] 结果 [[3, 2, 0], [0, 1, 8], [1, 0, 27], [2, 1, 216]]
``` ```
##### 6.1.2.6 元素级模运算 ##### 7.1.2.6 元素级模运算
```rustscript ```rustscript
运算符 运算符
% %
...@@ -554,8 +610,8 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -554,8 +610,8 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 [7,9]%sparse([0,0,1,1],[0,1,0,1],[2,3,4,6], 2, 2) 输入 [7,9]%sparse([0,0,1,1],[0,1,0,1],[2,3,4,6], 2, 2)
结果 [[1,0],[3,3]] 结果 [[1,0],[3,3]]
``` ```
#### 6.1.3 矩阵运算 #### 7.1.3 矩阵运算
##### 6.1.3.1 矩阵加法 ##### 7.1.3.1 矩阵加法
```rustscript ```rustscript
运算符 运算符
+ +
...@@ -579,7 +635,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -579,7 +635,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 sparse([0,1,2],[1,0,1],[2,3,6],3,2)+sparse([0,1,2],[0,0,0],[2,4,6],3,2) 输入 sparse([0,1,2],[1,0,1],[2,3,6],3,2)+sparse([0,1,2],[0,0,0],[2,4,6],3,2)
结果 [[3, 2, 0], [0, 0, 2], [0, 1, 2], [1, 0, 7], [2, 0, 6], [2, 1, 6]] 结果 [[3, 2, 0], [0, 0, 2], [0, 1, 2], [1, 0, 7], [2, 0, 6], [2, 1, 6]]
``` ```
##### 6.1.3.2 矩阵减法 ##### 7.1.3.2 矩阵减法
```rustscript ```rustscript
运算符 运算符
- -
...@@ -603,7 +659,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -603,7 +659,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 sparse([0,1,2],[1,0,1],[2,3,6],3,2)-sparse([0,1,2],[0,0,0],[2,4,6],3,2) 输入 sparse([0,1,2],[1,0,1],[2,3,6],3,2)-sparse([0,1,2],[0,0,0],[2,4,6],3,2)
结果 [[3, 2, 0], [0, 0, -2], [0, 1, 2], [1, 0, -1], [2, 0, -6], [2, 1, 6]] 结果 [[3, 2, 0], [0, 0, -2], [0, 1, 2], [1, 0, -1], [2, 0, -6], [2, 1, 6]]
``` ```
##### 6.1.3.3 矩阵标量乘法 ##### 7.1.3.3 矩阵标量乘法
```rustscript ```rustscript
运算符 运算符
* *
...@@ -623,7 +679,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -623,7 +679,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 2*sparse([1,2],[1,2],[2,3], 3, 3) 输入 2*sparse([1,2],[1,2],[2,3], 3, 3)
结果 [[3,3,0],[1,1,4],[2,2,6]] 结果 [[3,3,0],[1,1,4],[2,2,6]]
``` ```
##### 6.1.3.4 矩阵标量除法 ##### 7.1.3.4 矩阵标量除法
```rustscript ```rustscript
运算符 运算符
/ /
...@@ -642,7 +698,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -642,7 +698,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 sparse([1,2],[1,2],[2,3], 3, 3)/2 输入 sparse([1,2],[1,2],[2,3], 3, 3)/2
结果 [[3,3,0],[1,1,1],[2,2,1.5]] 结果 [[3,3,0],[1,1,1],[2,2,1.5]]
``` ```
##### 6.1.3.5 矩阵乘法 ##### 7.1.3.5 矩阵乘法
```rustscript ```rustscript
运算符 运算符
* *
...@@ -666,7 +722,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -666,7 +722,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 sparse([0,1,2],[1,0,1],[2.0, 3.0, 6.0], 3, 2)*sparse([0,1,1],[1,0,2],[2.0, 4.0, 6.0], 2, 3) 输入 sparse([0,1,2],[1,0,1],[2.0, 3.0, 6.0], 3, 2)*sparse([0,1,1],[1,0,2],[2.0, 4.0, 6.0], 2, 3)
结果 [[3, 3, 0], [0, 0, 8], [0, 2, 12], [1, 1, 6], [2, 0, 24], [2, 2, 36]] 结果 [[3, 3, 0], [0, 0, 8], [0, 2, 12], [1, 1, 6], [2, 0, 24], [2, 2, 36]]
``` ```
##### 6.1.3.6 矩阵右除 ##### 7.1.3.6 矩阵右除
```rustscript ```rustscript
运算符 运算符
/ /
...@@ -690,7 +746,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -690,7 +746,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 sparse([0,0,1,1],[0,1,0,1],[19,22,43,50], 2, 2)/sparse([0,0,1,1],[0,1,0,1],[1,2,3,4], 2, 2) 输入 sparse([0,0,1,1],[0,1,0,1],[19,22,43,50], 2, 2)/sparse([0,0,1,1],[0,1,0,1],[1,2,3,4], 2, 2)
结果 [[2, 2, 0], [0, 0, -5], [0, 1, 8], [1, 0, -11], [1, 1, 18]] 结果 [[2, 2, 0], [0, 0, -5], [0, 1, 8], [1, 0, -11], [1, 1, 18]]
``` ```
##### 6.1.3.7 矩阵左除 ##### 7.1.3.7 矩阵左除
```rustscript ```rustscript
运算符 运算符
\ \
...@@ -714,7 +770,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -714,7 +770,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 sparse([0,0,1,1],[0,1,0,1],[2,1,1,-3], 2, 2)\sparse([0,1],[0,0],[5,-1], 2, 1) 输入 sparse([0,0,1,1],[0,1,0,1],[2,1,1,-3], 2, 2)\sparse([0,1],[0,0],[5,-1], 2, 1)
结果 [[2, 1, 0], [0, 0, 2], [1, 0, 1]] 结果 [[2, 1, 0], [0, 0, 2], [1, 0, 1]]
``` ```
##### 6.1.3.8 矩阵幂 ##### 7.1.3.8 矩阵幂
```rustscript ```rustscript
运算符 运算符
^ ^
...@@ -736,7 +792,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -736,7 +792,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 sparse([0,1,2],[1,0,1],[2, 3, 6], 3, 3)^3 输入 sparse([0,1,2],[1,0,1],[2, 3, 6], 3, 3)^3
结果 [[3, 3, 0], [0, 1, 12], [1, 0, 18], [2, 1, 36]] 结果 [[3, 3, 0], [0, 1, 12], [1, 0, 18], [2, 1, 36]]
``` ```
##### 6.1.3.9 转置 ##### 7.1.3.9 转置
```rustscript ```rustscript
运算符 运算符
' '
...@@ -754,7 +810,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -754,7 +810,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 sparse([0,1,2], [1,0,1], [2, 3, 6], 3, 2)' 输入 sparse([0,1,2], [1,0,1], [2, 3, 6], 3, 2)'
结果 [[2, 3, 0], [1, 0, 2], [0, 1, 3], [1, 2, 6]] 结果 [[2, 3, 0], [1, 0, 2], [0, 1, 3], [1, 2, 6]]
``` ```
##### 6.1.3.10 逆矩阵 ##### 7.1.3.10 逆矩阵
```rustscript ```rustscript
运算符 运算符
^(-1) ^(-1)
...@@ -766,7 +822,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -766,7 +822,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 [[1,2],[3,4]]^(-1) 输入 [[1,2],[3,4]]^(-1)
结果 [[-2, 1], [1.5, -0.5]] 结果 [[-2, 1], [1.5, -0.5]]
``` ```
##### 6.1.3.11 行列式 ##### 7.1.3.11 行列式
```rustscript ```rustscript
函数 函数
det det
...@@ -782,8 +838,8 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -782,8 +838,8 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
结果 c(0,-16) 结果 c(0,-16)
``` ```
### 6.2 比较运算符 ### 7.2 比较运算符
#### 6.2.1 等于 #### 7.2.1 等于
```rustscript ```rustscript
运算符 运算符
== ==
...@@ -808,7 +864,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -808,7 +864,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 [[c(1,9), c(2,8), c(3,7)],[c(4,6), c(5,5), c(6,4)],[c(7,3), c(8,2), c(9,1)]]==c(4,5) 输入 [[c(1,9), c(2,8), c(3,7)],[c(4,6), c(5,5), c(6,4)],[c(7,3), c(8,2), c(9,1)]]==c(4,5)
结果 [[c(0,0), c(0,0), c(0,0)],[c(1,0), c(0,0), c(0,0)],[c(0,0), c(0,0), c(0,0)]] 结果 [[c(0,0), c(0,0), c(0,0)],[c(1,0), c(0,0), c(0,0)],[c(0,0), c(0,0), c(0,0)]]
``` ```
#### 6.2.2 不等于 #### 7.2.2 不等于
```rustscript ```rustscript
运算符 运算符
!= !=
...@@ -833,7 +889,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -833,7 +889,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 [[c(1,9), c(2,8), c(3,7)],[c(4,6), c(5,5), c(6,4)],[c(7,3), c(8,2), c(9,1)]]!=c(4,5) 输入 [[c(1,9), c(2,8), c(3,7)],[c(4,6), c(5,5), c(6,4)],[c(7,3), c(8,2), c(9,1)]]!=c(4,5)
结果 [[c(1,0), c(1,0), c(1,0)],[c(0,0), c(1,0), c(1,0)],[c(1,0), c(1,0), c(1,0)]] 结果 [[c(1,0), c(1,0), c(1,0)],[c(0,0), c(1,0), c(1,0)],[c(1,0), c(1,0), c(1,0)]]
``` ```
#### 6.2.3 小于 #### 7.2.3 小于
```rustscript ```rustscript
运算符 运算符
< <
...@@ -858,7 +914,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -858,7 +914,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 [[c(1,9), c(2,8), c(3,7)],[c(4,6), c(5,5), c(6,4)],[c(7,3), c(8,2), c(9,1)]]<c(4,5) 输入 [[c(1,9), c(2,8), c(3,7)],[c(4,6), c(5,5), c(6,4)],[c(7,3), c(8,2), c(9,1)]]<c(4,5)
结果 [[c(1,0), c(1,0), c(1,0)],[c(0,0), c(0,0), c(0,0)],[c(0,0), c(0,0), c(0,0)]] 结果 [[c(1,0), c(1,0), c(1,0)],[c(0,0), c(0,0), c(0,0)],[c(0,0), c(0,0), c(0,0)]]
``` ```
#### 6.2.4 小于等于 #### 7.2.4 小于等于
```rustscript ```rustscript
运算符 运算符
<= <=
...@@ -883,7 +939,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -883,7 +939,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 [[c(1,9), c(2,8), c(3,7)],[c(4,6), c(5,5), c(6,4)],[c(7,3), c(8,2), c(9,1)]]<=c(4,5) 输入 [[c(1,9), c(2,8), c(3,7)],[c(4,6), c(5,5), c(6,4)],[c(7,3), c(8,2), c(9,1)]]<=c(4,5)
结果 [[c(1,0), c(1,0), c(1,0)],[c(1,0), c(0,0), c(0,0)],[c(0,0), c(0,0), c(0,0)]] 结果 [[c(1,0), c(1,0), c(1,0)],[c(1,0), c(0,0), c(0,0)],[c(0,0), c(0,0), c(0,0)]]
``` ```
#### 6.2.5 大于 #### 7.2.5 大于
```rustscript ```rustscript
运算符 运算符
> >
...@@ -908,7 +964,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -908,7 +964,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 [[c(1,9), c(2,8), c(3,7)],[c(4,6), c(5,5), c(6,4)],[c(7,3), c(8,2), c(9,1)]]>c(4,5) 输入 [[c(1,9), c(2,8), c(3,7)],[c(4,6), c(5,5), c(6,4)],[c(7,3), c(8,2), c(9,1)]]>c(4,5)
结果 [[c(0,0), c(0,0), c(0,0)],[c(0,0), c(1,0), c(1,0)],[c(1,0), c(1,0), c(1,0)]] 结果 [[c(0,0), c(0,0), c(0,0)],[c(0,0), c(1,0), c(1,0)],[c(1,0), c(1,0), c(1,0)]]
``` ```
#### 6.2.6 大于等于 #### 7.2.6 大于等于
```rustscript ```rustscript
运算符 运算符
>= >=
...@@ -934,8 +990,8 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -934,8 +990,8 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
结果 [[c(0,0), c(0,0), c(0,0)],[c(1,0), c(1,0), c(1,0)],[c(1,0), c(1,0), c(1,0)]] 结果 [[c(0,0), c(0,0), c(0,0)],[c(1,0), c(1,0), c(1,0)],[c(1,0), c(1,0), c(1,0)]]
``` ```
### 6.3 逻辑运算符 ### 7.3 逻辑运算符
#### 6.3.1 逻辑与 #### 7.3.1 逻辑与
```rustscript ```rustscript
运算符 运算符
&& &&
...@@ -960,7 +1016,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -960,7 +1016,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 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(4,5) 输入 [[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(4,5)
结果 [[c(1,0), c(0,0), c(0,0)],[c(0,0), c(1,0), c(0,0)],[c(0,0), c(0,0), c(1,0)]] 结果 [[c(1,0), c(0,0), c(0,0)],[c(0,0), c(1,0), c(0,0)],[c(0,0), c(0,0), c(1,0)]]
``` ```
#### 6.3.2 逻辑或 #### 7.3.2 逻辑或
```rustscript ```rustscript
运算符 运算符
|| ||
...@@ -985,7 +1041,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -985,7 +1041,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 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(4,5) 输入 [[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(4,5)
结果 [[c(1,0), c(1,0), c(1,0)],[c(1,0), c(1,0), c(1,0)],[c(1,0), c(1,0), c(1,0)]] 结果 [[c(1,0), c(1,0), c(1,0)],[c(1,0), c(1,0), c(1,0)],[c(1,0), c(1,0), c(1,0)]]
``` ```
#### 6.3.3 逻辑非 #### 7.3.3 逻辑非
```rustscript ```rustscript
运算符 运算符
~~ ~~
...@@ -1004,8 +1060,8 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1004,8 +1060,8 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
pq = find(bus_type == PQ || ~~bus_gen_status); // 组合逻辑运算 pq = find(bus_type == PQ || ~~bus_gen_status); // 组合逻辑运算
``` ```
### 6.4 位运算符 ### 7.4 位运算符
#### 6.4.1 位与 #### 7.4.1 位与
```rustscript ```rustscript
运算符 运算符
& &
...@@ -1022,7 +1078,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1022,7 +1078,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 c(6, 8)&c(4, 5) 输入 c(6, 8)&c(4, 5)
结果 c(4,0) 结果 c(4,0)
``` ```
#### 6.4.2 位或 #### 7.4.2 位或
```rustscript ```rustscript
运算符 运算符
| |
...@@ -1039,7 +1095,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1039,7 +1095,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 c(6, 8)|c(4, 5) 输入 c(6, 8)|c(4, 5)
结果 c(6,0) 结果 c(6,0)
``` ```
#### 6.4.3 位异或 #### 7.4.3 位异或
```rustscript ```rustscript
运算符 运算符
^^ ^^
...@@ -1056,7 +1112,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1056,7 +1112,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 c(6, 8)^^c(4, 5) 输入 c(6, 8)^^c(4, 5)
结果 c(2,0) 结果 c(2,0)
``` ```
#### 6.4.4 位取反 #### 7.4.4 位取反
```rustscript ```rustscript
运算符 运算符
~ ~
...@@ -1071,7 +1127,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1071,7 +1127,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 ~c(6, 8) 输入 ~c(6, 8)
结果 c(-7,0) 结果 c(-7,0)
``` ```
#### 6.4.5 位左移 #### 7.4.5 位左移
```rustscript ```rustscript
运算符 运算符
<< <<
...@@ -1088,7 +1144,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1088,7 +1144,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 c(6, 8)<<c(2, 5) 输入 c(6, 8)<<c(2, 5)
结果 c(24,0) 结果 c(24,0)
``` ```
#### 6.4.6 位右移 #### 7.4.6 位右移
```rustscript ```rustscript
运算符 运算符
>> >>
...@@ -1105,7 +1161,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1105,7 +1161,7 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
输入 c(6, 8)>>c(2, 5) 输入 c(6, 8)>>c(2, 5)
结果 c(1,0) 结果 c(1,0)
``` ```
#### 6.4.7 位取值 #### 7.4.7 位取值
```rustscript ```rustscript
运算符 运算符
@ @
...@@ -1123,9 +1179,9 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1] ...@@ -1123,9 +1179,9 @@ c = [[1], [2], [3]]; // 列向量(二维张量), shape: [3, 1]
结果 c(0,0) 结果 c(0,0)
``` ```
## 7. 基本编程语句 ## 8. 基本编程语句
### 7.1 条件语句 ### 8.1 条件语句
```rustscript ```rustscript
//if语句 //if语句
if a ==1{ if a ==1{
...@@ -1149,7 +1205,7 @@ if a == 0{ ...@@ -1149,7 +1205,7 @@ if a == 0{
} }
``` ```
### 7.2 循环语句 ### 8.2 循环语句
```rustscript ```rustscript
//for语句 //for语句
for i in 0..10 { for i in 0..10 {
...@@ -1157,9 +1213,9 @@ for i in 0..10 { ...@@ -1157,9 +1213,9 @@ for i in 0..10 {
} }
``` ```
## 8. 函数定义 ## 9. 函数定义
### 8.1 基本函数语法 ### 9.1 基本函数语法
```rustscript ```rustscript
fn function_name(param1, param2, ...) { fn function_name(param1, param2, ...) {
// 函数体 // 函数体
...@@ -1174,7 +1230,7 @@ fn add(a, b) { ...@@ -1174,7 +1230,7 @@ fn add(a, b) {
**重要限制:RustScript函数只能返回一个变量,不支持多返回值。** **重要限制:RustScript函数只能返回一个变量,不支持多返回值。**
### 8.2 函数示例 ### 9.2 函数示例
```rustscript ```rustscript
fn make_y_bus(baseMVA, bus, branch) { fn make_y_bus(baseMVA, bus, branch) {
nb = size(bus, 0); nb = size(bus, 0);
...@@ -1189,10 +1245,10 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1189,10 +1245,10 @@ fn make_y_bus(baseMVA, bus, branch) {
} }
``` ```
## 9. 内置函数 ## 10. 内置函数
### 9.1 数学函数 ### 10.1 数学函数
### 9.1.1 根号函数 ### 10.1.1 根号函数
```rustscript ```rustscript
函数 函数
sqrt sqrt
...@@ -1210,7 +1266,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1210,7 +1266,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 sqrt(sparse([0,1,2],[1,0,1],[4.,9.,36.], 3, 2)) 输入 sqrt(sparse([0,1,2],[1,0,1],[4.,9.,36.], 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]]
``` ```
### 9.1.2 自然指数函数 ### 10.1.2 自然指数函数
```rustscript ```rustscript
函数 函数
exp exp
...@@ -1228,7 +1284,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1228,7 +1284,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 exp(sparse([0,0],[0,1],[1,2], 2, 2)) 输入 exp(sparse([0,0],[0,1],[1,2], 2, 2))
结果 [[2, 2, 0], [0, 0, e], [0, 1, e^2]] 结果 [[2, 2, 0], [0, 0, e], [0, 1, e^2]]
``` ```
### 9.1.3 自然对数函数 ### 10.1.3 自然对数函数
```rustscript ```rustscript
函数 函数
ln ln
...@@ -1246,7 +1302,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1246,7 +1302,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 ln(sparse([0,0],[0,1],[1,e], 2, 2)) 输入 ln(sparse([0,0],[0,1],[1,e], 2, 2))
结果 [[2, 2, 0], [0, 0, 0], [0, 1, 1]] 结果 [[2, 2, 0], [0, 0, 0], [0, 1, 1]]
``` ```
### 9.1.4 常用对数函数 ### 10.1.4 常用对数函数
```rustscript ```rustscript
函数 函数
log10 log10
...@@ -1264,7 +1320,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1264,7 +1320,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 log10(sparse([0,0],[0,1],[1,10], 2, 2)) 输入 log10(sparse([0,0],[0,1],[1,10], 2, 2))
结果 [[2, 2, 0], [0, 0, 0], [0, 1, 1]] 结果 [[2, 2, 0], [0, 0, 0], [0, 1, 1]]
``` ```
### 9.1.5 正弦函数 ### 10.1.5 正弦函数
```rustscript ```rustscript
函数 函数
sin sin
...@@ -1282,7 +1338,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1282,7 +1338,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 sin(sparse([0,0],[0,1],[pi/6,pi/2], 2, 2)) 输入 sin(sparse([0,0],[0,1],[pi/6,pi/2], 2, 2))
结果 [[2, 2, 0], [0, 0, 0.5], [0, 1, 1]] 结果 [[2, 2, 0], [0, 0, 0.5], [0, 1, 1]]
``` ```
### 9.1.6 余弦函数 ### 10.1.6 余弦函数
```rustscript ```rustscript
函数 函数
cos cos
...@@ -1300,7 +1356,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1300,7 +1356,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 cos(sparse([0,0],[0,1],[pi/3,pi/2], 2, 2)) 输入 cos(sparse([0,0],[0,1],[pi/3,pi/2], 2, 2))
结果 [[2, 2, 0], [0, 0, 0.5], [0, 1, 0]] 结果 [[2, 2, 0], [0, 0, 0.5], [0, 1, 0]]
``` ```
### 9.1.7 正切函数 ### 10.1.7 正切函数
```rustscript ```rustscript
函数 函数
tan tan
...@@ -1318,7 +1374,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1318,7 +1374,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 tan(sparse([0,0],[0,1],[pi/4,0.75*pi], 2, 2)) 输入 tan(sparse([0,0],[0,1],[pi/4,0.75*pi], 2, 2))
结果 [[2, 2, 0], [0, 0, 1], [0, 1, -1]] 结果 [[2, 2, 0], [0, 0, 1], [0, 1, -1]]
``` ```
### 9.1.8 反正弦函数 ### 10.1.8 反正弦函数
```rustscript ```rustscript
函数 函数
asin asin
...@@ -1336,7 +1392,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1336,7 +1392,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 asin(sparse([0,0],[0,1],[0.5,1], 2, 2)) 输入 asin(sparse([0,0],[0,1],[0.5,1], 2, 2))
结果 [[2, 2, 0], [0, 0, pi/6], [0, 1, pi/2]] 结果 [[2, 2, 0], [0, 0, pi/6], [0, 1, pi/2]]
``` ```
### 9.1.9 反余弦函数 ### 10.1.9 反余弦函数
```rustscript ```rustscript
函数 函数
acos acos
...@@ -1354,7 +1410,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1354,7 +1410,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 acos(sparse([0,0],[0,1],[0.5,0], 2, 2)) 输入 acos(sparse([0,0],[0,1],[0.5,0], 2, 2))
结果 [[2, 2, 0], [0, 0, pi/3], [0, 1, pi/2]] 结果 [[2, 2, 0], [0, 0, pi/3], [0, 1, pi/2]]
``` ```
### 9.1.10 反正切函数 ### 10.1.10 反正切函数
```rustscript ```rustscript
函数 函数
atan atan
...@@ -1372,7 +1428,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1372,7 +1428,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 atan(sparse([0,0],[0,1],[1,-1], 2, 2)) 输入 atan(sparse([0,0],[0,1],[1,-1], 2, 2))
结果 [[2, 2, 0], [0, 0, pi/4], [0, 1, -pi/4]] 结果 [[2, 2, 0], [0, 0, pi/4], [0, 1, -pi/4]]
``` ```
### 9.1.11 双曲正弦函数 ### 10.1.11 双曲正弦函数
```rustscript ```rustscript
函数 函数
sinh sinh
...@@ -1390,7 +1446,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1390,7 +1446,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 sinh(sparse([0,0],[0,1],[1,-2], 2, 2)) 输入 sinh(sparse([0,0],[0,1],[1,-2], 2, 2))
结果 [[2, 2, 0], [0, 0, 1.175201], [0, 1, -3.626860]] 结果 [[2, 2, 0], [0, 0, 1.175201], [0, 1, -3.626860]]
``` ```
### 9.1.12 双曲余弦函数 ### 10.1.12 双曲余弦函数
```rustscript ```rustscript
函数 函数
cosh cosh
...@@ -1408,7 +1464,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1408,7 +1464,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 cosh(sparse([0,0],[0,1],[1,-0.5], 2, 2)) 输入 cosh(sparse([0,0],[0,1],[1,-0.5], 2, 2))
结果 [[2, 2, 0], [0, 0, 1.543081], [0, 1, 1.127626]] 结果 [[2, 2, 0], [0, 0, 1.543081], [0, 1, 1.127626]]
``` ```
### 9.1.13 双曲正切函数 ### 10.1.13 双曲正切函数
```rustscript ```rustscript
函数 函数
tanh tanh
...@@ -1426,7 +1482,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1426,7 +1482,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 tanh(sparse([0,0],[0,1],[1,ln(3)], 2, 2)) 输入 tanh(sparse([0,0],[0,1],[1,ln(3)], 2, 2))
结果 [[2, 2, 0], [0, 0, 0.761594], [0, 1, 0.8]] 结果 [[2, 2, 0], [0, 0, 0.761594], [0, 1, 0.8]]
``` ```
### 9.1.14 双曲反正弦函数 ### 10.1.14 双曲反正弦函数
```rustscript ```rustscript
函数 函数
asinh asinh
...@@ -1444,7 +1500,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1444,7 +1500,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 asinh(sparse([0,0],[0,1],[1,-2], 2, 2)) 输入 asinh(sparse([0,0],[0,1],[1,-2], 2, 2))
结果 [[2, 2, 0], [0, 0, 0.881374], [0, 1, -1.443635]] 结果 [[2, 2, 0], [0, 0, 0.881374], [0, 1, -1.443635]]
``` ```
### 9.1.15 双曲反余弦函数 ### 10.1.15 双曲反余弦函数
```rustscript ```rustscript
函数 函数
acosh acosh
...@@ -1462,7 +1518,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1462,7 +1518,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 acosh(sparse([0,0],[0,1],[2,cosh(3)], 2, 2)) 输入 acosh(sparse([0,0],[0,1],[2,cosh(3)], 2, 2))
结果 [[2, 2, 0], [0, 0, 1.316958], [0, 1, 3]] 结果 [[2, 2, 0], [0, 0, 1.316958], [0, 1, 3]]
``` ```
### 9.1.16 双曲反正切函数 ### 10.1.16 双曲反正切函数
```rustscript ```rustscript
函数 函数
atanh atanh
...@@ -1480,7 +1536,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1480,7 +1536,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 atanh(sparse([0,0],[0,1],[0.5,-2/3], 2, 2)) 输入 atanh(sparse([0,0],[0,1],[0.5,-2/3], 2, 2))
结果 [[2, 2, 0], [0, 0, 0.549306], [0, 1, -0.804719]] 结果 [[2, 2, 0], [0, 0, 0.549306], [0, 1, -0.804719]]
``` ```
### 9.1.17 绝对值函数 ### 10.1.17 绝对值函数
```rustscript ```rustscript
函数 函数
abs abs
...@@ -1495,7 +1551,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1495,7 +1551,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 abs(sparse([0,0],[0,1],[-1,-2], 2, 2)) 输入 abs(sparse([0,0],[0,1],[-1,-2], 2, 2))
结果 [[2, 2, 0], [0, 0, 1], [0, 1, 2]] 结果 [[2, 2, 0], [0, 0, 1], [0, 1, 2]]
``` ```
### 9.1.18 符号函数 ### 10.1.18 符号函数
```rustscript ```rustscript
函数 函数
signum signum
...@@ -1513,7 +1569,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1513,7 +1569,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 signum(sparse([0,0],[0,1],[-2,3], 2, 2)) 输入 signum(sparse([0,0],[0,1],[-2,3], 2, 2))
结果 [[2, 2, 0], [0, 0, -1], [0, 1, 1]] 结果 [[2, 2, 0], [0, 0, -1], [0, 1, 1]]
``` ```
### 9.1.19 向下取整函数 ### 10.1.19 向下取整函数
```rustscript ```rustscript
函数 函数
floor floor
...@@ -1531,7 +1587,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1531,7 +1587,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 floor(sparse([0,0],[0,1],[0.6,-2.3], 2, 2)) 输入 floor(sparse([0,0],[0,1],[0.6,-2.3], 2, 2))
结果 [[2, 2, 0], [0, 0, 0], [0, 1, -3]] 结果 [[2, 2, 0], [0, 0, 0], [0, 1, -3]]
``` ```
### 9.1.20 向上取整函数 ### 10.1.20 向上取整函数
```rustscript ```rustscript
函数 函数
ceil ceil
...@@ -1549,7 +1605,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1549,7 +1605,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 ceil(sparse([0,0],[0,1],[0.6,-2.3], 2, 2)) 输入 ceil(sparse([0,0],[0,1],[0.6,-2.3], 2, 2))
结果 [[2, 2, 0], [0, 0, 1], [0, 1, -2]] 结果 [[2, 2, 0], [0, 0, 1], [0, 1, -2]]
``` ```
### 9.1.21 四舍五入函数 ### 10.1.21 四舍五入函数
```rustscript ```rustscript
函数 函数
round round
...@@ -1567,7 +1623,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1567,7 +1623,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 round(sparse([0,0],[0,1],[0.6,-2.3], 2, 2)) 输入 round(sparse([0,0],[0,1],[0.6,-2.3], 2, 2))
结果 [[2, 2, 0], [0, 0, 1], [0, 1, -2]] 结果 [[2, 2, 0], [0, 0, 1], [0, 1, -2]]
``` ```
### 9.1.22 度转弧度函数 ### 10.1.22 度转弧度函数
```rustscript ```rustscript
函数 函数
deg2rad deg2rad
...@@ -1585,7 +1641,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1585,7 +1641,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 deg2rad(sparse([0,0], [0,1], [30,45], 2, 2)) 输入 deg2rad(sparse([0,0], [0,1], [30,45], 2, 2))
结果 [[2, 2, 0], [0, 0, pi/6], [0, 1, pi/4]] 结果 [[2, 2, 0], [0, 0, pi/6], [0, 1, pi/4]]
``` ```
### 9.1.23 弧度转度函数 ### 10.1.23 弧度转度函数
```rustscript ```rustscript
函数 函数
rad2deg rad2deg
...@@ -1603,7 +1659,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1603,7 +1659,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 rad2deg(sparse([0,0], [0,1], [pi/2,pi], 2, 2)) 输入 rad2deg(sparse([0,0], [0,1], [pi/2,pi], 2, 2))
结果 [[2, 2, 0], [0, 0, 90], [0, 1, 180]] 结果 [[2, 2, 0], [0, 0, 90], [0, 1, 180]]
``` ```
### 9.1.24 复数取实部函数 ### 10.1.24 复数取实部函数
```rustscript ```rustscript
函数 函数
real real
...@@ -1618,7 +1674,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1618,7 +1674,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 real(sparse([c(0,0),c(0,0)],[c(0,0),c(1,0)],[c(1,2),c(3,4)], c(2,0), c(2,0))) 输入 real(sparse([c(0,0),c(0,0)],[c(0,0),c(1,0)],[c(1,2),c(3,4)], c(2,0), c(2,0)))
结果 [[c(2,0), c(2,0), c(0,0)], [c(0,0), c(0,0), c(1,0)], [c(0,0), c(1,0), c(3,0)]] 结果 [[c(2,0), c(2,0), c(0,0)], [c(0,0), c(0,0), c(1,0)], [c(0,0), c(1,0), c(3,0)]]
``` ```
### 9.1.25 复数取虚部函数 ### 10.1.25 复数取虚部函数
```rustscript ```rustscript
函数 函数
imag imag
...@@ -1633,7 +1689,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1633,7 +1689,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 imag(sparse([c(0,0),c(0,0)],[c(0,0),c(1,0)],[c(1,2),c(3,4)], c(2,0), c(2,0))) 输入 imag(sparse([c(0,0),c(0,0)],[c(0,0),c(1,0)],[c(1,2),c(3,4)], c(2,0), c(2,0)))
结果 [[c(2,0), c(2,0), c(0,0)], [c(0,0), c(0,0), c(2,0)], [c(0,0), c(1,0), c(4,0)]] 结果 [[c(2,0), c(2,0), c(0,0)], [c(0,0), c(0,0), c(2,0)], [c(0,0), c(1,0), c(4,0)]]
``` ```
### 9.1.26 共轭复数函数 ### 10.1.26 共轭复数函数
```rustscript ```rustscript
函数 函数
conj conj
...@@ -1648,7 +1704,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1648,7 +1704,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 conj(sparse([c(0,0),c(0,0)],[c(0,0),c(1,0)],[c(1,2),c(3,4)], c(2,0), c(2,0))) 输入 conj(sparse([c(0,0),c(0,0)],[c(0,0),c(1,0)],[c(1,2),c(3,4)], c(2,0), c(2,0)))
结果 [[c(2,0), c(2,0), c(0,0)], [c(0,0), c(0,0), c(1,-2)], [c(0,0), c(1,0), c(3,-4)]] 结果 [[c(2,0), c(2,0), c(0,0)], [c(0,0), c(0,0), c(1,-2)], [c(0,0), c(1,0), c(3,-4)]]
``` ```
### 9.1.27 复数模函数 ### 10.1.27 复数模函数
```rustscript ```rustscript
函数 函数
abs abs
...@@ -1663,7 +1719,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1663,7 +1719,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 abs(sparse([c(0,0),c(0,0)],[c(0,0),c(1,0)],[c(3,4),c(5,12)], c(2,0), c(2,0))) 输入 abs(sparse([c(0,0),c(0,0)],[c(0,0),c(1,0)],[c(3,4),c(5,12)], c(2,0), c(2,0)))
结果 [[c(2,0), c(2,0), c(0,0)], [c(0,0), c(0,0), c(5,0)], [c(0,0), c(1,0), c(13,0)]] 结果 [[c(2,0), c(2,0), c(0,0)], [c(0,0), c(0,0), c(5,0)], [c(0,0), c(1,0), c(13,0)]]
``` ```
### 9.1.28 复数辐角函数 ### 10.1.28 复数辐角函数
```rustscript ```rustscript
函数 函数
arg arg
...@@ -1679,9 +1735,9 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1679,9 +1735,9 @@ fn make_y_bus(baseMVA, bus, branch) {
结果 [[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)]]
``` ```
### 9.2 矩阵函数 ### 10.2 矩阵函数
### 9.2.1 线性代数 ### 10.2.1 线性代数
### 9.2.1.1 行列式 ### 10.2.1.1 行列式
```rustscript ```rustscript
函数 函数
det det
...@@ -1696,7 +1752,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1696,7 +1752,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 det([[c(1,2),c(3,4)],[c(5,6),c(7,8)]]) 输入 det([[c(1,2),c(3,4)],[c(5,6),c(7,8)]])
结果 c(0,-16) 结果 c(0,-16)
``` ```
### 9.2.1.2 逆矩阵 ### 10.2.1.2 逆矩阵
```rustscript ```rustscript
运算符 运算符
^(-1) ^(-1)
...@@ -1708,7 +1764,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1708,7 +1764,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 [[1,2],[3,4]]^(-1) 输入 [[1,2],[3,4]]^(-1)
结果 [[-2, 1], [1.5, -0.5]] 结果 [[-2, 1], [1.5, -0.5]]
``` ```
### 9.2.1.3 矩阵的秩 ### 10.2.1.3 矩阵的秩
```rustscript ```rustscript
运算符 运算符
rank rank
...@@ -1720,7 +1776,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1720,7 +1776,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 rank([[1,2,3],[4,5,6]]) 输入 rank([[1,2,3],[4,5,6]])
结果 2 结果 2
``` ```
### 9.2.1.4 矩阵的迹 ### 10.2.1.4 矩阵的迹
```rustscript ```rustscript
运算符 运算符
trace trace
...@@ -1735,7 +1791,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1735,7 +1791,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 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)
``` ```
### 9.2.1.5 特征值 ### 10.2.1.5 特征值
```rustscript ```rustscript
运算符 运算符
eig eig
...@@ -1758,7 +1814,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1758,7 +1814,7 @@ fn make_y_bus(baseMVA, bus, branch) {
结果 [[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)]]
``` ```
### 9.2.1.6 奇异值 ### 10.2.1.6 奇异值
```rustscript ```rustscript
运算符 运算符
svd svd
...@@ -1770,7 +1826,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1770,7 +1826,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 输入
结果 结果
``` ```
### 9.2.1.7 1范数 ### 10.2.1.7 1范数
```rustscript ```rustscript
函数 函数
norm_l1 norm_l1
...@@ -1791,7 +1847,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1791,7 +1847,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 norm_l1(sparse([0,0,1,1], [0,1,0,1], [1,-2,3,-4], 2, 2)) 输入 norm_l1(sparse([0,0,1,1], [0,1,0,1], [1,-2,3,-4], 2, 2))
结果 10 结果 10
``` ```
### 9.2.1.8 max范数 ### 10.2.1.8 max范数
```rustscript ```rustscript
函数 函数
norm_l1 norm_l1
...@@ -1812,7 +1868,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1812,7 +1868,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 norm_max(sparse([0,0,1,1], [0,1,0,1], [1,-2,3,-4], 2, 2)) 输入 norm_max(sparse([0,0,1,1], [0,1,0,1], [1,-2,3,-4], 2, 2))
结果 4 结果 4
``` ```
### 9.2.1.9 2范数 ### 10.2.1.9 2范数
```rustscript ```rustscript
函数 函数
norm_l2 norm_l2
...@@ -1833,7 +1889,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1833,7 +1889,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 norm_l2(sparse([0,0,1], [0,1,0], [1,2,-2], 2, 2)) 输入 norm_l2(sparse([0,0,1], [0,1,0], [1,2,-2], 2, 2))
结果 3 结果 3
``` ```
### 9.2.1.10 线性方程组求解 ### 10.2.1.10 线性方程组求解
```rustscript ```rustscript
函数 函数
linsolve linsolve
...@@ -1853,7 +1909,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1853,7 +1909,7 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 linsolve(sparse([0,0,1,1], [0,1,0,1], [2,1,1,-3], 2, 2), [[5], [-1]]) 输入 linsolve(sparse([0,0,1,1], [0,1,0,1], [2,1,1,-3], 2, 2), [[5], [-1]])
结果 [[2], [1]] 结果 [[2], [1]]
``` ```
### 9.2.1.11 线性方程组系数矩阵转置求解 ### 10.2.1.11 线性方程组系数矩阵转置求解
```rustscript ```rustscript
函数 函数
linsolve_t linsolve_t
...@@ -1873,12 +1929,12 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -1873,12 +1929,12 @@ fn make_y_bus(baseMVA, bus, branch) {
输入 linsolve_t([[c(-12, 42), c(-20, 98)], [c(-16, 62), c(-24, 150)]], [[c(-548, 232)], [c(-1236, 664)]]) 输入 linsolve_t([[c(-12, 42), c(-20, 98)], [c(-16, 62), c(-24, 150)]], [[c(-548, 232)], [c(-1236, 664)]])
结果 [[c(1,2)], [c(5,6)]] 结果 [[c(1,2)], [c(5,6)]]
``` ```
### 9.2.1.12 ### 10.2.1.12
```rustscript ```rustscript
qr(A), chol(A)cond(A) qr(A), chol(A)cond(A)
``` ```
### 9.2.2 矩阵操作 ### 10.2.2 矩阵操作
### 9.2.2.1 转置 ### 10.2.2.1 转置
```rustscript ```rustscript
函数 函数
transpose transpose
...@@ -1896,7 +1952,7 @@ qr(A), chol(A)cond(A) ...@@ -1896,7 +1952,7 @@ qr(A), chol(A)cond(A)
输入 transpose(sparse([0,1,2], [1,0,1], [2, 3, 6], 3, 2)) 输入 transpose(sparse([0,1,2], [1,0,1], [2, 3, 6], 3, 2))
结果 [[2, 3, 0], [1, 0, 2], [0, 1, 3], [1, 2, 6]] 结果 [[2, 3, 0], [1, 0, 2], [0, 1, 3], [1, 2, 6]]
``` ```
### 9.2.2.2 共轭转置 ### 10.2.2.2 共轭转置
```rustscript ```rustscript
函数 函数
ctranspose ctranspose
...@@ -1911,7 +1967,7 @@ qr(A), chol(A)cond(A) ...@@ -1911,7 +1967,7 @@ qr(A), chol(A)cond(A)
输入 ctranspose(sparse([0,1,2], [1,0,1], [2, 3, 6], 3, 2)) 输入 ctranspose(sparse([0,1,2], [1,0,1], [2, 3, 6], 3, 2))
结果 [[2, 3, 0], [1, 0, -2], [0, 1, -3], [1, 2, -6]] 结果 [[2, 3, 0], [1, 0, -2], [0, 1, -3], [1, 2, -6]]
``` ```
### 9.2.2.3 对角矩阵 ### 10.2.2.3 对角矩阵
```rustscript ```rustscript
运算符 运算符
diag diag
...@@ -1929,15 +1985,15 @@ qr(A), chol(A)cond(A) ...@@ -1929,15 +1985,15 @@ qr(A), chol(A)cond(A)
输入 diag(sparse([0, 1, 2], [1, 1, 2], [2, 3, 6], 3, 3)) 输入 diag(sparse([0, 1, 2], [1, 1, 2], [2, 3, 6], 3, 3))
结果 [[3, 3, 0], [1, 1, 3], [2, 2, 6]] 结果 [[3, 3, 0], [1, 1, 3], [2, 2, 6]]
``` ```
### 9.2.2.4 ### 10.2.2.4
```rustscript ```rustscript
triu(A), tril(A) triu(A), tril(A)
reshape(A, m, n), repmat(A, m, n) reshape(A, m, n), repmat(A, m, n)
``` ```
### 9.3 张量操作函数 ### 10.3 张量操作函数
#### 9.3.1 形状和尺寸 #### 10.3.1 形状和尺寸
#### 9.3.1.1 获取指定维度大小 #### 10.3.1.1 获取指定维度大小
```rustscript ```rustscript
函数 函数
size size
...@@ -1965,7 +2021,7 @@ reshape(A, m, n), repmat(A, m, n) ...@@ -1965,7 +2021,7 @@ reshape(A, m, n), repmat(A, m, n)
输入 size([[1], [2], [3]], 1) 输入 size([[1], [2], [3]], 1)
结果 1 结果 1
``` ```
#### 9.3.1.2 获取元素总数 #### 10.3.1.2 获取元素总数
```rustscript ```rustscript
函数 函数
length length
...@@ -1983,7 +2039,7 @@ reshape(A, m, n), repmat(A, m, n) ...@@ -1983,7 +2039,7 @@ reshape(A, m, n), repmat(A, m, n)
输入 length(sparse([0,0], [0,1], [1,-2], 2, 2)) 输入 length(sparse([0,0], [0,1], [1,-2], 2, 2))
结果 2 结果 2
``` ```
#### 9.3.1.3 获取维度数 #### 10.3.1.3 获取维度数
```rustscript ```rustscript
函数 函数
ndim ndim
...@@ -2001,13 +2057,13 @@ reshape(A, m, n), repmat(A, m, n) ...@@ -2001,13 +2057,13 @@ reshape(A, m, n), repmat(A, m, n)
输入 ndim([[1], [2], [3]]) 输入 ndim([[1], [2], [3]])
结果 2 结果 2
``` ```
#### 9.3.1.4 元素个数 #### 10.3.1.4 元素个数
```rustscript ```rustscript
numel(tensor) // 元素个数 numel(tensor) // 元素个数
``` ```
#### 9.3.2 张量切片和操作 #### 10.3.2 张量切片和操作
#### 9.3.2.1 张量切片操作 #### 10.3.2.1 张量切片操作
```rustscript ```rustscript
函数 函数
slice slice
...@@ -2049,7 +2105,7 @@ numel(tensor) // 元素个数 ...@@ -2049,7 +2105,7 @@ numel(tensor) // 元素个数
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列(一维张量)
``` ```
#### 9.3.2.2 设置张量元素值 #### 10.3.2.2 设置张量元素值
```rustscript ```rustscript
函数 函数
set set
...@@ -2072,7 +2128,7 @@ numel(tensor) // 元素个数 ...@@ -2072,7 +2128,7 @@ numel(tensor) // 元素个数
输入 set(sparse([0,0],[0,1],[1,2], 2, 2), [1, 3], [3, 4]) 输入 set(sparse([0,0],[0,1],[1,2], 2, 2), [1, 3], [3, 4])
结果 [[2, 2, 0], [0, 0, 1], [0, 1, 3], [1, 1, 4]] 结果 [[2, 2, 0], [0, 0, 1], [0, 1, 3], [1, 1, 4]]
``` ```
#### 9.3.2.3 张量元素累加赋值 (相当于 +=) #### 10.3.2.3 张量元素累加赋值 (相当于 +=)
```rustscript ```rustscript
函数 函数
set2 set2
...@@ -2096,8 +2152,8 @@ numel(tensor) // 元素个数 ...@@ -2096,8 +2152,8 @@ numel(tensor) // 元素个数
结果 [[2, 2, 0], [0, 0, 1], [0, 1, 5], [1, 1, 4]] 结果 [[2, 2, 0], [0, 0, 1], [0, 1, 5], [1, 1, 4]]
``` ```
#### 9.3.3 张量拼接 #### 10.3.3 张量拼接
#### 9.3.3.1 横向拼接张量 #### 10.3.3.1 横向拼接张量
```rustscript ```rustscript
函数 函数
horzcat horzcat
...@@ -2116,7 +2172,7 @@ numel(tensor) // 元素个数 ...@@ -2116,7 +2172,7 @@ numel(tensor) // 元素个数
结果 [[c(1.1, -1.1), c(2.2, -2.2), c(3.3, -3.3), c(7, -7), c(8, -8)], 结果 [[c(1.1, -1.1), c(2.2, -2.2), c(3.3, -3.3), c(7, -7), c(8, -8)],
[c(4.4, -4.4), c(5.5, -5.5), c(6.6, -6.6), c(9, -9), c(10, -10)]] [c(4.4, -4.4), c(5.5, -5.5), c(6.6, -6.6), c(9, -9), c(10, -10)]]
``` ```
#### 9.3.3.2 纵向拼接张量 #### 10.3.3.2 纵向拼接张量
```rustscript ```rustscript
函数 函数
vertcat vertcat
...@@ -2136,18 +2192,18 @@ numel(tensor) // 元素个数 ...@@ -2136,18 +2192,18 @@ numel(tensor) // 元素个数
[c(7, -7), c(8, -8), c(9, -9)], [c(10, -10), c(11, -11), c(12, -12)]] [c(7, -7), c(8, -8), c(9, -9)], [c(10, -10), c(11, -11), c(12, -12)]]
``` ```
#### 9.3.4 序列生成 #### 10.3.4 序列生成
#### 9.3.4.1 生成序列 [start, start+1, ..., end-1] (前闭后开) #### 10.3.4.1 生成序列 [start, start+1, ..., end-1] (前闭后开)
```rustscript ```rustscript
range(start, end) range(start, end)
``` ```
#### 9.3.4.2 在start和end间生成num个等间距点 #### 10.3.4.2 在start和end间生成num个等间距点
```rustscript ```rustscript
linspace(start, end, num) linspace(start, end, num)
``` ```
#### 9.3.5 统计函数 #### 10.3.5 统计函数
#### 9.3.5.1 按维度求和 #### 10.3.5.1 按维度求和
```rustscript ```rustscript
函数 函数
sum sum
...@@ -2179,7 +2235,7 @@ linspace(start, end, num) ...@@ -2179,7 +2235,7 @@ linspace(start, end, num)
输入 sum(sparse([0,0,1,1],[0,1,0,1],[1,2,3,4], 2, 2), 0) 输入 sum(sparse([0,0,1,1],[0,1,0,1],[1,2,3,4], 2, 2), 0)
结果 [3, 7] 结果 [3, 7]
``` ```
#### 9.3.5.2 所有元素求和 #### 10.3.5.2 所有元素求和
```rustscript ```rustscript
函数 函数
sum_all sum_all
...@@ -2197,7 +2253,7 @@ linspace(start, end, num) ...@@ -2197,7 +2253,7 @@ linspace(start, end, num)
输入 sum_all(sparse([0,0],[0,1],[1,2], 2, 2)) 输入 sum_all(sparse([0,0],[0,1],[1,2], 2, 2))
结果 3 结果 3
``` ```
#### 9.3.5.3 平均值 #### 10.3.5.3 平均值
```rustscript ```rustscript
函数 函数
mean mean
...@@ -2215,15 +2271,15 @@ linspace(start, end, num) ...@@ -2215,15 +2271,15 @@ linspace(start, end, num)
输入 mean(sparse([0,0],[0,1],[1,2], 2, 2)) 输入 mean(sparse([0,0],[0,1],[1,2], 2, 2))
结果 1.5 结果 1.5
``` ```
#### 9.3.5.4 标准差 #### 10.3.5.4 标准差
```rustscript ```rustscript
std(tensor) std(tensor)
``` ```
#### 9.3.5.5 方差 #### 10.3.5.5 方差
```rustscript ```rustscript
var(tensor) var(tensor)
``` ```
#### 9.3.5.6 最大值 #### 10.3.5.6 最大值
```rustscript ```rustscript
函数 函数
max max
...@@ -2246,7 +2302,7 @@ var(tensor) ...@@ -2246,7 +2302,7 @@ var(tensor)
输入 max(sparse([0,0,1,1],[0,1,0,1],[1,2,3,4], 2, 2)) 输入 max(sparse([0,0,1,1],[0,1,0,1],[1,2,3,4], 2, 2))
结果 4 结果 4
``` ```
#### 9.3.5.7 最小值 #### 10.3.5.7 最小值
```rustscript ```rustscript
函数 函数
min min
...@@ -2269,14 +2325,14 @@ var(tensor) ...@@ -2269,14 +2325,14 @@ var(tensor)
输入 min(sparse([0,0,1,1],[0,1,0,1],[1,2,3,4], 2, 2)) 输入 min(sparse([0,0,1,1],[0,1,0,1],[1,2,3,4], 2, 2))
结果 1 结果 1
``` ```
#### 9.3.5.8 中位数 #### 10.3.5.8 中位数
```rustscript ```rustscript
median(tensor) median(tensor)
//其中,max()和min()可以如下用法:max(a, [0],1),min(a, [0],1),参数和slice函数的定义相同 //其中,max()和min()可以如下用法:max(a, [0],1),min(a, [0],1),参数和slice函数的定义相同
``` ```
#### 9.3.6 查找函数 #### 10.3.6 查找函数
#### 9.3.6.1 查找非零元素 #### 10.3.6.1 查找非零元素
```rustscript ```rustscript
函数 函数
find find
...@@ -2294,7 +2350,7 @@ median(tensor) ...@@ -2294,7 +2350,7 @@ median(tensor)
输入 find(sparse([0,0],[0,1],[1,-2], 2, 2)) 输入 find(sparse([0,0],[0,1],[1,-2], 2, 2))
结果 [[2, 2, 0], [0, 0, 1], [0, 1, -2]] 结果 [[2, 2, 0], [0, 0, 1], [0, 1, -2]]
``` ```
#### 9.3.6.2 查找最接近指定值的元素 #### 10.3.6.2 查找最接近指定值的元素
```rustscript ```rustscript
函数 函数
find_nearest find_nearest
...@@ -2313,7 +2369,7 @@ median(tensor) ...@@ -2313,7 +2369,7 @@ median(tensor)
输入 find_nearest(sparse([0,0],[0,1],[1,-2], 2, 2), -1) 输入 find_nearest(sparse([0,0],[0,1],[1,-2], 2, 2), -1)
结果 -2 结果 -2
``` ```
#### 9.3.6.3 查找最接近指定值的元素位置 #### 10.3.6.3 查找最接近指定值的元素位置
```rustscript ```rustscript
函数 函数
find_nearest_pos find_nearest_pos
...@@ -2333,7 +2389,7 @@ median(tensor) ...@@ -2333,7 +2389,7 @@ median(tensor)
输入 find_nearest_pos(sparse([0,0],[0,1],[1,-2], 2, 2), -1) 输入 find_nearest_pos(sparse([0,0],[0,1],[1,-2], 2, 2), -1)
结果 [0, 1] 结果 [0, 1]
``` ```
#### 9.3.6.4 检测指定维度是否存在非零元素 #### 10.3.6.4 检测指定维度是否存在非零元素
```rustscript ```rustscript
函数 函数
any any
...@@ -2361,7 +2417,7 @@ median(tensor) ...@@ -2361,7 +2417,7 @@ median(tensor)
输入 any(sparse([0, 1, 2], [1, 0, 1], [2, 3, 6], 3, 3)) 输入 any(sparse([0, 1, 2], [1, 0, 1], [2, 3, 6], 3, 3))
结果 [[3, 1, 0], [0, 0, 1], [1, 0, 1], [2, 0, 1]] 结果 [[3, 1, 0], [0, 0, 1], [1, 0, 1], [2, 0, 1]]
``` ```
#### 9.3.6.5 检测张量是否为空 #### 10.3.6.5 检测张量是否为空
```rustscript ```rustscript
函数 函数
is_empty is_empty
...@@ -2379,7 +2435,7 @@ median(tensor) ...@@ -2379,7 +2435,7 @@ median(tensor)
输入 is_empty(sparse([],[],[], 2, 2)) 输入 is_empty(sparse([],[],[], 2, 2))
结果 1 结果 1
``` ```
#### 9.3.6.6 检测是否无穷数 #### 10.3.6.6 检测是否无穷数
```rustscript ```rustscript
函数 函数
is_inf is_inf
...@@ -2397,13 +2453,13 @@ median(tensor) ...@@ -2397,13 +2453,13 @@ median(tensor)
输入 is_inf(sparse([0,0,1], [0,1,0], [0,INF,NEG_INF], 2, 2)) 输入 is_inf(sparse([0,0,1], [0,1,0], [0,INF,NEG_INF], 2, 2))
结果 [[2, 2, 0], [0, 0, 0], [0, 1, 1], [1, 0, 1]] 结果 [[2, 2, 0], [0, 0, 0], [0, 1, 1], [1, 0, 1]]
``` ```
#### 9.3.6.7 检测所有元素是否非零 #### 10.3.6.7 检测所有元素是否非零
```rustscript ```rustscript
all(tensor) all(tensor)
``` ```
#### 9.3.7 获取多个元素 #### 10.3.7 获取多个元素
#### 9.3.7.1 根据索引获取多个元素(可不连续) #### 10.3.7.1 根据索引获取多个元素(可不连续)
```rustscript ```rustscript
函数 函数
get_multi get_multi
...@@ -2420,9 +2476,9 @@ all(tensor) ...@@ -2420,9 +2476,9 @@ all(tensor)
结果 [c(3, 4), c(5, 6)] 结果 [c(3, 4), c(5, 6)]
``` ```
### 9.4 稀疏矩阵 ### 10.4 稀疏矩阵
### 9.4.1 创建稀疏矩阵 ### 10.4.1 创建稀疏矩阵
### 9.4.1.1 由三元组创建稀疏矩阵 ### 10.4.1.1 由三元组创建稀疏矩阵
```rustscript ```rustscript
函数 函数
sparse sparse
...@@ -2439,8 +2495,8 @@ all(tensor) ...@@ -2439,8 +2495,8 @@ all(tensor)
输入 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]]
``` ```
### 9.4.2 稀疏矩阵操作 ### 10.4.2 稀疏矩阵操作
### 9.4.2.1 转为稠密矩阵 ### 10.4.2.1 转为稠密矩阵
```rustscript ```rustscript
函数 函数
full full
...@@ -2452,16 +2508,16 @@ all(tensor) ...@@ -2452,16 +2508,16 @@ all(tensor)
输入 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]]
``` ```
#### 9.4.2.2 非零元素个数 #### 10.4.2.2 非零元素个数
```rustscript ```rustscript
nnz_count = nnz(sparse_mat); nnz_count = nnz(sparse_mat);
``` ```
#### 9.4.2.3 显示稀疏模式 #### 10.4.2.3 显示稀疏模式
```rustscript ```rustscript
spy(sparse_mat); spy(sparse_mat);
``` ```
### 9.5 张量操作详细示例 ### 10.5 张量操作详细示例
```rustscript ```rustscript
// 实际使用示例(来自make_y_bus函数) // 实际使用示例(来自make_y_bus函数)
nb = size(bus, 0); // 获取母线数量 nb = size(bus, 0); // 获取母线数量
...@@ -2486,8 +2542,8 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t), ...@@ -2486,8 +2542,8 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t),
vertcat(Yff,Yft,Ytf,Ytt), nb, nb); vertcat(Yff,Yft,Ytf,Ytt), nb, nb);
``` ```
## 10. 方程组和优化模型求解 ## 11. 方程组和优化模型求解
### 10.1 线性方程组求解 ### 11.1 线性方程组求解
```rustscript ```rustscript
函数 函数
sp_linsolve sp_linsolve
...@@ -2510,7 +2566,7 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t), ...@@ -2510,7 +2566,7 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t),
结果 [-28.79, 4, 17.89, 0] 结果 [-28.79, 4, 17.89, 0]
``` ```
### 10.2 混合整数线性规划 ### 11.2 混合整数线性规划
```rustscript ```rustscript
函数 函数
intlinprog intlinprog
...@@ -2532,7 +2588,7 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t), ...@@ -2532,7 +2588,7 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t),
结果 [1, 0.2, 0, 1, 1, 16.6, 0] 结果 [1, 0.2, 0, 1, 1, 16.6, 0]
``` ```
### 10.3 非线性规划 ### 11.3 非线性规划
```rustscript ```rustscript
函数 函数
fmincon fmincon
...@@ -2559,9 +2615,9 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t), ...@@ -2559,9 +2615,9 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t),
结果 [0.9999999900103392, 4.742999643578124, 3.8211499789476977, 1.379408293213419, 17.014017140221718, 0] 结果 [0.9999999900103392, 4.742999643578124, 3.8211499789476977, 1.379408293213419, 17.014017140221718, 0]
``` ```
## 11. 数据结构示例 ## 12. 数据结构示例
### 11.1 电力系统数据(基于 case14) ### 12.1 电力系统数据(基于 case14)
```rustscript ```rustscript
// 系统基准功率 // 系统基准功率
baseMVA = 100; baseMVA = 100;
...@@ -2589,9 +2645,9 @@ branch = [ ...@@ -2589,9 +2645,9 @@ branch = [
]; ];
``` ```
## 12. 模块系统 ## 13. 模块系统
### 12.1 模块导入 ### 13.1 模块导入
```rustscript ```rustscript
// 导入整个模块 // 导入整个模块
import power_flow; import power_flow;
...@@ -2603,7 +2659,7 @@ import {newton_pf, fast_decoupled_pf} from power_flow; ...@@ -2603,7 +2659,7 @@ import {newton_pf, fast_decoupled_pf} from power_flow;
import newton_pf as newton from power_flow; import newton_pf as newton from power_flow;
``` ```
### 12.2 模块定义 ### 13.2 模块定义
```rustscript ```rustscript
// 模块文件: power_flow.rs // 模块文件: power_flow.rs
export fn newton_pf(baseMVA, bus, gen, branch) { export fn newton_pf(baseMVA, bus, gen, branch) {
...@@ -2616,9 +2672,9 @@ export fn fast_decoupled_pf(baseMVA, bus, gen, branch) { ...@@ -2616,9 +2672,9 @@ export fn fast_decoupled_pf(baseMVA, bus, gen, branch) {
``` ```
## 13. 与MATLAB的对比 ## 14. 与MATLAB的对比
### 13.1 主要差异 ### 14.1 主要差异
| 特性 | MATLAB | RustScript | 说明 | | 特性 | MATLAB | RustScript | 说明 |
|------|---------------------|-----------------------|------| |------|---------------------|-----------------------|------|
...@@ -2631,7 +2687,7 @@ export fn fast_decoupled_pf(baseMVA, bus, gen, branch) { ...@@ -2631,7 +2687,7 @@ export fn fast_decoupled_pf(baseMVA, bus, gen, branch) {
| 逻辑运算 | `&`, `\|`, `~` | `&&`, `\|\|`, `~~` | 逻辑运算符不同 | | 逻辑运算 | `&`, `\|`, `~` | `&&`, `\|\|`, `~~` | 逻辑运算符不同 |
| 结构体 | `struct` | 无结构体,使用张量和变量组织 | RustScript没有结构体概念 | | 结构体 | `struct` | 无结构体,使用张量和变量组织 | RustScript没有结构体概念 |
### 13.2 索引转换详解 ### 14.2 索引转换详解
**最重要的差异:MATLAB使用1基索引,RustScript使用0基索引** **最重要的差异:MATLAB使用1基索引,RustScript使用0基索引**
...@@ -2651,7 +2707,7 @@ slice(bus, [0], [i-1,i]) // 第i列所有行(需要减1) ...@@ -2651,7 +2707,7 @@ slice(bus, [0], [i-1,i]) // 第i列所有行(需要减1)
range(0, n) // 生成 [0, 1, 2, ..., n-1] (前闭后开) range(0, n) // 生成 [0, 1, 2, ..., n-1] (前闭后开)
``` ```
### 13.3 转换示例对比 ### 14.3 转换示例对比
**MATLAB到RustScript的典型转换:** **MATLAB到RustScript的典型转换:**
...@@ -2688,7 +2744,7 @@ fn make_y_bus(baseMVA, bus, branch) { ...@@ -2688,7 +2744,7 @@ fn make_y_bus(baseMVA, bus, branch) {
} }
``` ```
### 13.4 转换器的索引处理策略 ### 14.4 转换器的索引处理策略
在MATLAB到RustScript转换过程中,转换器需要特别处理索引: 在MATLAB到RustScript转换过程中,转换器需要特别处理索引:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论