三相不平衡潮流计算,在配电系统里是个绕不开的老话题。发输电网的潮流通常是三相平衡的,算单相就行,可配电网络不一样——大量单相负荷、单相光伏、不均衡的台区布局,导致三相电流根本不对称。这时候如果把三相当成平衡系统去算,结果从电压幅值到线损全是错的,尤其对配电网运维、分布式电源并网评估、台区负载率分析这些场景,误差大到不可接受。这文章我就直接围绕"三相不平衡潮流计算+前推回代+Matlab编程"来讲,把整个事情从原理到代码,从建模到调参,从踩坑到验证完整串一遍,给要做配电网三相潮流计算的读者一份可以直接动手复现的参考。
前推回代法(Forward/Backward Sweep)在辐射状配电网潮流计算里算是非常主流的算法,库里也有不少成熟的思路可以借鉴。它相比牛顿法最大的优势是不需要求雅可比矩阵,只要把支路电流从负荷侧往电源侧推回去(回代),再根据电源电压和回代得到的电压降从电源侧往负荷侧推回来(前推),反复迭代就能收敛。三相不平衡场景下,把单相模型扩展成A/B/C三相的相域模型,每一相都独立计算电流和电压,支路之间再考虑相间互阻抗,整个过程在Matlab里实现起来清晰又直接。
我会把自己在实际编程中比较顺手的实现框架、数据结构、迭代内核调参细节全部写出来,同时把那些一不留神就掉进去的坑——比如相角基准怎么定、变压器联结组别怎么处理、电流单位和标幺值混用问题——一并拆开讲透。
1. 为什么配电网络的三相不平衡计算绕不开前推回代法
先捋清楚一个问题:什么情况下你明确需要三相不平衡潮流,而不是单相平衡潮流。
输电网里负荷基本都是三相平衡的,线路换位也比较规范,所以把系统化简成单相正序模型没问题。但配电网完全是另一个世界——农村台区里A相挂了三十户、B相挂了十户是常态,单相光伏大量接入某相,台区出口的三相电流不平衡率超过百分之三四十很正常。这时候如果强行用单相平衡模型去算,至少会有两个严重偏差:第一,电压降幅被低估,因为忽略了零序和负序分量的附加压降;第二,线损算不准,因为中性线回流电流和三相不均衡带来的附加损耗全被漏掉了。
我在实际做配网改造项目时遇到过这样的案例:一个台区在重载时段用单相平衡潮流算出来末端电压是212V,满足要求,但用户实际量测到的电压只有196V,差出来的这十几伏,恰恰就是三相不平衡和相间互阻抗导致的。后来换成三相不平衡计算,结果和实测基本对上了。
1.1 平衡潮流算不准的几种典型场景
如果你的场景踩中下面任何一条,建议直接上三相不平衡模型:
- 单相负荷比例高,比如居民台区、农村电网,负荷分配天然不均衡;
- 有大量分布式光伏、小型风电接入,并且它们是单相逆变器接入的;
- 需要算低压台区的三相不平衡度、中性线电流、配电变压器负载率;
- 要评估末端低电压治理方案,比如加装调压器、无功补偿装置的位置选择;
- 线路末端有较大容量的单相或者两相负荷,导致中性点电压漂移明显。
在这些场景里如果不做三相不平衡潮流计算,结论基本不具备工程参考价值。
1.2 前推回代法为什么在配电领域成为主流
配电网潮流计算的难点和输电网完全不同。配电网是辐射状或者弱环状结构,支路电阻与电抗的比值(R/X)普遍在1~3之间,而输电网通常只有0.1左右。这个特性导致牛拉法和PQ分解法在配电网里很容易收敛困难,经典牛拉法虽然也能算,但每步求雅可比矩阵的代价太大,对一个几百节点的农村馈线来说没必要。
前推回代法的核心思路特别贴合辐射状网络的结构特性:因为只存在单一电源点提供电压支撑,潮流方向就是从电源流向每一个负荷节点,不存在环网功率分配的多解问题。这样就可以利用"支路电流叠加"这一数学结构,从末端往首端逐级累加电流,再从首端往末端逐级推算出电压降落,两个方向交替迭代,直到电压修正量小于预设门槛。
这种方法的实现复杂度低、内存占用小、对初值不敏感,而且在R/X比值高的网络里收敛特性非常好。三相不平衡场景下,把单相的标量运算变成三相互相耦合的矢量运算,整体框架依然成立。
2. 前推回代法在三相相域下的数学建模
要把三相不平衡前推回代写成代码,第一步不是写迭代循环,而是把数学模型吃透。这里我按单相逻辑推导再扩展到三相的思路展开,这也是我自己写代码时梳理算法的顺序。
2.1 单相前推回代的迭代逻辑
考虑一条简单的辐射状馈线,电源点为节点0,经过一条阻抗为Z的支路连接到负荷节点1。
回代过程:假设已知节点1的电压V₁,负荷功率为S₁,则节点1的注入电流为:
[ I_1 = \left(\frac{S_1}{V_1}\right)^* ]
然后把电流向电源侧逐级累加。对支路0-1来说,支路电流就是I₁。
前推过程:已知电源节点电压V₀,电流I₁流过支路阻抗Z,可以推出:
[ V_1^{(k+1)} = V_0 - Z \cdot I_1^{(k)} ]
这里k表示迭代次数。得到新的V₁以后,再用它更新I₁,如此反复,直到两次迭代之间电压向量差值的最大值小于收敛门槛。
整个迭代里其实隐含了一个物理事实:负荷节点电压未知,但我们先用一个初值(通常取额定电压)去估算电流,再根据电路定律把电压修正回来,修正完的电压又反过来让电流计算更准确,形成一个逐步逼近真实运行点的过程。
2.2 三相扩展:支路阻抗矩阵与相间耦合
三相情况比单相复杂的地方在于,每一相的电流流过线路时,不仅在本相产生电压降,还会通过互感在另外两相上感应出电压降。也就是说,三相输电线路的电压降方程是:
[ \begin{bmatrix} \Delta V_a \ \Delta V_b \ \Delta V_c \end{bmatrix}
\begin{bmatrix} Z_{aa} & Z_{ab} & Z_{ac} \ Z_{ba} & Z_{bb} & Z_{bc} \ Z_{ca} & Z_{cb} & Z_{cc} \end{bmatrix} \cdot \begin{bmatrix} I_a \ I_b \ I_c \end{bmatrix} ]
这里的Z矩阵不是对角阵,互阻抗元素就是相间耦合的体现。实际编程中,我习惯直接把每段线路的3x3阻抗矩阵存成一个数组,回代的时候逐支路做矩阵乘法,而不是拆开写成标量运算。这样代码逻辑简单,扩展起来也方便,后面再加变压器模型、串联电容器都不需要改结构。
有一点必须提醒:如果线路是等边三角形排列且经过充分换位,互阻抗可以被近似成三个相的平均值,Z矩阵呈现对称循环结构,可以简化成正序、负序、零序解耦计算。但配电网架空线路基本不换位,电缆线路各相空间位置也不对称,直接用相域模型最稳妥。
2.3 负荷模型的表达方式
三相不平衡潮流里,负荷模型的选择直接影响结果准确度。我在Matlab实现里支持三种模式:
- 恒功率模型:S = P + jQ,这是潮流计算的默认选择,适合稳态评估;
- 恒阻抗模型:Z = |V|²/S*,适合短路计算或者电压变化剧烈的场景;
- 恒电流模型:I = (S/V)*,适合一些中间过渡态模拟。
配电台区实际负荷大多是复合型的,居民负荷尤其明显,电压跌了空调压缩机转速变慢、白炽灯功率下降,既不是纯恒功率也不是纯恒阻抗。工程上常用ZIP模型来做折中:
[ S = S_0 \left[ Z_p \left(\frac{V}{V_0}\right)^2 + I_p \left(\frac{V}{V_0}\right) + P_p \right] ]
Z_p + I_p + P_p = 1。如果你手头没有详细的负荷成分数据,比较稳妥的做法是取Z_p=0.4、I_p=0.3、P_p=0.3,这在行业实践里是比较常用的估算值。但注意,如果论文里做的是标准算例对比,就统一用恒功率模型,方便和其他文献结果核对。
3. Matlab完整实现:数据结构、负荷模型与迭代内核
理论清楚了以后,我在Matlab里的实现框架是这样的,整个代码量在两百行以内就能跑通一个中等规模算例。
3.1 输入数据组织方式
第一步是设计数据结构。我习惯用结构体数组来存节点和支路信息,这样可读性最好,后面加数据也容易。
% 节点结构体 % bus.id : 节点编号 % bus.type : 节点类型,0为T接点(无负荷),1为负荷节点 % bus.S : 三相复功率,n×3复数矩阵 [Sa Sb Sc],单位VA % bus.V : 三相电压初值,n×3复数矩阵,单位V,初始一般取额定值 % 支路结构体 % branch.from : 首端节点编号 % branch.to : 末端节点编号 % branch.Zabc : 3×3相阻抗矩阵,单位Ω我构建测试网络的时候习惯把节点从0开始编号,0是电源节点(平衡节点),沿着辐射方向往下递增。这里有个关键细节:网络的父节点关系要提前算好,每个节点只允许有一个父节点,这样才能保证前推回代算法正确执行。
节点层次关系的获取我建议用一个简单遍历实现:
function children = find_children(branch, n_bus) % 返回 n_bus × cell 数组,children{i}存放节点i的所有直接子节点编号 children = cell(n_bus, 1); for k = 1:size(branch, 1) f = branch(k).from; t = branch(k).to; children{f+1}(end+1) = t; % 注意Matlab索引从1开始,节点编号从0开始要+1 end end3.2 回代过程:末端向首端累加支路电流
回代过程要从最末端节点开始,把"本节点负荷电流"加上"所有子节点流过来的电流"得到本节点所在支路的电流。
% 回代过程 function I_branch = backward_sweep(bus, branch, children, V, n_bus) I_branch = zeros(size(branch, 1), 3); % 每条支路的三相电流 I_load = zeros(n_bus, 3); % 计算每个节点的等效注入电流 for i = 1:n_bus if bus(i+1).type == 1 % 负荷节点 for ph = 1:3 if abs(V(i, ph)) > 1e-10 I_load(i+1, ph) = conj(bus(i+1).S(i, ph) / V(i, ph)); end end end end % 逆序遍历节点,累加支路电流 for i = n_bus:-1:2 % i是节点编号,0号为电源节点不计算 % 找到以i为末端的支路索引 b_idx = find_branch_by_to(branch, i-1); % 节点i-1对应当前节点 if isempty(b_idx) continue; end % 本支路电流 = 本节点负荷电流 + 所有子支路电流 I_branch(b_idx, :) = I_load(i, :); child_list = children{i}; for c = 1:length(child_list) cb_idx = find_branch_by_to(branch, child_list(c)); if ~isempty(cb_idx) I_branch(b_idx, :) = I_branch(b_idx, :) + I_branch(cb_idx, :); end end end end上面这段是框架性代码。实际写的时候,一开始可以先把每个节点的子支路电流索引提前缓存好,能省掉大量重复的find操作。对大网络来说,循环里反复find是很影响性能的。
3.3 前推过程:从电源向负荷修正电压
前推过程相对简单,就是从电源出发,用已知父节点电压减去支路电流在支路阻抗上的压降。
function V = forward_sweep(bus, branch, children, V_init, I_branch) n_bus = size(bus, 1); V = V_init; % 深度优先遍历:从电源节点0开始 stack = 0; while ~isempty(stack) n = stack(end); stack(end) = []; % 对每个子节点,更新电压 for c = children{n+1} b_idx = find_branch_by_from(branch, n); if isempty(b_idx) b_idx = find_branch_by_to(branch, c); % 找到对应支路 end % 电压 = 父电压 - Z * I V(c+1, :) = V(n+1, :).' - (branch(b_idx).Zabc * I_branch(b_idx, :).').'; % 子节点入栈 stack(end+1) = c; end end end这里有一个很重要的向量化细节。Matlab里特别忌讳逐相做三次标量运算,直接把电压行向量转置成3×1,和3×3阻抗矩阵相乘,得到3×1的压降向量,再转置回来赋值,就是一次完成三相计算。我见过不少人在这里写成三个for循环,性能差了很多,代码还难看。
3.4 主迭代循环与收敛判据
主循环就是把回代和前推串起来,加上收敛判据。
function V = run_forward_backward(bus, branch, load, tol, max_iter) n_bus = size(bus, 1); V = ones(n_bus, 3) * 1.0; V(:, 1) = 1.0 * exp(1j * 0); V(:, 2) = 1.0 * exp(-1j * 2 * pi / 3); V(:, 3) = 1.0 * exp(1j * 2 * pi / 3); % 注意:这里用的是标幺值,初值取额定电压1.0∠0°、1.0∠-120°、1.0∠120° children = find_children(branch, n_bus); for k = 1:max_iter I_branch = backward_sweep(bus, branch, children, V, n_bus); V_new = forward_sweep(bus, branch, children, V, I_branch); % 收敛判据:三相电压最大偏差 diff = max(max(abs(V_new - V))); V = V_new; if diff < tol fprintf('迭代%d次收敛,误差%e\n', k, diff); return; end end warning('达到最大迭代次数仍未收敛,最终误差%f\n', diff); end收敛门槛我一般取1e-8(标幺值),对应实际电压0.000022V的精度(以10kV为基准),工程上完全足够。如果你只需要评估电压是否越限,取1e-6就够了,迭代次数会少很多。
3.5 负荷模型嵌入细节
如果要用ZIP负荷模型,上面backward_sweep中计算I_load那句要换掉。不能直接用初始给定功率去算电流,而是要根据当前迭代步的电压V动态计算等效功率:
% ZIP模型:根据当前电压计算注入功率 V_mag = abs(V); S_eff = load.S0 .* (zp * (V_mag / V_base).^2 + ip * (V_mag / V_base) + pp); % 这里load.S0是额定电压下的三相功率,zp/ip/pp是三类负荷比例系数 I_load(i+1, ph) = conj(S_eff(i, ph) / V(i, ph));为什么要动态更新?因为ZIP模型的本质就是电压灵敏度特性,如果固定用额定功率去算电流,实际计算出来的电压和功率关系就错了,迭代收敛的结果也会偏离真实运行状态。这是我调试时踩过的坑之一,后面会细说。
4. 收敛控制、加速技巧与结果校验
很多人把前推回代写出来以后,发现有些算例不收敛,或者收敛非常慢,于是怀疑算法有问题。其实大部分情况是收敛控制和迭代组织方式的问题。
4.1 为什么直接迭代会振荡
前推回代法的本质是一种不动点迭代,它的收敛性在辐射状网络里理论上是有保障的,但实际编程中如果负荷模型是恒功率(恒功率负荷的等效阻抗是电压的负函数),当某相电压偏低时,恒功率负荷需要的电流会变大,电流变大会让电压降更大,形成正反馈。在重载或轻载边界情况下,这会导致迭代过程中的电压振荡,常见表现是某几次迭代电压忽高忽低,误差迟迟降不下去。
处理这个问题的标准做法是引入阻尼系数,或者叫松弛因子。每次前推得到的电压不要直接采用,而是和上一轮加权平均:
V = V_old + alpha * (V_new - V_old);alpha取值在0.5~0.9之间。重载网络或者末端电压偏低的网络建议取0.5~0.7,轻载网络取0.8~0.9效率最高。这里有一个经验法则:如果迭代误差曲线上下振荡,先把alpha降到0.5看是否稳定,稳定了再逐步调大。
4.2 节点分层预处理,加快计算
一个非常有用的加速技巧,是在迭代前先对节点做拓扑分层,而不是每次遍历都用逆序去扫。具体做法是:从电源节点开始,按支路父子关系做一次广度优先搜索,得到每个节点的"层号"。回代时从最大层号的节点降序遍历,前推时从电源节点按层号增序遍历,这样每个支路的电流叠加计算只需要做一次加法(因为子节点电流都已经计算完毕),不需要每次都去找子支路。
我自己的实现里,preprocessing函数大概是这样的:
function [children, layer] = topological_sort(branch, n_bus) children = cell(n_bus, 1); layer = zeros(n_bus, 1); % 电源节点层号为0 queue = 0; head = 1; while head <= length(queue) n = queue(head); head = head + 1; for k = 1:size(branch, 1) if branch(k).from == n t = branch(k).to; children{n+1}(end+1) = t; layer(t+1) = layer(n+1) + 1; queue(end+1) = t; end end end end这样建立好层次关系之后,回代过程按层号从大到小,前推按层号从小到大,代码清晰且每一步的支路电流只和已经计算出来的子支路有关,逻辑也不会出错。
4.3 三相结果校验的五个维度
算完的结果不能直接用,我的习惯是做下面这组校验,全部通过才认为结果可信:
- 功率平衡校验:电源节点的三相输出功率之和是否等于总负荷功率加全网总损耗。允许误差一般在0.5%以内。如果超了,通常是互阻抗矩阵或者电流累加时漏了某条支路。
- 电压合理性:所有节点三相电压幅值应该在合理范围内,通常0.85~1.1(标幺值),如果出现异常高的电压,大概率是负荷电流方向处理反了。
- 支路电流连续性:对任意一个T接节点,流入电流之和等于流出电流之和(基尔霍夫电流定律)。矩阵运算实现容易出错,这能快速定位错误支路。
- 三相不平衡度复核:根据电压/电流相序分量计算不平衡度,与实测值或历史数据对比。这不算严格校验,但能侧面反映模型参数(尤其是互阻抗)是否合理。
- 已知解测试:用一个手算可以验证的两节点三线制简单网络去跑程序,确认程序本身无误,再上复杂网络。
5. 实操中踩过的五个典型坑
这部分是把我在做三相不平衡潮流计算时真实遇到过的坑写出来,有些查了很久资料才找到原因,希望读者别重复走弯路。
5.1 初始相角的参考方向
三相系统的初始电压,很多人会直接写V = [1, 1, 1],然后设置三相功率是[Sa, Sb, Sc]复数,跑出来结果乱七八糟。
原因在于:前推回代法对初值其实不敏感,但如果三相初值完全同相(都为1∠0°),第一次回代计算负荷电流时,三相电流的相位关系就是由负荷功率初相角决定的,迭代过程中电压相角会逐渐被修正,但如果计算中间某次出现幅值很小的电压,除法运算会产生很大的虚假电流,数值上就出现病态。
我的解决方法是严格按照对称三相系统的相序设置初值:
V_init = [1.0 * exp(1j * 0); 1.0 * exp(-1j * 2 * pi / 3); 1.0 * exp(1j * 2 * pi / 3)];这样迭代一开始就处于一个接近真实运行点的状态,收敛速度快很多。
5.2 变压器联结组别处理不当
三相潮流计算里变压器绝不能只用一个等效阻抗去建模。配电变压器常见的联结组别有Dyn11、Yyn0等,Dyn11一次侧是三角形接法,二次侧星形带中性线,一次侧和二次侧之间除了变比关系,还有30度的相角位移。如果直接忽略这个相角位移,计算结果里低压侧的三相电压相角会整体偏30度,和实测严重不符。
工程上比较实用的做法是:把变压器的电压变比乘以一个相角偏移因子e^{jθ},θ根据联结组别确定。Dyn11的θ是+30度(取决于高低压侧的同名端对应关系),Yyn0的θ是0度。
这个细节在处理含多台变压器的网络时非常致命。如果你把变压器相角位移搞错了,计算收敛没问题,但最终所有低压侧母线电压、线路电流全部偏移,算出来的损耗和实测偏差能到两位数百分比。
5.3 中性线阻抗与接地方式
低压配电网三相四线制系统,中性线电流和中性点电压偏移是三相不平衡分析的核心指标。很多入门实现里直接把中性线阻抗设为零,简化成三相三线制模型,这就把三相不平衡计算最重要的输出量——中性线电流——给丢了。
正确的做法是:对每一段低压线路,都要建立完整的4x4阻抗矩阵,包括A/B/C三相和N线,其中N线与其他相之间存在互阻抗。如果数据不全,至少也要给N线一个单独的自阻抗,在三相电流不平衡时能体现中性点电压漂移的效果。
我在实际工程中往往这样处理:如果架空线路导线型号相同、间距已知,可以用Carson公式或近似公式计算每条线路的3x4相地阻抗矩阵,再通过Kron消去法简化成3x3相阻抗矩阵。Kron消去的本质是把中性线电流这个未知量消掉,得到一个等效的3x3阻抗矩阵,同时隐含考虑了接地回路的影响。这是低压台区计算很常用的做法。
这里给一个简化参考:对于常见的LGJ-120架空线,三相间距布置标准时,每千米的正序阻抗约0.27Ω,但低压线路由于间距小、互阻抗大,三相不平衡计算必须用完整的3x3矩阵而不是只用正序阻抗。网上有些教程直接拿正序阻抗往三个相上填,对角线填Z,非对角线填0,这种做法在配电三相不平衡场景下会低估相间耦合效应,末端电压误差可到2%~3%。
5.4 分布式电源模型的收敛性陷阱
现在台区里分布式光伏到处都是。三相不平衡潮流计算里,光伏逆变器的模型和普通负荷完全不同。恒功率PQ模型在光伏出力大、线路阻抗大的情况下很容易让迭代振荡。
我遇到过的场景是这样的:一个台区末端接了单相光伏,容量还不小,出力0.3MW,线路阻抗较大。用恒功率模型跑前推回代,在第15次迭代开始电压振荡,始终不收敛。后来把光伏模型改成恒电压控制模式(PV节点模型,但需要特殊处理因为它是单相接入),问题才解决。
单相光伏的模型我建议这样处理:如果已知逆变器输出电压控制目标,就把它当作PV节点,迭代过程中每次前推后都要修正该节点的无功功率,使电压幅值维持在设定值附近;如果只知道有功出力,就按恒功率模型处理,但要加阻尼系数,或者用电流注入模型(I = (S/V)^*)而不是导纳模型。
5.5 耐人寻味的"收敛但错误"问题
最坑的一种情况是:迭代收敛了,判据也通过了,结果却是错的。我遇到过一次,原因是两个节点编错号,导致支路父子关系错乱,但形成的网络拓扑仍然是一棵合法树,算法照样收敛。收敛后电压全落在0.95~1.05之间,看着很正常,但支路电流分布完全错了。
这就是为什么我反复强调拓扑预处理和基尔霍夫电流校验的重要性。每一条支路电流应该满足:流入某节点的电流总和等于流出该节点的电流总和加上该节点负荷电流。建议在每次迭代结尾加一个可选的校验开关,至少跑通一次后校验通过再去跑批量案例。
6. 测试算例、Matlab性能优化与工程延伸
最后讲一下我怎么验证程序以及怎么把它扩展成工程可用的计算工具。
6.1 一个手算可验的两节点算例
用这个案例确保程序正确性。
假设一个简单的三相三线制系统:电源点电压为10kV(标幺值1.0),经过一条阻抗矩阵为Z的线路,末端带一个三相平衡恒功率负荷S = 1MW + j0.5Mvar。
如果阻抗矩阵是对角的(忽略互阻抗),每相阻抗为z = 0.5 + j1.0Ω,基准电压取相电压10kV/√3,那么每相负荷电流的标幺值是:
[ I_{ph} = \frac{S_{ph}^}{3 \cdot V_{ph}^} ]
末端电压近似:
[ V_{load, ph} \approx 1.0 - Z_{ph,ph} \cdot I_{ph} ]
这个两节点问题用复数运算手算一遍,再和程序输出对比。如果完全一致,说明程序基本逻辑正确。我曾用这种最简单案例在十分钟内定位到一处"共轭符号写反"的bug——三相电流公式里共轭符号错了,但程序仍能收敛,只是结果整体偏高。
6.2 避免在循环里做重复计算
三相前推回代在Matlab里的性能瓶颈很少出现在数学运算本身,更多是出现在数据索引和循环结构上。
我的几个建议:
- 提前把每个节点对应的支路索引存储成向量node_branch_idx,避免循环里find;
- 用稀疏矩阵存储网络的父子关系,避免在循环里反复查询cell数组;
- 如果对性能要求很高,把整个回代和前推过程向量化,用矩阵运算一次处理同层节点;
- 对含几千个节点的配电网,直接用稀疏矩阵做"支路电流=关联矩阵×节点注入电流"这种整体运算,比逐条支路遍历快一个数量级。
6.3 从Matlab原型到工程平台
Matlab原型验证完之后,真正做大型配电网计算,通常会把核心算法移植到Python、C++或者专业配电计算平台里。但Matlab版的价值在于:功能验证、算法对比和教学演示非常方便,尤其在研究生课题和科研项目里属于标配工具。
如果你要在Matlab里做出更完整的版本,建议扩展这几个方向:
- 弱环网处理:配电网并非严格辐射状,有些地方存在联络开关闭合的情况。前推回代法不能直接处理环网,常见方案是先把环在联络点处断开,用断点功率补偿法迭代修正;
- 多平衡节点:某些网络存在多个电源点(分布式电源大量接入),需要把DG节点逐步处理为PV节点或平衡节点;
- 故障态潮流:不对称短路故障后的潮流分布,需要修改网络阻抗矩阵并调整边界条件;
- 时序潮流计算:配合负荷曲线和光伏出力曲线,做一天96点甚至全年8760小时的连续潮流计算,用于台区规划分析。
这些方向我自己后续都有实践,但那是另一篇文章的篇幅了。这篇文章主要帮你在Matlab里把三相不平衡前推回代从原理到代码完整走通,这已经是配电网分析里非常核心的一块地基。
关于收敛参数,我最终习惯的组合是阻尼系数0.7、收敛门槛1e-8(标幺值)、最大迭代次数50。对绝大多数配电网络,40次以内肯定收敛。如果你在做大规模系统,建议把迭代误差输出打开,收敛曲线会告诉你当前网络处于重载还是轻载状态,这对接下来的方案设计有价值。