Commit 12daaf1c by Lian-runzhe Committed by GitHub

Update RustScript手册.md

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