简介:潮流计算是电力系统分析中最基础的工程计算之一,其核心在于求解描述节点电压、相角与功率分布的非线性方程组。工程实践中,理解手算潮流流程有助于深入掌握节点导纳矩阵的构建、功率方程的原理以及高斯-赛德尔法与牛顿-拉夫逊法等迭代方法的收敛特性。手算方法不仅适合电力专业学生入门,也能帮助配网设计、调度人员快速校核程序输出结果的物理合理性。从简单的两节点系统到含PV节点的三节点算例,手算过程清晰地展示了电压幅值修正、无功越限处理与结果合理性校核等关键环节。本文以工程实践视角梳理一套可复算的手算流程,并结合常见避坑经验,帮助读者从算法原理走向实际应用,为理解商业潮流软件的黑匣子输出提供直观依据。
1. 电力系统的潮流计算,手算到底在算什么
电力系统的潮流计算,在工程现场常被叫成“算潮流”。深夜值班室,调度员接到电话说一条馈线负荷上涨,要判断邻近两条线路会不会过载、末端电压掉到多少——手边没有潮流软件,只有一张阻抗图、一台计算器和一支笔,这时候做的就是潮流计算的手算版本。它本质上是在解一组节点功率方程:给定发电机出力和负荷,求每个节点的电压幅值、相角与线路功率。手算精度不如商业程序,但概念清楚,适合少量节点快速估算,也是理解计算机潮流算法的入门台阶。适合三类人:电力专业学生、刚入行的配网设计或调度人员、需要快速核对程序输出是否合理的老师傅。
2. 手算潮流的理论底座:节点导纳矩阵与功率方程
2.1 从功率方程说起:潮流到底在解什么
先看模型。对任意节点 i,注入电流等于所有相连支路电流之和,写成 I_i = Σ_j Y_ij·U_j。节点注入复功率为 S_i = P_i + jQ_i = U_i × (I_i)*,把电流表达式代进去,取实部虚部,就得到极坐标形式的功率方程:
P_i = Σ_j U_i·U_j·(G_ij·cosδ_ij + B_ij·sinδ_ij)
Q_i = Σ_j U_i·U_j·(G_ij·sinδ_ij - B_ij·cosδ_ij)
其中 δ_ij = δ_i - δ_j,Y_ij = G_ij + jB_ij。这两个式子全部展开,是 2n 个实数方程组成的非线性方程组。每个节点有 P、Q、U、δ 四个量,必须已知其中两个,才能求另外两个。潮流计算的全部工作,就是挑出已知量、设定初值、用迭代法解出未知量。
手算时最该记住的一点:这是非线性方程,没有解析解,只能猜一条收敛的路。程序里迭代发散、初值敏感、收敛判据太松导致停在错误解上,这些现象在手算里全部会发生,而且因为每一步都要自己动手,体会比看软件日志深得多。很多老工程师说,手算一遍后,再看潮流软件的黑匣子输出,至少知道哪些数字可疑,哪些数字一定是错的。
2.2 节点导纳矩阵:手算第一步,也是最容易错的一步
不管用哪种方法手算,第一件事永远是建节点导纳矩阵 Y。它是全网的“接线地图”,组装规则只有两条:对角元 Y_ii 等于与该节点相连的全部支路导纳之和;非对角元 Y_ij 等于连接 i-j 支路导纳的负值,且 Y_ij = Y_ji。线路用 π 型等值电路,长线路的对地电容计入对角元;变压器按标准变比折算阻抗,非标准变比时用 π 型等值电路处理。
举一个三节点小系统:节点 1-2 支路 z = 0.02 + j0.15,节点 2-3 支路 z = 0.015 + j0.10,节点 1-3 支路 z = 0.03 + j0.20,都忽略对地导纳。先算支路导纳:
y_12 = 1 / (0.02 + j0.15) ≈ 0.873 - j6.546
y_23 = 1 / (0.015 + j0.10) ≈ 1.45 - j9.66
y_13 = 1 / (0.03 + j0.20) ≈ 0.735 - j4.90
然后组装:
Y_11 = y_12 + y_13 ≈ 1.608 - j11.446
Y_22 = y_12 + y_23 ≈ 2.323 - j16.206
Y_33 = y_23 + y_13 ≈ 2.185 - j14.56
Y_12 = Y_21 = -y_12 = -0.873 + j6.546
Y_13 = Y_31 = -y_13 = -0.735 + j4.90
Y_23 = Y_32 = -y_23 = -1.45 + j9.66
我一般建议按“支路导纳表 → 对号入座”的顺序写,而不是直接在矩阵里填数。先列一张三列的表:支路号、导纳值、该导纳对哪个对角元哪个非对角元有贡献。这样组装完,用两条规则自检:矩阵必须对称;没有对地导纳时,每一行的行和应该为 0。行和不为 0,说明某个非对角元忘了取负,这是新手手算翻车率最高的地方。
2.3 三类节点:先分清给定与待求
上节说过,每个节点 P、Q、U、δ 四个量必须已知两个。按给定量的组合,电网节点分成三类,手算前必须逐个标注。
| 节点类型 | 给定量 | 待求量 | 典型位置 |
|---|---|---|---|
| 平衡节点 | 电压幅值 U、相角 δ | 有功 P、无功 Q | 主电源、容量大的枢纽变电所 |
| PQ 节点 | 有功 P、无功 Q | 电压幅值 U、相角 δ | 负荷节点、无调速能力的小电源 |
| PV 节点 | 有功 P、电压幅值 U | 无功 Q、相角 δ | 发电机、有载调压变电站低压侧 |
平衡节点必须存在,而且要全系统只设一个。原因很实际:网损在算出结果之前是未知的,系统里所有发电与负荷的总不平衡量,最后总得有某个节点兜底吸收,这个兜底的就是平衡节点。手算时,平衡节点要选容量大的枢纽点或主电源,别选在负荷密集的末端,否则收敛后它的 P、Q 数值会大到不合理,一眼看上去就像算错了。
PV 节点手算时要额外留个心眼:它的无功 Q 是待求量,但发电机和调压设备的无功能力是有上下限的。每轮迭代算出 Q 后如果越限,这个节点要退化成 PQ 节点处理,具体做法第 5 章避坑部分再展开。总之,建完矩阵、标完节点类型,手算的第一阶段才算真正完成。
3. 手算选哪个方法:高斯-赛德尔与牛顿-拉夫逊的取舍
3.1 高斯-赛德尔法:手算里最稳妥的起步方法
高斯-赛德尔法(GS)是手算最常起步的算法。它的推导很直接:由 I_i = Y_ii·U_i + Σ_{j≠i} Y_ij·U_j 和 I_i = (S_i / U_i)* 联立,解出 U_i:
U_i = (1 / Y_ii) × [ (S_i / U_i)* - Σ_{j<i} Y_ij·U_j^{(k+1)} - Σ_{j>i} Y_ij·U_j^{(k)} ]
注意括号里最后一个上标:已经算过的节点用本轮新值,还没算过的用上一轮旧值,这个“边算边用新值”的做法就是赛德尔迭代的特征。每算完一轮,判断相邻两轮电压差的最大值是否小于收敛判据 ε。手算我建议 ε 取 1e-3 到 1e-4:工程估算 1e-3 足够,想要更准就 1e-4,再小就没有意义了,手算也等不起。
GS 最大的好处是不挑初值。哪怕初值给到 1.0∠0° 这种完全不懂系统的默认值,只要系统本身有解,它大多能慢慢爬过去。代价是收敛慢:两节点系统 3 到 5 轮能稳,三节点系统理论上要十几轮,手算到后面每一轮就是往表格里抄一堆数,所以实际工程里用 GS 做纯手算,最多跑到三节点就收手。它真正的价值是给牛顿法打底子,或者用来验证你对导纳矩阵和功率符号的理解对不对。
3.2 牛顿-拉夫逊法:收敛快,但手算只推荐“精修一步”
牛顿-拉夫逊法(NR)的思路完全不同:先把给定的 P、Q 和当前初值代入功率方程,算出功率偏差 ΔP、ΔQ,再通过雅可比矩阵 J 修正电压幅值和相角:
[ΔP; ΔQ] = J·[Δδ; ΔU/U]
雅可比矩阵分成 H、N、K、L 四个子块,分别对应 P 对相角、P 对电压、Q 对相角、Q 对电压的偏导数。这个方法收敛极快,通常两三轮就到 1e-5,但每轮都要重新计算雅可比矩阵的全部元素。两节点系统 J 是 2×2,算四个偏导还扛得住;三节点系统 J 变成 5×5,一轮要算二十来个偏导,手算一轮下来纸面就满了,纯手算做 NR 在工程上是自找苦吃。
我实际用过、也比较推荐的做法是“GS 打底、NR 精修”:先用 GS 跑一两轮,把电压的数量级和相角方向搞对,这时候残差大概在 1e-2 量级;然后改用 NR 做一步修正,往往一步就把残差压到 1e-4 以下。比纯 GS 少一半轮数,比纯 NR 省下大量偏导计算,手算体验好得多。
以第 4.1 节那个两节点系统为例做一步 NR 是能落笔的。设初值 U_2 = 1.0∠0°,线路导纳 y = 0.990 - j9.901,则 Y_22 = 0.990 - j9.901,Y_21 = -0.990 + j9.901。用功率方程算当前偏差:
P_2_calc = U_2·U_1·(G_21·cosδ_21 + B_21·sinδ_21) + U_2²·G_22 ≈ 1.05×1.0×(-0.990) + 0.980 ≈ -0.059
给定 P_2 = -0.8,所以 ΔP ≈ -0.741。Q_2_calc ≈ -0.70,给定 Q_2 = -0.6,所以 ΔQ ≈ +0.10。这一步的物理含义很清晰:初值下有功功率“送不够”,说明相角差偏小,修正量应该让 δ_2 往负方向走;无功“送多了”,说明电压幅值要略往下调。NR 就是把这两个直觉量化成一次线性修正。手算到这里,其实已经把算法的灵魂抓住了——剩下的雅可比元素计算,交给程序就行。
3.3 手算特有的简化手段:能省则省
手算不是要严格复刻程序,而是用工程判断砍掉次要因素。第一个简化是忽略对地导纳:35kV 及以下的短线路,π 型等值电路里的对地电容容抗远大于线路阻抗本身,手算直接省略,导纳矩阵里就只剩支路导纳,行和为 0 的自检规则也依然成立。
第二个简化是负荷矩法估算电压损耗。配电网里电压损耗近似满足 ΔU ≈ (P·R + Q·X) / U,当线路型号统一、功率因数变化不大时,可以进一步简化成“有功负荷×供电距离”的累积值,即负荷矩法。工程上常用 Δu% ≈ (P×l) / (C×S) 这类经验式,P 是负荷功率(kW),l 是线路长度(km),S 是导线截面(mm²),C 是电压损失计算系数,由导线材料、电压等级和接线方式决定,具体数值查电力设计手册。做快速估算时,这个方法能在一分钟内判断末端电压有没有跌破下限,不值得为这种问题去建完整导纳矩阵。
第三个简化是有功无功解耦。高压输电网里,有功功率主要受相角差影响,无功功率主要受电压幅值影响,交叉项小到可以忽略。手算时先算一轮无功/电压,再算有功/相角,能把三节点的计算量砍掉近一半。这也是 PQ 分解法的雏形。最后一个简化是均一环网的循环功率估算:当环网各段 R/X 比例接近时,循环功率近似按线路长度反比分配,不需要解网孔方程,直接按比例分就够用了。这四个简化要记住它们的适用边界:高压网可以忽略电阻、看重电抗;配电网电阻不能忽略,R/X 可能大于 1,解耦简化和均一环网假设在配电网里经常不成立。
4. 从两节点到三节点:一套能落笔的手算流程
4.1 两节点系统:用迭代表走完一个手算闭环
两节点是手算的最小完整系统,适合把整套流程走通。算例沿用前文:节点 1 为平衡节点,U_1 = 1.05∠0°;节点 2 为 PQ 节点,P_2 = -0.8,Q_2 = -0.6(负荷为负注入);线路阻抗 z = 0.01 + j0.1,忽略对地导纳。支路导纳 y = 1/z ≈ 0.990 - j9.901,于是 Y_22 = 0.990 - j9.901,Y_21 = -0.990 + j9.901。
手算流程分六步。第一步画阻抗图并标注节点类型;第二步建导纳矩阵;第三步设初值 U_2^{(0)} = 1.0∠0°;第四步按 GS 迭代公式计算;第五步判收敛;第六步反算线路功率。第四步的第一轮完整计算长这样:
(S_2 / U_2^{(0)})* = (-0.8 - j0.6)* = -0.8 + j0.6
Y_21·U_1 = (-0.990 + j9.901) × 1.05 ≈ -1.040 + j10.396
U_2^{(1)} = [-0.8 + j0.6 - (-1.040 + j10.396)] / (0.990 - j9.901) = (0.240 - j9.796) / (0.990 - j9.901) ≈ 0.982 - j0.074
幅值约 0.985,相角约 -4.3°。第二轮把刚算出的 U_2^{(1)} 当新初值再代一遍,得到约 0.981 - j0.077,幅值 0.984,相角 -4.5°,与上一轮幅值差约 0.001。第三轮残差降到 5e-4 量级,按 ε = 1e-3 的判断标准已经收敛。整个过程整理成迭代记录表:
| 迭代轮次 | U_2 实部 | U_2 虚部 | 幅值 | 相角(°) | ΔU 幅值 |
|---|---|---|---|---|---|
| 初值 | 1.000 | 0.000 | 1.000 | 0.0 | - |
| 1 | 0.982 | -0.074 | 0.985 | -4.3 | 0.015 |
| 2 | 0.981 | -0.077 | 0.984 | -4.5 | 0.001 |
| 3 | 0.981 | -0.077 | 0.984 | -4.5 | <0.0005 |
手算做到第二轮就可以停下来做工程判断了,第三轮更像是教学演示。最后一步反算线路功率,用 S_12 = U_1 × (Y_12·(U_1 - U_2))*,得到平衡节点送出的功率约为 0.81 + j0.63。多出来的 0.01 有功和 0.03 无功就是线路损耗,这组数也是下一节的校核依据。
4.2 三节点系统:新增 PV 节点后的手算边界
三节点系统比两节点多了一个维度和一种节点类型,手算流程要新增两个动作:PV 节点的无功校验,以及平衡节点功率的最后结算。算例沿用第 2 章的导纳矩阵,节点 1 平衡 U = 1.05∠0°,节点 2 为 PV 节点 P = 0.3、U = 1.02,节点 3 为 PQ 节点 P = -0.7、Q = -0.5。
第一步初始化,设 U_2 = 1.02∠0°,U_3 = 1.0∠0°。第二步更新节点 3,按 GS 公式计算 U_3^{(k+1)} = (1/Y_33) × [(S_3/U_3^{(k)})* - Y_31·U_1 - Y_32·U_2^{(k)}],因为节点 1 是平衡节点、节点 2 刚更新过,都用最新值。第三步更新节点 2,这里的先后次序很关键:先用功率方程的无功式算出 Q_2_calc,判断它是否落在无功上下限内(比如上限 0.5、下限 -0.2);越限就把 Q_2 钉在限值上,本节点本轮降级成 PQ 节点处理;没越限才允许保持 PV 身份,即用 GS 公式算出新的相角,但电压幅值强行拉回给定的 1.02。第四轮检查两次迭代之间所有节点的残差。全部收敛后,平衡节点 1 的 P_1、Q_1 用最后一轮电压代入功率方程直接算出来,不再参与迭代。
每轮记录建议做成五列:节点号、电压实部、电压虚部、Q_2 越限检查、本轮残差。之所以说三节点是手算的天花板,就是因为 PV 节点的幅值修正、无功越限判断、平衡节点兜底三个动作叠加在一起,手算特别容易顾此失彼。实际工作中超过三个节点再硬用手算迭代就不划算了,这时候应该转电子表格或程序,但思路仍然是从这套手算流程来的。
4.3 手算结果的合理性校核:四个判断句
手算出结果后要先自检再使用。第一,全网功率平衡:平衡节点送出的功率,应该约等于所有负荷功率之和加上网损。前面两节点例子中 P_1 ≈ 0.81,负荷吸收 0.8,多出的 0.01 就是网损,方向正确。第二,网损必须为正:电流流过阻抗只会消耗功率,不会凭空产生功率。把全部节点的注入功率加起来,如果得到一个负数,说明某处符号约定错了,这是查错最快的切入点。
第三,电压幅值要符合常识:标幺值通常在 0.9 到 1.1 之间,短线路末端电压更低一些也在 0.93 以上。算出 1.5 或者 0.6,不用怀疑系统,先怀疑自己的迭代步骤。第四,反推线路潮流看是否有倒灌或过载:任意支路潮流用 S_ij = U_i × (Y_ij·(U_i - U_j))* 反推,和给定方向对比,如果发电机节点反而在吸收有功,相角符号一定出了问题。这四句都通过,手算结果才算真正闭环。
5. 手算潮流避坑:五个翻车现场的排查笔记
5.1 电压越算越离谱,幅值冲到 1.5 以上
现象:第一次迭代算出的电压幅值超过 1.5,或者出现负的实部,结果明显不符合系统常识。
原因:功率符号约定没统一。把负荷当成了正注入,或者迭代公式里的共轭取错了。GS 公式里用的是 (S_i / U_i)*,这个整体共轭很容易被拆错——有人只对 U_i 取共轭,结果复功率的虚部符号反转,无功方向全反。
解决:开始手算前,在纸面顶部写清楚“节点注入功率为正,负荷为负”。迭代时先写出复功率 S_i,再除以当前电压,最后整体加一个共轭号,三步拆开做,不要跳步。计算器上做复数运算时,确认当前模式是复数格式,别让实部虚部分别的显示骗过去。
5.2 导纳矩阵非对角元符号错,一迭代就发散
现象:Y 矩阵对角元看着没问题,但迭代两三轮后电压越来越偏,或者反算功率时正负号和给定值对不上。
原因:把非对角元直接写成了支路导纳 y_ij。定义里非对角元是 -y_ij,对角元才是相连支路导纳之和。这个负号是新手手算里出现频率最高的错误。
解决:先列支路导纳表,每填一个非对角元默念一遍“取负”。组装完后做两项自检:矩阵必须对称;忽略对地导纳时每一行行和应为 0。行和不为 0 的,逐行查,大概率是某个非对角元漏了负号。
5.3 角度制与弧度制混用,相角越算越偏
现象:手算迭代前两轮正常,第三轮相角明显偏移,用计算器复核 sin、cos 发现差了好几度。
原因:功率方程里的三角函数必须用弧度输入,但手算记录表格里习惯记角度。有人记录时写角度,代入公式时忘了转回弧度,或者相角差 δ_i - δ_j 的角度制混进了弧度计算。
解决:全程统一用弧度运算。记录表可以同时保留角度列方便阅读,但每一轮代入公式前,先做一次“角度转弧度”的确认。用计算器时注意 DEG 和 RAD 模式切换,这是手算里最不起眼却最坑的一步。
5.4 PV 节点无功越限不处理,迭代结果反复振荡
现象:系统含 PV 节点时,GS 迭代中该节点电压幅值在给定值上下反复跳,总也稳定不下来。
原因:PV 节点给定了电压幅值,这个幅值要靠无功支撑。手算时只更新相角、没有检查每轮算出的 Q 是否超过发电机或调压设备的无功能力。Q 一旦越限,电压幅值就撑不住,迭代自然振荡。
解决:每轮对每个 PV 节点用功率方程的无功式算一次 Q_calc,立刻和上下限比较。越限就把 Q 固定在限值,该节点本轮按 PQ 节点继续迭代,后续轮次保持这个决定,不要一会儿 PQ 一会儿 PV 来回切。在迭代记录表里单独开一列“Q 越限检查”,每轮填一次,这个习惯能省掉大量排错时间。
5.5 迭代抄错一行数,半小时白干
现象:某一轮算出的结果和上一轮完全相同,甚至残差变大,检查公式、检查矩阵都没问题,最后发现是初值抄错了。
原因:手算表格里上一轮的实部、虚部、幅值、相角分列在不同列,下一轮抄初值时光看幅值、少了虚部的负号,或错位串了列。
解决:用固定模板五列记录:节点号、电压实部、电压虚部、幅值、残差。抄完下一轮初值先自检一条公式:幅值² = 实部² + 虚部²,算一次算不过去,说明抄错了,先改正再继续。这一步多花十秒钟,能避免后边半小时返工。
6. 把手算流程变成可复核的表格:验证与延伸
6.1 把迭代记录表搬进电子表格
第 4 章的迭代记录表其实就是一套手工程序。把它搬进电子表格很直接:把 U_1、Y_21、Y_22、S_2 分别填到固定单元格,用工作表函数做复数四则运算,按 GS 公式的引用顺序往下拖,每一行就是一迭代轮次。第一次写会狼狈,但写完会发现,电子表格里单元格的引用顺序和手算顺序完全一致,这就是程序里迭代循环的雏形。我第一次在电子表格里跑通两节点潮流时,那种“原来程序是这样想的”的透亮感,比看任何流程图都管用。
6.2 从手算到程序:值得保留的两个习惯
从手算过渡到程序,有两个习惯值得原样保留。第一个是跟踪残差而不是只看最后结果。手算表里每轮的 ΔU 列,对应正式程序里的收敛监视器;程序不收敛时第一反应不该是调参数,而是看残差在哪个节点、哪一轮开始不降反升。第二个是把符号约定写清楚。手算表格的表头把“注入为正、负荷为负”钉死,程序里就写在注释里,道理完全相同,只是载体不同。
一个血泪教训:早期我手算三节点时偷懒没写 Q 越限检查列,PV 节点的无功越过上限也不知道。后来拿程序验证,两边有功对得上、无功差了快三成,查了将近半小时才定位到手算这一步的问题。从那以后,我的手工迭代表永远留一列给 Q 检查,这个习惯一直保留到今天。希望帮到你。
本文还有配套的精品资源,点击获取