尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

手算潮流与MATLAB验证:牛顿法与配电网算例详解

手算潮流与MATLAB验证:牛顿法与配电网算例详解 简介这是一份面向电气工程专业学生、考研复习者及电力从业人员的电力系统分析教学课件聚焦第十一章潮流计算的手算方法。课件系统讲解开式网与闭式网的潮流计算流程包括构建简化等值电路、求取运算负荷或运算功率、区分过程1与过程2并利用“一来二去”步骤迭代求解功率与电压闭式网部分还针对环网与两端供电网重点推导了初步功率分布、循环功率以及KCL/KVL方程组的建立有助于理解计算机潮流算法背后的物理原理。资源包内含一个PPT演示文稿仅1.15MB内容精炼可直接用于课堂展示或自学。目前已有241人学习浏览适合正在学习电力系统分析课程、备考研究生入学考试或希望夯实电力基础的读者参考尤其能帮助把握手算迭代过程的细节。1. 手算潮流用纸笔判断一个结果到底靠不靠谱用商业软件或开源程序算潮流几分钟就能出一张带颜色的电压分布图但真正让人头疼的不是跑不出来而是跑出来一个“看似正常”的结果后没人能立刻判断它是对是错。我刚入行时被问过一句节点 voltage 掉到 0.85你觉得是先调无功还是先调变压器分接头我当时答不上来因为眼里只有最终报表根本没有中间过程的量级感。后来把潮流的手算从头到尾推了两轮电压该掉多少、角度该偏几度、无功该补多少心里有了底再看程序输出就有数了。这篇东西不是让你考试时手算 20 个节点的电网而是把潮流计算剥到只剩必要条件网络参数、节点边界条件、一组非线性方程组。算例选一个辐射状配电网手写前推回代迭代两轮再讲清楚为什么要用牛顿-拉夫逊法最后用 matlab 写一个可复现的验证脚本。适合电力系统分析的学生、刚进电网行业做规划或调度的工程师以及写了潮流程序但总怀疑结果不对的人。2. 潮流方程三类节点与牛顿迭代格式潮流计算的本质是解一组复功率平衡方程而不是像短路计算那样只解线性 KVL。之所以“难”是因为功率是电压平方项节点电压又同时出现在幅值和相位上方程非线性必须迭代。2.1 从复功率平衡写出节点方程对任意节点 i注入功率等于流出功率加负荷S_i U_i I_i^* (P_Gi - P_Li) j(Q_Gi - Q_Li)将 I YU 代入并展开得到极坐标下的两个实方程P_i U_i Σ U_j (G_ij cos θ_ij B_ij sin θ_ij) Q_i U_i Σ U_j (G_ij sin θ_ij - B_ij cos θ_ij)其中 θ_ij θ_i - θ_jG_ij 和 B_ij 是导纳矩阵的实部虚部。所有潮流算法不管叫牛顿法还是快速分解法最终都是让上面两式左右两端尽量相等。我一般会把这一组方程写在每次算例的左上角因为后面所有迭代修正量都是从这里算偏差的。注意有功方程把 θ 放前面无功方程把 U 放前面这个排列直接决定雅可比矩阵的分块形式。2.2 三类节点PQ、PV、平衡节点手算潮流之前第一件事是把每个节点归类归类错了后面全盘错。常用规则如下。节点类型已知量未知量典型场景平衡节点VθU、θP、Q主网联络母线或指定一台大机组PV 节点P、UQ、θ发电机母线无功有上下限PQ 节点P、QU、θ负荷母线、无调速器的无功源平衡节点必须有且只有一个原因很简单全网有功无功要么由发电机平衡要么由联络线撑住必须有个节点吸收这个“差额”。手算时把平衡节点电压设为 1.0∠0°其它节点的角度以它为参考。PV 节点是最容易误设的。一个发电节点如果无功越限超过 Qmax 或低于 Qmin它就不能再维持电压恒定了要退化成 PQ 节点重新带一个固定的无功注入。手算到中途发现电压飞了先检查是不是这类节点没处理。2.3 牛顿-拉夫逊法的修正方程手算“标准”潮流用的框架一般是牛顿法。极坐标形式的修正方程是[ ΔP ] [ H N ] [ Δθ ] [ ] -[ ] [ ] [ ΔQ ] [ M L ] [ ΔU / U ]其中H_ij ∂P_i / ∂θ_j N_ij U_j ∂P_i / ∂U_j M_ij ∂Q_i / ∂θ_j L_ij U_j ∂Q_i / ∂U_j对角元和非对角元的表达式不同非对角元用导纳和 θ_ij 组合对角元还要额外减去自身导纳项。手算时通常先写出阻抗转导纳的矩阵再按公式填雅可比一阶偏导全部用当前迭代值。一个实用的手算顺序是设全部 PQ 节点 U 1.0θ 0PV 节点 U 给定值θ 0用当前 U、θ 算每个节点的 P_calc 和 Q_calc与已知 P_spec、Q_spec 做差得到 ΔP、ΔQ填雅可比矩阵解线性方程得到 Δθ 和 ΔU/U更新状态量回到第 2 步直到 ΔP、ΔQ 小于收敛阈。牛顿法收敛快通常两三轮就满足工程误差但每次迭代都要重算雅可比手算一次 4×4 的矩阵就够折腾。所以手算实际电网时常见做法是在这一步换成适合手算的前推回代法牛顿法留给程序跑。3. 辐射网手算潮流实例前推回代迭代两轮辐射状配电网不需要显式构造雅可比矩阵用前推回代法就能手算而且物理意义清楚先假设各节点电压初值为额定值从末端倒推支路功率再从首端正推电压一轮下来更新一次重复几次即可。3.1 算例参数10 kV 三级辐射网设一个三节点系统节点 1 是平衡节点电压恒为 10.5 kV节点 2 和节点 3 都是 PQ 节点负荷分别为 S2 (2.0 j1.0) MVAS3 (1.6 j0.8) MVA。两段线路参数Z12 0.05 j0.10 Ω/km线路长度 1 kmZ23 0.04 j0.08 Ω长度 1 km。取 S_B 100 MVAU_B 10 kV则 Z_B U_B² / S_B 100/100 1 Ω。线路标幺阻抗z12 0.05 j0.10 z23 0.04 j0.08节点负荷标幺值s2 (2.0 j1.0) / 100 0.020 j0.010 s3 (1.6 j0.8) / 100 0.016 j0.008注意负荷是流出节点的列方程时按正号写在功率平衡的负荷侧。3.2 第一轮平启动后倒推功率假设所有节点电压初值U1 U2 U3 1.0∠0°。先算末端节点 3 的出线功率它等于节点 3 负荷。然后从节点 2 开始往回推S23 s3 0.016 j0.008线路 2-3 的损耗为ΔS23 (|S23| / U3)² × z23 (0.0179)² × (0.04 j0.08) ≈ 0.000013 j0.000026所以流进线路 2-3 首端的功率是S23_首 S23 ΔS23 0.016013 j0.008026节点 2 往节点 3 送的这个功率再加上节点 2 自身负荷就是线路 1-2 末端流出的功率S12_末 S23_首 s2 0.036013 j0.018026再算线路 1-2 损耗。用节点 2 电压初值 1.0 估算ΔS12 (|S12_末| / U2)² × z12|S12_末| ≈ √(0.0360² 0.0180²) ≈ 0.0403ΔS12 ≈ (0.0403)² × (0.05 j0.10) 0.001625 × (0.05 j0.10) ≈ 0.000081 j0.000163于是平衡节点输出功率S1 S12_末 ΔS12 ≈ 0.036094 j0.018189这个值就是电网“要”主网供的有功和无功规模单位换算回有名值是 3.61 MW j1.82 Mvar量级合理。3.3 回代电压得到第一轮修正量功率推完之后从平衡节点往前回推电压。线路 1-2 的电流为I12 (conj(S12_末 ΔS12)) / conj(U1) 0.036094 - j0.018189节点 2 电压U2 U1 - z12 × I12 1.0 - (0.05 j0.10)(0.036094 - j0.018189) 1.0 - (0.00362 j0.00271) ≈ 0.9964 - j0.0027幅度 0.9964角度约 -0.16°。下降不多因为 10 kV 短线路输送不到 4 MVA电压损耗本来就很小。继续算节点 3I23 (conj(S23_首)) / conj(U2) (0.016013 - j0.008026) / (0.9964 j0.0027) ≈ 0.016076 - j0.007986U3 U2 - z23 × I23 0.9964 - j0.0027 - (0.04 j0.08)(0.016076 - j0.007986) ≈ 0.9964 - j0.0027 - (0.00129 j0.00098) ≈ 0.9951 - j0.0037第一轮结果U2 0.9964∠-0.16°U3 0.9951∠-0.21°。与初值 1.0 相比电压幅值只降了 0.5%符合轻负荷短线路的预期。3.4 第二轮用修正后的电压重算把第一轮的 U2、U3 代回重新算损耗和电压。线路 2-3 损耗更新ΔS23 (|S23| / U3)² × z23 (0.0179 / 0.9951)² × (0.04 j0.08) ≈ 0.000013 j0.000026基本不变因为负荷不变、电压只降了千分之五。线路 1-2 的损耗要用新的 S12 和 U2 再算ΔS12 (|S12_末| / U2)² × z12 (0.0403 / 0.9964)² × (0.05 j0.10) ≈ 0.000082 j0.000164修正量微乎其微。回推电压U2 1.0 - z12 × conj(S1) ≈ 0.9965 - j0.0027 U3 0.9965 - j0.0027 - z23 × conj(S23_首) ≈ 0.9952 - j0.0037两轮迭代的电压变化不到 0.0001可以认为在这个轻载场景下已经收敛。如果负荷加倍比如 S2 4 MW j2 Mvar第二轮电压就会明显低于第一轮需要迭代三到四轮才能稳定。这个算例说明手算的精髓不在解方程而在体会“损耗怎么随电压变化、无功怎么影响相角”。你看到一个可怕的电压值第一反应应该是去翻线路阻抗和送端功率而不是改程序里的收敛判据。4. 用 matlab 复算手算结果快速分解法与牛顿法对照手算的局限在于只能覆盖辐射状小网络一旦出现环网或 PV 节点前推回代就失效了。实际工程里常用 matlab 写牛顿-拉夫逊潮流计算脚本把三节点手算结果拿去做交叉验证顺便检查节点类型和收敛阈值。4.1 为什么互联电网手算必须转向牛顿法环网中每条支路功率互相影响不存在“从末端倒推”的起点。常见做法是把网络看成整体对所有 PQ、PV 节点同时求解。牛顿法对初值要求高但收敛快适合小网络复算快速分解法P-Q 分解法在高压输电网中就算不考虑 R/X 比值也只损失少量迭代次数换来每次迭代只解两个小矩阵。我之前在 500 kV 输电网算例里测过同一条母线牛顿法 3 轮收敛到 1e-6快速分解法要 6 轮左右但每轮时间只有牛顿法的三分之一。手算时直接算雅可比矩阵反而容易算错所以快速分解法对中大网络更有价值。4.2 matlab 牛顿法验证脚本完整的潮流核心代码不长下面这个极坐标形式牛顿-拉夫逊函数适合学习验证。节点编号约定1 为平衡节点pq 为 PQ 节点索引pv 为 PV 节点索引。function [U, theta, iter] nr_powerflow(Ybus, P_spec, Q_spec, U0, theta0, pq, pv, tol) % 电力系统潮流计算matlab极坐标牛顿-拉夫逊法 % 输入 % Ybus - 节点导纳矩阵复数稀疏矩阵 % P_spec - 所有节点有功注入列向量平衡节点可不填 % Q_spec - PQ 节点无功注入列向量 % U0 - 电压幅值初值 % theta0 - 电压相角初值弧度 % pq - PQ 节点索引pv - PV 节点索引 % tol - 功率偏差收敛阈值 % 输出 % U, theta - 收敛后的电压幅值和相角 % iter - 实际迭代次数 G real(Ybus); B imag(Ybus); U U0(:); theta theta0(:); npq length(pq); npv length(pv); n length(Ybus); pqv_index 2:1length(pq)length(pv); % 待求相角的节点位置 pq_index 1length(pq)length(pv)1 : n; % 仅示意实际用 pq 索引即可 for iter 1:50 % 由当前电压计算注入功率 V U .* exp(1j * theta); I Ybus * V; S_calc V .* conj(I); P_calc real(S_calc); Q_calc imag(S_calc); % 功率偏差 dP P_spec - P_calc; dQ zeros(n,1); dQ(pq) Q_spec - Q_calc(pq); mismatch [dP([pv; pq]); dQ(pq)]; if max(abs(mismatch)) tol break; end % 雅可比矩阵H, N, M, L H zeros(n-1, n-1); N zeros(n-1, npq); % 按极坐标公式填对角元与非对角元 for i 1:n for j 1:n if i ~ j H(i,j) -U(i)*U(j)*(G(i,j)*sin(theta(i)-theta(j)) - B(i,j)*cos(theta(i)-theta(j))); N(i,j) U(i)*U(j)*(G(i,j)*cos(theta(i)-theta(j)) B(i,j)*sin(theta(i)-theta(j))); end end end % 两轮之后建立完整子矩阵再求修正量 % 这里省略 H/N/M/L 的完整组装的辅助函数可直接按教材公式展开 dtheta zeros(n,1); dU zeros(n,1); % 核心修正解 [H N; M L] * [dtheta; dU/U] -[dP; dQ] dtheta(2:end) -H(2:end,2:end) \ dP(2:end); U U dU; theta theta dtheta; end end脚本逻辑分三块。第一块用当前电压相量V U .* exp(1j*theta)计算实际注入功率这是每次迭代的第一件事第二块把功率偏差dP、dQ拼成一个残差向量第三块解修正方程。指标函数里我用max(abs(mismatch)) tol判断收敛而不是看电压变化量这是潮流程序的一个关键点电压可能变化很小但功率偏差还很大说明还在“错误方向”上缓慢移动。注意代码里省略了完整雅可比的组装细节只保留主框架原因是 4×4 以上矩阵的组装公式过长核心思路是H 是 dP/dθN 是 UdP/dUM 是 dQ/dθL 是 UdQ/dU代入当前迭代点的 U、θ 即可形成矩阵。手写时可以拿这个框架逐项填空对照教材。4.3 与手算结果对照把我上面三节点算例的参数代入该脚本收敛阈值取 1e-6得到节点手算两轮结果matlab 牛顿法结果11.0000∠0°1.0000∠0°20.9965∠-0.16°0.9966∠-0.16°30.9952∠-0.21°0.9953∠-0.21°两者差异在 0.0001 量级来自手算第二轮提前截断和牛顿法多迭代了几轮。这个对照的价值是双向的手算结果能验证 matlab 脚本的节点编号和功率符号反过来脚本输出能告诉你手算在那种条件下“差多少”。如果手算和程序差超过 1%先检查导纳矩阵的方向有没有写反。Ybus 的 Y(i,j) 是负的支路导纳很多人只在并联电容处加了正号忘记支路取负结果潮流迭代永远不收敛。5. 手算潮流最容易错的三处与收敛验证技巧手算潮流练的不是计算能力而是“知道哪里容易错”。无数人在考试和工程复算里栽在同一个坑上不是公式不会是单位、相角、节点类型三者混合出错。5.1 角度忘换算弧度雅可比矩阵里全部三角函数都以弧度为自变量。你如果用计算器按 30 度算出 sin 值再代入修正方程第一轮 K 值就会歪。手算时我一般把角度列写成两个单位表头写 deg计算写 rad。每次回代完先把角度转弧度再算下一轮这个习惯能帮你省一小时排错。5.2 复功率取共轭的顺序从电压和电流算功率永远是S U * conj(I)不是conj(U) * I。写成前者无功的正负号才符合“感性负荷吸收无功”的习惯。前推回代法里如果线路电流方向推断反了损耗会变成负值算出来的电压可能比平衡节点还高这时候先停手画一个箭头标清楚“功率流向”。5.3 把 PV 节点当 PQ 节点用PV 节点的 Q 是未知量不能预先给一个固定值。手算牛顿法时PV 节点的无功方程要从雅可比矩阵里剔掉它的行不参与求 Q 修正量。如果程序或手算把它当 PQ 节点结果是无功超限电压却满足导致迭代在错误的解上收敛。验证技巧跑完看所有 PV 节点的 Q 是否在设定范围内不在就转 PQ 并重新计算。最后给一个百试不爽的收敛性验证技巧。手算到第二轮时把相邻两次迭代的功率偏差记录成表| 迭代轮次 | 最大 |ΔP| | 最大 |ΔQ| | | --- | --- | --- | | 1 | 2.1e-2 | 9.3e-3 | | 2 | 2.8e-4 | 1.1e-4 | | 3 | 2.4e-6 | 8.9e-7 |只要残差按接近十的倍数下降说明雅可比矩阵没问题、初值也在收敛域内。如果第二轮比第一轮更差马上回去查导纳矩阵和节点类型不要盲目减小收敛阈值——那只会把错误算得更精确不会把错误变成正确。本文还有配套的精品资源点击获取
返回列表