资讯动态

交直流混联电网潮流计算:统一迭代法原理与Matlab实践

发布时间:2026/10/16 5:27:22 来源:尧图企业网站定制
做含直流输电的混联电网规划时我吃过不少亏。手头的交流潮流程序跑得再熟练碰到直流通道就抓瞎——换流站嘴上说着“我是负荷”实际它的功率完全受直流网络方程制约交流侧母线电压变化也会反过来拉扯直流电压。后来我耐住性子在Matlab里把交流潮流和直流潮流放进同一个牛顿-拉夫逊框架里求解也就是常说的统一迭代法才算是把这类问题彻底理顺。这篇文章就把我踩过的坑、推导过的公式、调试过的代码从头到尾捋一遍。内容围绕交直流潮流计算中的统一迭代法展开重点解答三个问题为什么非要“统一迭代”而不是两套程序轮流跑VSC换流站模型怎么化成可计算的方程组雅可比矩阵怎么扩展、程序怎么搭。适合正在做微电网规划、直流配网分析、或研究多端直流系统的同学参考也适合已经会传统交流潮流计算、想往混联电网方向迈进的人。1. 先把模型摆清楚交直流系统到底怎么耦合的1.1 为什么潮流计算要“交直流一起算”先看一个最直观的场景一条双端直流输电线路接在两个交流母线之间其中一侧换流站工作于整流状态另一侧工作于逆变状态。整流站从交流电网吸收有功功率送到直流线路逆变站再把这部分功率注入对端交流电网。看起来就是一个“搬运功率”的过程但这里头有一个绕不开的约束——直流线路上的输送功率不是随意定的它由直流电压、线路电阻和两端换流站的控制方式共同决定。如果只算交流侧把换流站简单当成恒定功率的桩子那就无法反映直流侧电压变化对输送功率的影响。更麻烦的是多端直流系统。三个以上换流站挂在同一条直流网络上某个站突然改变功率指令直流电压就会整体浮动其他站的输送功率随之改变。这些耦合关系不是靠交流潮流里一个“平衡节点”能包住的必须把直流网络方程一起纳入求解。用生活化的话说交流系统像城市主干路网直流线路像一条高架快速通道进入通道的匝道口有信号灯换流站控制通道内部的限速和拥堵状态直流电压和网络约束反过来决定入口能放多少车进——你没法把匝道信号灯和快速路流量当成两个独立问题分别拍板。还有个常见误区是认为“把换流站当成PQ节点就能近似”。这个前提在换流站不参与调压、直流系统很坚强时勉强凑合但在弱交流系统、孤岛馈入、直流电压波动剧烈时完全失真。统一迭代法本质上就是把交流系统的节点功率平衡方程、换流站自身的接口方程、直流网络的电压电流方程全部联立在同一轮迭代里同时修正所有变量。没有主次之分也就不存在交替迭代时“两边来回踢皮球”的收敛性问题。1.2 统一迭代法和交替迭代法的关键差别做交直流潮流有两个技术路线。一个是交替迭代法先假设直流侧有一定功率把它折算成交流侧的PQ或PV节点跑交流潮流交流潮流算完得到换流站母线电压再代入直流方程反推出新的直流功率再回头跑交流潮流……如此循环直到收敛。另一个就是本文讲的统一迭代法把交流节点的相角和电压幅值、直流节点的电压以及换流站的控制量调制比、移相角等全部放进同一个待求向量把交流功率失配量、直流功率失配量、控制偏差量全部放进同一个失配向量用扩展后的牛顿法同步求解。两种方法各有各的脾气我列个表对比下对比项交替迭代法统一迭代法编程难度较低可直接复用现有交流潮流程序较高需要改雅可比矩阵结构和失配量定义收敛速度一般需要多次外循环交直流耦合强时迭代次数大幅增加单层牛顿迭代20~50次左右即可收敛视算例不收敛风险交直流边界条件反复振荡时容易锯齿形发散初值不合理时可能直接发散到NaN但一旦收敛就很稳扩展性加一个新设备就要重写外循环逻辑在同一牛顿框架里加设备方程套路化内存与实现省内存程序结构简单雅可比矩阵变大但稀疏处理后开销可控实际项目中我见过不少人用交替迭代法处理弱耦合的直流网络问题不大但一旦换流站数量多、直流线路长、或者交流系统短路容量低交替法就会疯狂摇摆。统一迭代法虽然前期工程量多一些可它把“交流系统对直流电压的依赖”和“直流电压对交流注入的约束”放在同一个数学空间里收敛性和精度都更有保障。2. 统一迭代法的数学内核方程、变量与雅可比扩展2.1 交流侧牛顿法的底子得先打牢统一迭代法不是把交流潮流推倒重来而是在传统牛顿-拉夫逊法的基础上“扩编”。交流部分的待求变量仍然是各个PQ节点的电压幅值U和所有非平衡节点的相角θ平衡节点的θ固定为0PV节点没有无功方程。节点功率平衡方程要写成失配量形式。对于某个交流节点i如果有常规发电机和负荷其注入功率满足ΔP_i P_g,i - P_load,i - U_i * Σ_j U_j * (G_ij * cosθ_ij B_ij * sinθ_ij) 0ΔQ_i Q_g,i - Q_load,i - U_i * Σ_j U_j * (G_ij * sinθ_ij - B_ij * cosθ_ij) 0其中θ_ij θ_i - θ_jG_ij和B_ij是节点导纳矩阵的实部虚部。雅可比矩阵的子块H、N、M、L分别对应ΔP对θ、ΔP对U、ΔQ对θ、ΔQ对U的偏导。这些是基础内容不多说关键是下一步怎么在这个框架里塞进直流部分。2.2 VSC换流站模型怎么化为可计算的方程交直流潮流里最常见的换流器是电压源换流器VSC工程上多用SPWM或SVPWM调制。VSC的交流侧输出电压基波幅值与直流侧电压的关系是U_c (m * U_dc) / (√2)其中m是调制比可以理解成换流器“开口大小”。U_dc是直流极对地电压或极间电压模型定义时要统一。换流器通过一个连接电抗X_c通常还带一个隔离变压器漏抗挂到交流母线上。于是换流器注入交流母线的复功率可以仿照两节点间的潮流公式写成P_c (U_s * U_c / X_c) * sinδQ_c (U_s² - U_s * U_c * cosδ) / X_c这里的δ是换流器输出电压相量相对交流母线电压相量的相位差也就是移相角。P_c为正时表示功率从交流侧流入换流器整流工况Q_c为正时表示换流器吸收无功或按定义反向但计算中一定要固定正方向否则雅可比符号就要翻车这个坑后面细说。再看直流侧。换流器从交流侧吸收的有功去掉换流器损耗后变成直流功率输出。忽略损耗时P_dc U_dc * I_dc P_c多数教学算例里先把换流器损耗设为0方便验证程序工程模拟时再加一个等效损耗电阻串入直流支路。直流网络本身用节点电压方程描述对于直流节点kP_dc,k U_dc,k * Σ_m Y_dc,km * U_dc,m其中Y_dc是直流网络的节点导纳矩阵元素就是直流线路电阻倒数拼接出来的。这样VSC和直流网络就通过P_c P_dcU_c与m、U_dc的关系全部挂在一起了。2.3 统一迭代法里的变量与方程怎么编排用统一迭代法时待求向量可以设为x [θ_ac; U_ac; U_dc; δ; m]也就是把交流相角、交流电压幅值、直流节点电压、各VSC的移相角、调制比全都“焊”成一个长向量。对应的失配函数也要同步扩展F(x) [ΔP_ac; ΔQ_ac; ΔP_dc; ΔControl]其中ΔP_ac、ΔQ_ac是交流节点功率失配量注意接入换流站的交流节点要在注入功率里包含P_c、Q_c或对应负荷符号处理ΔP_dc是直流节点有功失配量ΔControl是一组控制方程失配量用来强制换流站执行指定控制策略。控制方程具体怎么写取决于运行方式。比如定有功、定无功模式ΔP_control P_c - P_refΔQ_control Q_c - Q_ref定直流电压、定无功模式ΔUdc_control U_dc - Udc_refΔQ_control Q_c - Q_ref定有功、定交流电压模式ΔP_control P_c - P_refΔUac_control U_s - U_s_ref在两端直流系统里通常一个站定直流电压承担直流侧功率不平衡另一个站定有功整流侧按计划输送功率。多端直流则需要至少一个站定直流电压其他站定有功或定交流电压。这些方程直接以失配量为0的形式加入牛顿方程和传统潮流“刻模板”的方式完全一样——控制目标越复杂多加几行ΔControl即可。2.4 雅可比矩阵怎么扩展这是统一迭代法最核心的工程细节。传统雅可比矩阵只包含交流量对交流量的偏导交直流版本要在四个方向上做扩展左上角交流失配对交流变量的偏导。这部分在原交流雅可比基础上凡是有换流站接入的节点需要叠加换流站功率对交流电压U_s、相角θ的偏导右上角交流失配对直流变量U_dc、δ、m的偏导。比如交流节点有功失配对U_dc的偏导通过P_c (U_s * m * U_dc / √2 / X_c) * sinδ这个复合函数求导得到左下角直流失配和交流控制偏差对交流变量的偏导。直流网络方程本身只含U_dc看似对U_ac无偏导但换流站直流侧功率等于P_c而P_c是U_s的函数所以这一块不为零右下角直流失配和控制偏差对直流变量的偏导。包括直流节点方程对U_dc的偏导、控制方程对δ和m的偏导。一句话总结雅可比矩阵不是简单地把“原交流雅可比”和“原直流雅可比”做成对角块拼接而是靠换流站功率方程把四个象限填满耦合偏导。这才是统一迭代法名字里“统一”二字的由来。实际操作中解析偏导公式需要倍加细心。比如P_c对U_s的偏导(U_c / X_c) * sinδP_c对m的偏导(U_s * U_dc / (√2 * X_c)) * sinδP_c对δ的偏导(U_s * U_c / X_c) * cosδ。这些公式看着简单但符号、系数、单位制对不齐就是翻车现场。我调试时习惯先用有限差分把数值结果算出来逐个函数对比解析偏导确认无误后再用解析表达式组装效率能高不少。3. Matlab实现过程代码架构与关键步骤3.1 数据准备与算例设定我建议先别一上来就搞几十节点的工程大网而是先用一个小算例验证算法。比如做一个三节点交流系统接双端直流的结构交流侧两个换流站接入点节点2和节点3节点1做交流平衡节点直流侧一条线路连接两个VSC。换流站参数简化处理连接电抗X_c 0.1 p.u.直流线路电阻R_dc 0.02 p.u.直流额定电压U_dc_base 1.0 p.u.。控制方式设为一端定有功P_ref 0.5 p.u. 定无功Q_ref 0.1 p.u.另一端定直流电压U_dc 1.0 p.u. 定无功Q_ref 0.05 p.u.。变量初始化上有个技巧先用纯交流潮流把节点2、3的电压幅值求出来作为统一迭代的交流初值δ初值给10度到15度左右千万别给0度否则有功偏差对δ的偏导在初始点附近太弱牛顿方向会紊乱m初值取0.9~1.0之间比较稳妥。U_dc初值直接取1.0 p.u.。3.2 主程序框架与核心代码主循环就是标准牛顿法只不过失配量向量和雅可比矩阵都扩展了。伪代码结构如下% 初始化 x0 [theta_ac0; U_ac0; U_dc0; delta0; m0]; tol 1e-6; for iter 1:50 % 计算失配量 [dP_ac, dQ_ac, dP_dc, dCtrl] cal_mismatch(x, system_data); F [dP_ac; dQ_ac; dP_dc; dCtrl]; if max(abs(F)) tol break; end % 计算雅可比矩阵 J build_jacobian(x, system_data); % 求解修正量 dx -J \ F; x x dx; % 显示迭代信息 fprintf(iter%d, max mismatch%.6e\n, iter, max(abs(F))); end这里最关键的是build_jacobian函数。我搭程序时不会一股脑把整个矩阵算完再组装而是分块计算交流-交流块先调传统交流潮流子函数得到基础雅可比H、N、M、L再在每个含换流站的节点处叠加换流站功率对交流变量的偏导交流-直流块右上按换流站方程对U_dc、δ、m求偏导生成若干密集列直流-交流块左下生成直流功率方程对交流母线电压U_s的偏导直流-直流块右下由直流网络导纳和控制方程生成。组装时要注意变量顺序。我的习惯是把交流节点相角和电压幅值排在前接着是U_dc再是δ和m这样雅可比矩阵的分块结构比较清晰调试时翻开稀疏模式图一目了然。function J build_jacobian(x, sys) n_ac sys.n_ac; n_dc sys.n_dc; % 交流子块 J11 jac_ac(x, sys); % H N M L 复合块 J12 jac_ac_to_dc(x, sys); % 交流变量对直流变量 J21 jac_dc_to_ac(x, sys); % 直流变量对交流变量 J22 jac_dc(x, sys); % 直流-直流块与控制方程块 J [J11 J12; J21 J22]; end需要说明的是搞成稠密矩阵直接求逆在节点规模几十个以内完全没问题。如果将来要扩展到几百个节点务必把雅可比矩阵转为稀疏存储并让Matlab用稀疏求解器如J \ F自动切换稀疏LU同时注意行索引和列索引的排列连续性否则稀疏模式会很难看。3.3 失配量函数里的正方向陷阱编程时最容易出问题的是换流站功率在交流失配量里的正负号。约定P_c是从交流母线流入换流站为正时交流节点i的总注入功率平衡方程应写成ΔP_i P_g,i - P_load,i - P_c,i - P_acnet,i也就是说换流站相当于一个“吸功率”的设备。但有些文献把P_c定义成换流站向交流系统注入功率为正于是公式变成ΔP_i P_g,i - P_load,i P_c,i - P_acnet,i。两个方向在孤立公式里都能自洽可一旦混用雅可比矩阵里的符号就会集体反号程序跑起来要么直接NaN要么收敛到一个完全违背物理常识的“伪解”。我个人的排查方法很简单选一个固定工况手动计算换流站在给定δ和m下的P_c、Q_c数值拿计算器对一遍失配量函数输出的符号正方向弄对了再往下做雅可比验证。3.4 收敛判据与迭代监控收敛判据我不用单一的功率偏差而是看整个扩展失配向量的无穷范数。工程上一般设到1e-6 p.u.调试阶段可以先放1e-3等确认程序无误后再收紧。另外建议同时输出交流功率失配、直流功率失配和控制偏差各自的范数避免出现“交流收敛了但直流还在漂”的假象。迭代过程还可以加一个阻尼措施如果某次迭代后失配量范数反而增大超过上一轮的1.2倍就把修正量乘以0.5再试直到范数下降再恢复全步长。这招对初值不太好的工况特别管用本质就是在牛顿法里加了个自适应步长调节。4. 调试实录不收敛、错符号、模式切换的坑我都踩了一遍4.1 雅可比偏导符号错误导致迭代发散这是我第一次调通程序时最刻骨铭心的经历。三节点算例加双端直流初始化后第一次迭代失配量从0.01左右直接跳到1e5然后一发不可收拾地发散。最后逐项排查发现是P_c对δ求导时少乘了一个负号——因为我把δ定义成“换流器输出电压超前母线电压的角度”但真按照电路相量图算出来有功方向却和公式相反的隐含假设对不上。建议把自己公式里的每个符事情写成备忘录尤其是δ的正方向定义、P_c吸收还是注入为正、Q_c超前还是滞后为正这三个符号问题占据了交直流调试bug的一半以上。写代码时尽量用带后缀的变量名比如P_abs_from_ac和P_inj_to_ac把方向直接写进变量名少用含义模糊的P_c。4.2 初值选择不当与不收敛现象统一迭代法对初值比纯交流潮流敏感典型表现是“前几步迭代正常第三步突然U_dc变成负的”或者“m修正到2.0以上”。初值建议按如下经验取一组相对安全的数值变量推荐初值说明交流节点电压纯交流潮流解或1.0 p.u.有交流潮流初值优先用它没有就用平启动δ移相角0.15~0.26 rad约10~15°太小接近零时雅可比奇异性明显太大则仿真工况偏差大m调制比0.9~1.0线性调制区典型范围别超过1.2U_dc1.0 p.u.定直流电压站的设定值就是天然初值直流线路功率由U_dc初值和线路电阻算出不要拍脑袋乱给如果连调几次初值都救不回来就采取“分步启动”策略先跑纯交流潮流得到换流站接入节点的交流电压然后固定这些交流电压只求直流方程此时是一个小规模方程组初值好给得多再把得到U_dc、δ、m作为整体初值进入统一迭代。这个过程本质上相当于用交替迭代法“预热”了一遍实测对中等规模算例效果很好。4.3 控制方式越限与降级逻辑工程场景里换流站不是永远执行同一个控制目标。比如一个站本来定直流电压定无功算出来无功功率超出换流器容量上限实际运行中就必须切换到定无功限值模式让交流电压自由浮动直流电压改由其他站维持。这种“越限降级”在程序里如果不处理统一迭代法会硬算出一个换流站无功严重超限的数学解看起来收敛了实际完全不可用。我的处理办法是在失配量计算里预设控制模式编号数组迭代收敛后检查各换流站的Q_c或U_ac、U_dc等一旦越限就手动切换控制方程重新迭代反复两次一般就能稳定。Matlab实现不难关键是设计好数据结构和切换判据。这部分的额外收益是程序后来直接可以支持多种控制策略对比论文或者报告里需要“不同控制方式下系统潮流分布对比”时这条逻辑就是现成的。4.4 和交替迭代法结果交叉验证真要把统一迭代法用于项目决策光“自己收敛了”不够还得验证结果对不对。我建议用两个独立思路对照一是写一个简单的交替迭代版本相当于把前面分步启动的逻辑变成循环如果两边得到同一组U_dc和P_dc说明主程序大概率是对的二是做功率平衡体检统计全网发电机总出力、负荷总消耗、直流线路损耗、换流站损耗如果建模加了损耗电阻如果功率不平衡量超过0.001 p.u.大概率有节点方程或雅可比行漏写。还有一个容易被忽略的验证点是无功平衡。VSC不消耗有功理想模型但会从交流侧吸收或发出无功。检查每个换流站交流母线的无功失配量时要确保Q_c加上交流电网原本的无功流动对得上母线侧的无功负荷和补偿设备别把换流站的无功能力当成免费的。4.5 常见问题速查表故障现象可能原因排查办法第一次迭代就NaN雅可比出现0行或奇异子块变量排列顺序错位检查雅可比矩阵某行是否全0用有限差分核对偏导U_dc迭代后变为负数直流电压初值过低或交流电压初值与直流网络不匹配提高δ初值检查直流电阻标幺值是否小到离谱收敛但P_dc与P_c对不上换流站损耗模型忘了加或损耗电阻未纳入直流方程对比直流线路两端功率差值与等效损耗损耗交流侧功率不平换流站正方向符号搞反交流失配量里含换流站项重复计入按4.1的符号校验法逐项核对定交流电压模式总不收敛控制方程写成了“交流电压恒定”但目标节点没有无功可调裕度检查目标节点是否分配了足够的无功源或换流站无功容量4.6 性能优化与小算例到大规模扩展Matlab里统一迭代法在几十节点规模下跑得飞快不用太担心性能。但如果你准备把节点规模扩到几百上千务必做三件事一是雅可比矩阵用稀疏模式存储避免全稠密矩阵的内存爆炸二是在失配量计算里预先计算节点导纳矩阵的实虚部别在每轮迭代里重复算三角函数三是利用Matlab的矢量化把同类型节点的功率计算合并成矩阵运算这比for循环快一个数量级。从代码维护角度看把“换流站模型”和“直流网络模型”封装成独立函数之后新增一种换流器比如LCC或者MMC只需要改接口部分主迭代框架完全不用动。这一点对于做研究或者做工程项目都很值——因为实际工程里换流站可能从VSC换成分级式MMC或者背靠背结构改成多端结构好的封装能让你少改一半代码。最后再分享一点个人体会我在实际调试这套统一迭代法程序时最感慨的一点是数学公式写得再漂亮落进Matlab的矩阵索引时一个符号错位就能让你怀疑人生。建议各位拿到别人分享的交直流潮流代码后不要直接拿大算例测先搭一个你能手算出解析解的迷你直流系统把每一步失配量、每一个雅可比元素都盯一遍通了以后再去扩展。这个方法虽然“笨”但能帮你省出大把排错时间。另外程序里每个换流站的变量索引顺序一定要单独写一个数组记录别用临时变量反复计算位置这是我这几年改代码最深的教训。希望这次分享能帮你少踩几个坑自己动手搭出趁手的交直流潮流工具。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑