直接聊干货。电力系统这个领域,不管是本科毕业设计、研究生课题,还是刚入行做电网分析的工程师,潮流计算基本是绕不开的第一道门槛。而MATLAB搭配MATPOWER,是这个圈子里最省力气的组合,没有之一。今天我就用MATPOWER 8.0b版本,配合它自带的case9算例,把整套流程从环境安装、数据解读、代码实战到踩坑排查,完整过一遍。这篇东西的目标只有一个:就算你对电力系统分析只记得“有功无功”这两个词,照着操作也能跑出结果,并且明白每一步在干什么。
MATPOWER 8.0b本质是一个开源工具包,专门用来做电力系统的潮流计算、最优潮流和市场仿真,使用起来最大的优势在于:数据和模型都是结构化的矩阵形式,不用手写节点导纳矩阵,不用自己迭代求解牛顿-拉夫逊过程,你只需要把网络参数按它的格式填进去,一条命令就能拿到潮流结果。这也是为什么很多学术论文里的算例都是用MATPOWER跑出来的。
1. 为什么电力系统分析绕不开潮流计算
1.1 潮流计算到底在算什么
用大白话说,潮流计算干的事情就是:给定电网的拓扑结构、发电厂出力、负荷大小,算出每一条线路上的功率流动、每一个节点的电压幅值和相角。
为什么要算这个?因为你要知道电网运行是否安全。比如某个节点电压是不是太低,某条线路是不是过载了,发电机的无功出力是不是快顶到上限了。这些信息全部来自潮流计算结果。做电力系统规划、运行、调度、继电保护整定,全部都以潮流计算作为基础。
手推潮流的时候,教材里的经典步骤是用牛顿-拉夫逊法迭代求解非线性方程组,要构建导纳矩阵、计算雅可比矩阵,过程繁琐且容易出错。当年我读书时用C语言自己写过一套潮流程序,遇到一个bug调试了整整一周,后来发现是稀疏矩阵存储的索引错了一位。MATPOWER把这些全部封装好了,你只要关心数据和结果,不用操心底层的数值求解细节。
1.2 MATPOWER 8.0b版本有哪些变化
8.0b是相对较新的版本,相比更早的7.x、6.x系列,主要的改进集中在几个方面:
- 对MATLAB新版本(尤其是R2022b以后)的兼容性更好,不再出现老的版本里那些警告刷屏、函数已废弃的情况。
- opf(最优潮流)模块的性能优化,内点法求解器的收敛性明显改善。
- 对数据格式做了标准化整理,case文件里的字段命名更加一致。
- 内置的算例库增多,除了经典的case9、case30、case118,还加入了部分欧洲电网模型。
如果你之前用的是老版本,我建议直接换8.0b,因为数据格式基本上向后兼容,老脚本改一两个函数名就能跑,没必要守着一个旧版本。
1.3 这篇文章适合谁来读
在开始之前,先定位一下目标读者。如果你是下面这几类人,这篇文章就是写给你的:
- 第一次接触MATPOWER,不知道怎么安装、不知道代码怎么写。
- 会运行case9,但看不懂输出结果,想搞清楚每一行是什么意思。
- 想修改MATPOWER自带算例,换自己的网络参数,但总是报错。
已经有潮流计算基础、做过深度二次开发的老手可以直接跳过前两章,从第三节开始看数据格式,第四节看代码实战。
2. 环境准备:MATLAB与MATPOWER 8.0b的安装细节
2.1 MATLAB版本选择和安装注意事项
MATPOWER 8.0b对MATLAB版本有硬性要求,官方文档写的是要求R2022b及以上版本。我自己试过在R2021a上强行运行,会出现个别函数无法调用的问题,因为新的版本里用了一些老版本不支持的语法特性。所以如果你还没装MATLAB,直接装新版本,发行版选择不重要,但版本号尽量往高了选。
安装MATLAB的时候有几个实用的建议,都是踩过坑之后总结的:
- 安装路径不要带空格和中文。默认的安装路径是
C:\Program Files\MATLAB\R2024a,这个路径本身带空格,实际上MATLAB自己是能处理的,但如果你后续要用一些需要编译的工具箱,带有空格的路径容易引发奇奇怪怪的编译错误。建议装到D:\MATLAB\R2024a这类简短的路径下。 - 海外账号注册时注意许可证类型。学生用学校提供的校园许可证最方便,装完激活就能用。如果你是个人学习,可以用试用版,但试用版过期后工具箱会被锁定,MATPOWER这种基于纯MATLAB代码的工具包不受影响,但其他依赖工具箱的功能就无法使用了。
- 安装时选择"仅安装MATLAB"还是"安装全部工具箱":建议全装,因为后续跑深度学习、优化算法时,你不知道哪个时刻就会用到某个工具箱。MATPOWER本身只需要基础的MATLAB环境,不需要额外工具箱,但如果是为了毕业论文做算法对比,优化工具箱和并行计算工具箱迟早用得上。
2.2 MATPOWER 8.0b的下载和安装步骤
MATPOWER的官方网站是matpower.org,在Downloads页面能找到最新版本。8.0b是压缩包形式,解压后得到一个名为matpower8.0b的文件夹。安装流程非常简单,只需要两步:
第一步,把解压后的文件夹放到一个专门存放MATLAB工具包的目录下。比如我习惯放在D:\MATLAB\toolbox\matpower8.0b,这样方便统一管理。
第二步,在MATLAB里添加路径。这一步很多人容易忽略,导致报错'runpf' 未定义,原因就是MATLAB根本找不到这个函数。添加路径的方式有两种,看个人习惯:
% 方式一:使用addpath命令(一次性,关闭MATLAB后失效) addpath(genpath('D:\MATLAB\toolbox\matpower8.0b')); % 方式二:使用pathtool图形界面 pathtool % 在弹出的窗口中点击"Add with Subfolders...",选择matpower8.0b文件夹,然后点击Save我们看下这两种方式的区别:addpath命令适合临时使用,比如你只是今天想跑一下,但下次启动MATLAB时路径就不在了。用pathtool保存路径之后,MATLAB会把路径保存到pathdef.m里,以后每次启动自动加载。
如果你的MATLAB因为权限问题无法保存路径(这在学校机器上很常见),可以改用startup.m文件,在MATLAB启动时自动执行添加路径命令。创建方式是在MATLAB当前工作目录下新建startup.m,内容就写一行:
addpath(genpath('D:\MATLAB\toolbox\matpower8.0b'));把startup.m放在MATLAB的启动目录(可以在matlabrc.m的同级目录,或者直接在预设里设置初始工作文件夹),每次启动就会自动加载。
2.3 快速验证安装是否成功
添加路径之后,在命令行窗口输入:
which runpf如果返回一个完整的路径,例如D:\MATLAB\toolbox\matpower8.0b\runpf.m,说明安装成功。如果返回'runpf' not found,说明路径没有配置好。
我个人的习惯是再做一个更全面的验证,直接跑到一个最小的算例上看效果。在MATLAB命令行里输入:
mpc = case9; results = runpf(mpc);如果能够返回一个包含success字段为1的结构体,说明安装完全正常。这里case9是MATPOWER自带的9节点系统,也是我们今天实战的主角。
注意:如果运行
case9时报错提示要添加MATPOWER/opt、MATPOWER/lib等子目录,说明你用的是addpath('D:\MATLAB\toolbox\matpower8.0b')而没有加genpath。MATPOWER的函数分散在多个子目录中,必须要用addpath(genpath(...))把包含子文件夹在内的完整路径加进去,否则后续会有一堆找不到文件的报错。
3. 读懂case9:从数据格式看电力系统建模
3.1 节点类型:PQ节点、PV节点和平衡节点的区分
拿到case9数据之前,先补一个非常重要的基础概念:节点类型。因为MATPOWER的数据文件里有任何一处节点类型标错,计算结果就会完全不对。
电力系统里节点分三类:
- PQ节点(负荷节点):已知有功功率P和无功功率Q,待求电压幅值V和相角。通常负荷都由这个类型表示。
- PV节点(发电机节点):已知有功功率P和电压幅值V,待求无功功率Q和相角。发电机汇集到电网的母线一般用这个类型。
- 平衡节点(参考节点,也叫Vθ节点、Slack节点):电压幅值和相角都已给定,待求有功和无功。整个系统里必须有且只有一个平衡节点,用来承担全网的有功不平衡量。
用一个生活化的类比来解释:电网的功率平衡就像一桌人AA制买单。PQ节点是只点了菜的食客,PV节点是规定了"我出多少钱"的食客,而平衡节点就是最后结账的人,大家点多了它垫钱,点少了它把钱领回来。所以潮流计算必须有平衡节点,否则整个系统的有功功率不平衡量没人兜底。
3.2 case9数据文件逐行拆解
现在可以在MATLAB里执行以下命令,把case9的数据结构完整打印出来:
mpc = case9; mpcmpc是一个结构体(struct),包含以下核心字段:
mpc.version % 版本标识 mpc.baseMVA % 基准功率,单位MVA,case9中是100 MVA mpc.bus % 节点数据矩阵 mpc.gen % 发电机数据矩阵 mpc.branch % 线路数据矩阵这三个矩阵是MATPOWER的绝对核心,相当于把一张电网的连接关系、发电能力和负荷分布全部塞进了几个二维数组里。每个矩阵的行代表一条记录,列代表一个属性,列的意义由MATPOWER手册里的bus、gen、branch数据格式定义。
bus矩阵的关键列(以下列号索引从1开始):
| 列号 | 字段 | 含义 | 在case9中的实际值 |
|---|---|---|---|
| 1 | BUS_I | 节点编号 | 1~9 |
| 2 | BUS_TYPE | 节点类型:1=PQ,2=PV,3=平衡节点 | 节点1是3,节点2、3是2,其余是1 |
| 3 | PD | 有功负荷,单位MW | 各节点不同 |
| 4 | QD | 无功负荷,单位MVar | 各节点不同 |
| 8 | Vm | 电压幅值初始值,单位p.u. | 通常为1.0 |
| 9 | Va | 相角初始值,单位度 | 通常为0 |
gen矩阵的关键列:
| 列号 | 字段 | 含义 |
|---|---|---|
| 1 | GEN_BUS | 发电机接入的节点编号 |
| 2 | PG | 有功出力,单位MW |
| 3 | QG | 无功出力,单位MVar |
| 4 | QMAX | 无功出力上限 |
| 5 | QMIN | 无功出力下限 |
| 6 | VG | 机端电压设定值,单位p.u. |
| 9 | PMAX | 有功出力上限 |
| 10 | PMIN | 有功出力下限 |
branch矩阵的关键列:
| 列号 | 字段 | 含义 |
|---|---|---|
| 1 | F_BUS | 线路起始节点 |
| 2 | T_BUS | 线路终止节点 |
| 3 | BR_R | 电阻R,单位p.u. |
| 4 | BR_X | 电抗X,单位p.u. |
| 5 | BR_B | 对地电纳B,单位p.u. |
| 6 | RATE_A | 长期运行容量限制(传输容量上限,MVA) |
| 9 | BR_STATUS | 线路投运状态:1=投入,0=退出 |
当你执行mpc = case9之后,在MATLAB工作区双击mpc,或者在命令行输入mpc.bus、mpc.gen,就能看到这些矩阵的完整数据。case9对应的是一个经典的三发电机、三负荷、九节点系统,结构简洁,但涵盖了流计算的所有关键现象,包括环网潮流、电压降落、过载风险等,非常适合初学者做算例分析。
3.3 标幺值:为什么数据里全是小数
刚接触MATPOWER的新手通常会有一个疑问:为什么线路的电阻电抗都是零点几的小数?这不是实际值,而是标幺值(per-unit value)。
标幺值的概念可以这样理解:你不用直接说"这条输电线路的阻抗是5欧姆",而是把它与基准值的比值作为一个无量纲数。系统基准功率baseMVA是100 MVA,电压基准值通常是各电压等级的标准电压,比如220kV或110kV。把阻抗除以这个基准下的阻抗值,就得到了标幺阻抗。
标幺值的优势在于,它把不同电压等级的设备统一到了一个可比的数量级上,数值一般在0.001到1之间,既方便计算也方便观察数据是否异常。例如,branch矩阵里如果出现某个X值超过3,几乎可以肯定是输入错误,正常输电线路的标幺电抗不会这么大。
4. case9实战:从数据导入到结果解读全流程
4.1 完整代码:直接复制就能运行
先在命令行里用mpc = case9把算例加载进来,然后调用runpf函数。下面是一段完整的、带注释的MATLAB代码,包含运行前检查和结果后的展示:
%% 清空工作区 clear; clc; %% 1. 加载case9算例 mpc = case9; %% 2. 运行潮流计算 results = runpf(mpc); %% 3. 检查是否收敛 if results.success == 1 disp('潮流计算成功收敛!'); else disp('计算未收敛,请检查输入数据!'); end %% 4. 查看节点电压结果 disp('========= 节点电压结果 ========='); bus_result = results.bus; % 提取节点编号、电压幅值、相角 bus_id = bus_result(:, 1); Vm = bus_result(:, 8); % 电压幅值(标幺值) Va = bus_result(:, 9); % 相角(度) % 生成表格显示 T = table(bus_id, Vm, Va, 'VariableNames', {'Bus', 'Vm_pu', 'Va_deg'}); disp(T); %% 5. 查看线路潮流和负载率 disp('========= 线路潮流结果 ========='); branch_result = results.branch; from_bus = branch_result(:, 1); to_bus = branch_result(:, 2); % 线路有功功率(从节点流出) Pf = branch_result(:, 14); % 线路有功功率(注入节点) Pt = branch_result(:, 16); % 线路传输容量 RateA = branch_result(:, 6); loading = abs(Pf) ./ RateA * 100; % 负载率,单位% T2 = table(from_bus, to_bus, Pf, Pt, RateA, loading, ... 'VariableNames', {'From', 'To', 'Pf_MW', 'Pt_MW', 'RateA_MVA', 'Loading_percent'}); disp(T2); %% 6. 查看发电机出力 disp('========= 发电机出力结果 ========='); gen_result = results.gen; gen_bus = gen_result(:, 1); Pg = gen_result(:, 2); Qg = gen_result(:, 3); T3 = table(gen_bus, Pg, Qg, 'VariableNames', {'GenBus', 'PG_MW', 'QG_MVar'}); disp(T3);这段代码运行之后就能完成一次完整的潮流计算,并按表格形式展示结果。runpf返回的results结构体比输入的多了一些字段,其中最重要的就是bus、gen、branch三个矩阵,它们的列数比输入时更长,多了潮流计算得到的各项数值。
4.2 运行结果怎么看
在MATLAB中运行以上代码,输出大致如下(数值经过四舍五入,不同版本可能略有差异):
节点电压结果中,你会看到所有节点的电压幅值在1.0 p.u.附近,相角从负值到正值变化。特别观察节点1(平衡节点),它的电压幅值和相角是预先设定好的,计算前后不会变。节点5、7等负荷较大的节点,电压幅值会略低于1.0,这就是潮流计算算出来的"正常电压降落"。
发电机的出力结果中,平衡节点(节点1)的出力会自然平衡全网功率差额。比如其他发电机出力不够时,平衡节点自动多发一些有功,这是潮流计算中最直观的现象。
线路负载率这一列是非常实用的数据。如果某条线路的Loading_percent超过100%,意味着这条线路过载了,在实际电力系统中属于需要重点关注的紧急状态。我每次拿到一个新电网模型,第一步就是跑一次基态潮流,然后看所有线路的负载率分布,对电网的薄弱环节先建立一个直观印象。
4.3 输出数据列的含义补充
MATPOWER计算结果中的branch矩阵、gen矩阵比输入数据多出很多列,新手容易对着一个数字发呆,不知道是什么意思。这里把关键列再补充说明一下:
% branch矩阵输出多出的列 % 列14:从端有功潮流(mW,从f_bus流向t_bus的功率) % 列15:从端无功潮流(MVar) % 列16:到端有功潮流(mW,从t_bus角度看到的功率) % 列17:到端无功潮流(MVar) % 列18:线路损耗(有功,MW),等于Pf+Pt的绝对值 % 列19:线路无功损耗(MVar)注意一个细节:Pf和Pt并不相等,因为线路本身有阻抗,会有功率损耗。Pf + Pt(一正一负)的绝对值就是线损。当初我做报告时用Pf也就是线路一侧的功率去和另一侧对比,结果发现功率"不守恒",后来才意识到中间有损耗,这也是新手最容易误解的点之一。
5. 在case9基础上做自定义修改:把算例改成你自己的电网
5.1 修改负荷数据
实际应用中没有哪个电网会和case9长得一模一样,所以学会修改数据文件是必经之路。举一个最常见的场景:把节点5的负荷增加50MW,并增加20MVar无功负荷。
mpc = case9; % 找到节点5所在的行 idx = find(mpc.bus(:, 1) == 5); % 修改有功负荷PD(列3)和无功负荷QD(列4) mpc.bus(idx, 3) = mpc.bus(idx, 3) + 50; % 有功+50MW mpc.bus(idx, 4) = mpc.bus(idx, 4) + 20; % 无功+20MVar % 重新计算潮流 results = runpf(mpc);这样修改后重新运行潮流,你会发现节点5的电压幅值下降了,相关线路的潮流增大。这演示了一个典型的负荷增长场景,也是做"N-1校验"或者"负荷预测影响分析"实验的基础操作。
5.2 修改发电机数据
发电机的修改场景同样常见,比如限制某台发电机的出力上限,观察系统其他发电机的响应:
mpc = case9; % 找到连接在节点2上的发电机 idx = find(mpc.gen(:, 1) == 2); % 把有功出力上限从原值改为150MW mpc.gen(idx, 9) = 150; % 重新计算潮流 results = runpf(mpc);改动发电机出力上限后,再对比修改前后的结果,你会发现原本由节点2发电机承担的功率转移到了其他发电机上,特别是平衡节点会多承担一部分功率。这个操作在分析"发电机检修时系统如何重新平衡"时很有用。
5.3 新增节点和线路的正确姿势
如果不想在现有系统上改,而是想扩展一个节点,操作就复杂一些,需要注意几个关键点:
第一,新节点的编号不能与现有节点冲突,case9的节点编号是1到9,新增节点编为10。
第二,新节点的类型根据实际需求设置。如果它连接发电机,通常是PV节点;如果没有发电机,一般是PQ节点。
第三,必须在branch矩阵里增加至少一条连接新节点与现有网络的支路,否则新节点成为孤岛节点,潮流计算直接不收敛。
mpc = case9; % 新增一个PQ节点,编号10,负荷50MW+20MVar new_bus = [10, 1, 50, 20, 0, 0, 1, 1.0, 0, 240, 1, 1.1, 0.9]; mpc.bus = [mpc.bus; new_bus]; % 新增一条线路:连接节点5和节点10 new_branch = [5, 10, 0.01, 0.05, 0.01, 100, 100, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; mpc.branch = [mpc.branch; new_branch]; % 重新计算潮流 results = runpf(mpc);新增线路的那一行数据,列的含义要和原branch矩阵对应上。最稳妥的方法是把原来的数据先打印出来,复制一行,然后修改列1、列2为新的首末端节点,修改列3~5为估算的阻抗参数。如果估算的阻抗值偏差过大导致潮流不收敛,可以将线路长度设短一些、阻抗设小一些,先保证能够收敛,再逐步调整到实际值。
注意:新节点的电压基准值(bus矩阵第10列的基值选择)也要合理。如果新节点接入的是220kV系统,就按220kV来设置基准;如果电压等级不对,计算出来的电压幅值和实际相去甚远,结果无法用于工程分析。
6. 常见问题排查与避坑指南
6.1 安装和路径相关的问题
问题一:'runpf' 未定义或Undefined function or variable 'runpf'
这是最常见的报错,原因是MATLAB找不到MATPOWER的文件路径。排查方法:
help matpower如果提示matpower not found,说明路径没有添加成功。重新执行addpath(genpath('你的matpower路径')),再用savepath保存一下。如果保存失败,检查当前用户有没有对MATLAB安装目录的写权限,或者改用startup.m自动加载方案。
问题二:Error using case9或Unrecognized function or variable 'case9'
原因和上面一样,同样是路径问题。注意case9是MATPOWER自带的一个脚本文件,只有路径正确才能被调用。此外要注意,MATPOWER安装后不要自己去修改内部文件名或者给case9.m加后缀,那样会导致函数无法加载。
6.2 潮流计算不收敛怎么排查
runpf返回的results.success为0时,说明潮流不收敛。新手遇到这个问题的第一反应是代码写错了,其实绝大多数情况是数据本身有问题。按优先级排查以下三个方面:
先看节点数据是否合理。负荷为负值(表示注入功率而非消耗功率)是否是有意设置?电压幅值初始值是否在合理范围内(0.8~1.2 p.u.之间)?如果初始电压设置得太离谱,牛顿-拉夫逊法可能在第一步就发散。
再看发电机参数。发电机出力上下限是否写反了?QMAX是否小于QMIN?如果发电机的无功范围不包含潮流计算所需的运行点,迭代就无法收敛。特别是PV节点电压设定值,如果与系统其他部分不匹配,也会导致不收敛。
最后看线路参数。重点检查R、X是否为零或负数。电阻R为0在理论上可以接受(理想线路),但电抗X为0或负数在绝大多数场景下都不合理。线路的RATE_A如果设置得太小,潮流计算结果虽然能算出来,但对负载率的判定会失真。
解决不收敛问题的一个实用技巧:先把所有负荷减小到原来的五分之一,看能否收敛。如果能收敛,再逐步恢复负荷值,定位是哪个节点的负荷导致发散。
6.3 数据修改时最常见的低级错误
修改数据矩阵时,最大的坑就是列号对错。MATPOWER的矩阵列号非常多,比如bus矩阵有13列,gen矩阵有21列,branch矩阵有21列,看起来一堆数字,很容易改错位置。
一个我自己踩过很多次的坑:把branch矩阵的BR_STATUS列(第9列)当成阻抗参数改了,结果线路被设置为退出运行状态,潮流结果完全变样。所以每次修改数据之前,建议先运行mpc.bus(:, 3) = ...之前,用命令行打印一下当前的矩阵列头和部分行,确认你要改的列号。
另一个容易出错的点:矩阵拼接时类型不一致。比如你新增一行数据时,如果列数不够,MATLAB会自动补0,但补0后某些参数可能变成非法值。比如BR_STATUS补0就意味着线路退出运行,这可能是你根本没有预料到的。拼完数据后,可以验证一下新行是否和原有行的列数一致:
size(mpc.bus, 2) % 应该等于13 size(mpc.gen, 2) % 应该等于21 size(mpc.branch, 2) % 应该等于13或21,取决于版本如果列数对不上,立即回头检查新增数据。
问题三:Matrix index is out of range这类越界报错
通常发生在使用find(mpc.bus(:, 1) == 15)而case9里根本没有节点15的时候。find返回空数组,后续索引访问就报错。建议在查找节点前先判断是否为空:
idx = find(mpc.bus(:, 1) == 15); if isempty(idx) error('节点15不存在,请检查节点编号!'); end6.4 一个提升效率的核心技巧:批量处理多个算例
实际工作中不会只跑一次潮流,而是可能需要分析"负荷从80%升到120%的每一种情况"。这时候不要手动一次次改数据重跑,直接写循环:
clear; clc; % 基础数据 mpc_base = case9; % 记录不同负荷水平下的节点5电压 load_ratio = 0.8:0.05:1.2; V5_results = zeros(length(load_ratio), 1); for i = 1:length(load_ratio) mpc = mpc_base; % 修改节点5负荷 idx = find(mpc.bus(:, 1) == 5); mpc.bus(idx, 3) = mpc_base.bus(idx, 3) * load_ratio(i); mpc.bus(idx, 4) = mpc_base.bus(idx, 4) * load_ratio(i); % 计算潮流 results = runpf(mpc); % 提取节点5电压幅值 V5_results(i) = results.bus(idx, 8); end % 绘制负荷-电压曲线 plot(load_ratio, V5_results, 'b-o', 'LineWidth', 1.5); xlabel('负荷比例'); ylabel('节点5电压幅值 (p.u.)'); title('节点5电压随负荷变化曲线'); grid on;这个脚本展示了一个标准的灵敏度分析流程,也是很多毕业论文里的核心图表来源。以后读研、工作后做电网分析,你会发现"批量计算"是最高频的需求。
7. 写在最后:MATPOWER之外的一点点建议
文章的核心内容到这里就全部讲完了。最后分享一点我自己在使用MATPOWER过程中的体会。
刚开始接触这个工具时,我也觉得这些命令和矩阵格式很抽象,总想直接找一个图形界面或者封装好的GUI去点击操作。后来深度使用才发现,MATPOWER的价值恰恰就在这些结构清晰的矩阵数据里——因为电网的本质可以被抽象成节点、支路、发电、负荷四个基本要素,矩阵格式让自动化批量计算和二次开发变得极其方便。与其追求一个看起来友好的界面,不如花半小时把这些矩阵的列含义记住,以后的效率会翻倍提升。
如果你后续需要做最优潮流,把runpf换成runopf就能跑通基础流程;需要做潮流计算的可视化,MATPOWER也提供了plot相关的工具函数,可以直接在MATLAB里把电网图形画出来。在官网的文档里还有一个更复杂的case39、case118系统,学完case9后可以自己试着跑一下更大的算例,体会一下大规模系统的潮流计算性能和收敛特性。
我的建议是:先老老实实把case9的每一步跑到烂熟,再去做扩展。案例不在多,把一个系统吃透,所有潮流计算的概念就全部落地了。