简介:这是一份面向电气工程专业学生、考研复习者及电力从业人员的电力系统分析教学课件,聚焦第十一章潮流计算的手算方法。课件系统讲解开式网与闭式网的潮流计算流程,包括构建简化等值电路、求取运算负荷或运算功率、区分过程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 - θ_j,G_ij 和 B_ij 是导纳矩阵的实部虚部。所有潮流算法,不管叫牛顿法还是快速分解法,最终都是让上面两式左右两端尽量相等。
我一般会把这一组方程写在每次算例的左上角,因为后面所有迭代修正量都是从这里算偏差的。注意有功方程把 θ 放前面,无功方程把 U 放前面,这个排列直接决定雅可比矩阵的分块形式。
2.2 三类节点:PQ、PV、平衡节点
手算潮流之前,第一件事是把每个节点归类,归类错了后面全盘错。常用规则如下。
| 节点类型 | 已知量 | 未知量 | 典型场景 |
|---|---|---|---|
| 平衡节点(Vθ) | U、θ | P、Q | 主网联络母线,或指定一台大机组 |
| PV 节点 | P、U | Q、θ | 发电机母线,无功有上下限 |
| PQ 节点 | P、Q | U、θ | 负荷母线、无调速器的无功源 |
平衡节点必须有且只有一个,原因很简单:全网有功无功要么由发电机平衡,要么由联络线撑住,必须有个节点吸收这个“差额”。手算时把平衡节点电压设为 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,θ = 0,PV 节点 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) MVA,S3 = (1.6 + j0.8) MVA。两段线路参数:Z12 = 0.05 + j0.10 Ω/km,线路长度 1 km;Z23 = 0.04 + j0.08 Ω,长度 1 km。
取 S_B = 100 MVA,U_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,电压损耗本来就很小。
继续算节点 3:
I23 = (conj(S23_首)) / conj(U2) = (0.016013 - j0.008026) / (0.9964 + j0.0027) ≈ 0.016076 - j0.007986
U3 = 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:1+length(pq)+length(pv); % 待求相角的节点位置 pq_index = 1+length(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/dU,M 是 dQ/dθ,L 是 UdQ/dU,代入当前迭代点的 U、θ 即可形成矩阵。手写时可以拿这个框架逐项填空对照教材。
4.3 与手算结果对照
把我上面三节点算例的参数代入该脚本,收敛阈值取 1e-6,得到:
| 节点 | 手算两轮结果 | matlab 牛顿法结果 |
|---|---|---|
| 1 | 1.0000∠0° | 1.0000∠0° |
| 2 | 0.9965∠-0.16° | 0.9966∠-0.16° |
| 3 | 0.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 |
只要残差按接近十的倍数下降,说明雅可比矩阵没问题、初值也在收敛域内。如果第二轮比第一轮更差,马上回去查导纳矩阵和节点类型,不要盲目减小收敛阈值——那只会把错误算得更精确,不会把错误变成正确。
本文还有配套的精品资源,点击获取