Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
sparrowzz
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
sgool
sparrowzz
Commits
bfe07d45
Commit
bfe07d45
authored
Dec 12, 2025
by
xuchengsi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
RustScript手册补充线性方程组求解、MILP、NLP说明
parent
813bfcce
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
93 行增加
和
18 行删除
+93
-18
data/tetests/milp_test.txt
+4
-2
data/tetests/spsolvex_test.txt
+5
-5
rustscript/RustScript手册.md
+84
-11
没有找到文件。
data/tetests/milp_test.txt
查看文件 @
bfe07d45
// 目标函数
// 目标函数
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;
g = 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;
r = intlinprog(max(`f`), [`g`], [1,1,1,1,1], [x1,`x2`,`x3`,`x4`,`x5`]);
g2 = `x2` <= 0.2;
r = intlinprog(max(`f`), [`g1`,`g2`], [1,3,1,1,1], [`x1`,`x2`,`x3`,`x4`,`x5`]);
return r;
return r;
\ No newline at end of file
data/tetests/spsolvex_test.txt
查看文件 @
bfe07d45
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;
b = [0,0,0];
b = [
1
0,0,0];
r = sp_linsolve([`g1`,`g2`,
g3], b, [0,0,0
], [`x1`,x2,x3]);
r = sp_linsolve([`g1`,`g2`,
`g3`], b, [
], [`x1`,x2,x3]);
r2 = sp_linsolve([`g1`,g2,g3], [], [], [`x1`,x2,x3]);
r2 = sp_linsolve([`g1`,g2,g3], [], [], [`x1`,x2,x3]);
return r-r2;
return r;
\ No newline at end of file
\ No newline at end of file
rustscript/RustScript手册.md
查看文件 @
bfe07d45
# Rus
tScript 语言规范
# Rus
tScript 语言规范
...
@@ -2486,9 +2486,82 @@ Ybus = sparse(horzcat(f,f,t,t), horzcat(f,t,f,t),
...
@@ -2486,9 +2486,82 @@ 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. 数据结构示例
## 10. 方程组和优化模型求解
### 10.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;
b = [10,0,0];
r = sp_linsolve([`
g1
`,`
g2
`,`
g3
`], b, [], [`
x1
`,x2,x3]);
结果 [-28.79, 4, 17.89, 0]
```
### 10.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;
r = intlinprog(max(
`f`
),
[
`g1`,`g2`
]
,
[
1,3,1,1,1
]
,
[
`x1`,`x2`,`x3`,`x4`,`x5`
]
);
结果
[
1, 0.2, 0, 1, 1, 16.6, 0
]
```
### 10.3 非线性规划
```
rustscript
函数
fmincon
语法
fmincon(obj,
[
st
]
, st_lower, st_upper, var_lower, var_upper,
[
var_name
]
);
输入参数
obj - 目标函数表达式
st - 约束条件表达式,多个约束条件之间用","分隔
st_lower - 约束下限向量
st_upper - 约束上限向量
var_lower - 变量下限向量
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;
x_lower = [1, 1, 1, 1];
x_upper = [5, 5, 5, 5];
r = fmincon(min(`
f
`), [`
g1
`, g2], [25, 40], [2e19, 40], x_lower,x_upper,[`
x1
`,x2,x3,x4]);
结果 [0.9999999900103392, 4.742999643578124, 3.8211499789476977, 1.379408293213419, 17.014017140221718, 0]
```
## 11. 数据结构示例
### 1
0
.1 电力系统数据(基于 case14)
### 1
1
.1 电力系统数据(基于 case14)
```rustscript
```rustscript
// 系统基准功率
// 系统基准功率
baseMVA = 100;
baseMVA = 100;
...
@@ -2516,9 +2589,9 @@ branch = [
...
@@ -2516,9 +2589,9 @@ branch = [
];
];
```
```
## 1
1
. 模块系统
## 1
2
. 模块系统
### 1
1
.1 模块导入
### 1
2
.1 模块导入
```rustscript
```rustscript
// 导入整个模块
// 导入整个模块
import power_flow;
import power_flow;
...
@@ -2530,7 +2603,7 @@ import {newton_pf, fast_decoupled_pf} from power_flow;
...
@@ -2530,7 +2603,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;
```
```
### 1
1
.2 模块定义
### 1
2
.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) {
...
@@ -2543,9 +2616,9 @@ export fn fast_decoupled_pf(baseMVA, bus, gen, branch) {
...
@@ -2543,9 +2616,9 @@ export fn fast_decoupled_pf(baseMVA, bus, gen, branch) {
```
```
## 1
2
. 与MATLAB的对比
## 1
3
. 与MATLAB的对比
### 1
2
.1 主要差异
### 1
3
.1 主要差异
| 特性 | MATLAB | RustScript | 说明 |
| 特性 | MATLAB | RustScript | 说明 |
|------|---------------------|-----------------------|------|
|------|---------------------|-----------------------|------|
...
@@ -2558,7 +2631,7 @@ export fn fast_decoupled_pf(baseMVA, bus, gen, branch) {
...
@@ -2558,7 +2631,7 @@ export fn fast_decoupled_pf(baseMVA, bus, gen, branch) {
| 逻辑运算 | `&`, `\|`, `~` | `&&`, `\|\|`, `~~` | 逻辑运算符不同 |
| 逻辑运算 | `&`, `\|`, `~` | `&&`, `\|\|`, `~~` | 逻辑运算符不同 |
| 结构体 | `struct` | 无结构体,使用张量和变量组织 | RustScript没有结构体概念 |
| 结构体 | `struct` | 无结构体,使用张量和变量组织 | RustScript没有结构体概念 |
### 1
2
.2 索引转换详解
### 1
3
.2 索引转换详解
**最重要的差异:MATLAB使用1基索引,RustScript使用0基索引**
**最重要的差异:MATLAB使用1基索引,RustScript使用0基索引**
...
@@ -2578,7 +2651,7 @@ slice(bus, [0], [i-1,i]) // 第i列所有行(需要减1)
...
@@ -2578,7 +2651,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] (前闭后开)
```
```
### 1
2
.3 转换示例对比
### 1
3
.3 转换示例对比
**MATLAB到RustScript的典型转换:**
**MATLAB到RustScript的典型转换:**
...
@@ -2615,7 +2688,7 @@ fn make_y_bus(baseMVA, bus, branch) {
...
@@ -2615,7 +2688,7 @@ fn make_y_bus(baseMVA, bus, branch) {
}
}
```
```
### 1
2
.4 转换器的索引处理策略
### 1
3
.4 转换器的索引处理策略
在MATLAB到RustScript转换过程中,转换器需要特别处理索引:
在MATLAB到RustScript转换过程中,转换器需要特别处理索引:
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论