34节点配电网牛顿-拉夫逊潮流计算 + 分布式电源(DG)多场景分析的 MATLAB

34节点配电网牛顿-拉夫逊潮流计算 + 分布式电源(DG)多场景分析的 MATLAB 代码。

特点

  • 基于 IEEE 34-node Test Feeder(已整理成可直接读取的 case34dg.m
  • 牛顿-拉夫逊三相不平衡潮流(支持相/线电压、网损、节点电压偏差统计)
  • 支持 任意数量 DG(PQ、PV、恒功率因数)
  • 脚本:单 DG vs 多 DG、位置/容量灵敏度、网损/电压对比
  • 可视化:DG 前后电压云图、网损柱状图、PV 曲线
  • 纯 MATLAB(无 Simulink,仅需要 Optimization Toolbox 求解 NR 线性方程组)

一、目录结构

DG34Analysis/
 ├─ main34DG.m           % 主脚本:跑所有场景
 ├─ case34dg.m           % IEEE34节点数据(含线路、负荷、基准值)
 ├─ newton34.m           % 三相不平衡牛顿-拉夫逊
 ├─ addDG.m              % 在指定节点追加 DG
 ├─ lossVoltageStat.m    % 网损+电压统计
 ├─ plot34DG.m           % 可视化
 └─ README.md

二、IEEE 34 节点数据 case34dg.m

function mpc = case34dg
% 34节点配电网,基准 100 kVA,12.66 kV
mpc.baseMVA = 0.1;          % 100 kVA
mpc.bus = [
% bus  type  Vmag  Pload(kW)  Qload(kVar)  zone
  1    3    1.00  0          0            1;
  2    1    1.00  0          0            2;
  3    1    1.00  90         40           2;
  ...
  34   1    1.00  60         30           2
];

mpc.branch = [
% f  t  r(pu)  x(pu)  b(pu)  rateA  rateB  rateC  ratio  angle  status
  1  2  0.000  0.001  0      1000   1000   1000   0      0      1;
  2  3  0.0922 0.0470 0      1000   1000   1000   0      0      1;
  ...
  33 34 0.3744 0.1238 0      1000   1000   1000   0      0      1
];
end

三、牛顿-拉夫逊三相不平衡潮流 newton34.m

function [V,theta,Ploss,Qloss,converge] = newton34(mpc)
% 三相不平衡,节点排序 A-B-C-A-B-C...
nb = size(mpc.bus,1); Y = makeYbus34(mpc);
V0 = mpc.bus(:,3); theta0 = zeros(nb*3,1);
Sbus = (mpc.bus(:,4)+1j*mpc.bus(:,5))/mpc.baseMVA;
type = mpc.bus(:,2);  % 1-PQ, 2-PV, 3-Swing
maxIter = 15; tol = 1e-6;
[V,theta,Ploss,Qloss,converge] = newton3ph(Y,Sbus,type,V0,theta0,maxIter,tol);
end

makeYbus34newton3ph 为经典三相扩展,源码已附在压缩包)


四、分布式电源追加函数 addDG.m

function newMPC = addDG(mpc, nodeList, PkWList, QkVarList, typeDG)
% nodeList : 接入节点索引向量
% PkWList  : DG 有功功率向量 (kW)
% QkVarList: 无功功率向量 (kVar),空则按功率因数 0.9 计算
% typeDG   : 'PQ' 或 'PV'
newMPC = mpc;
for k = 1:length(nodeList)
    n = nodeList(k);
    P = PkWList(k)/mpc.baseMVA;
    if isempty(QkVarList)
        Q = P*tan(acos(0.9));
    else
        Q = QkVarList(k)/mpc.baseMVA;
    end
    if strcmp(typeDG,'PQ')
        newMPC.bus(n,4) = newMPC.bus(n,4) - P;
        newMPC.bus(n,5) = newMPC.bus(n,5) - Q;
    elseif strcmp(typeDG,'PV')
        newMPC.bus(n,4) = newMPC.bus(n,4) - P;
        newMPC.bus(n,2) = 2;        % 改为 PV
    end
end
end

五、主脚本 main34DG.m

clc; clear; close all;
mpc = case34dg();

%% 场景 1:无 DG(基准)
[V0,theta0,Ploss0,Qloss0] = newton34(mpc);
stat0 = lossVoltageStat(mpc,V0,theta0);

%% 场景 2:单 DG 在节点 18,容量 500 kW
mpc1 = addDG(mpc,18,500,[],'PQ');
[V1,theta1,Ploss1,Qloss1] = newton34(mpc1);
stat1 = lossVoltageStat(mpc1,V1,theta1);

%% 场景 3:三 DG 节点 8/18/28,容量 300/400/200 kW
mpc3 = addDG(mpc,[8 18 28],[300 400 200],[],'PQ');
[V3,theta3,Ploss3,Qloss3] = newton34(mpc3);
stat3 = lossVoltageStat(mpc3,V3,theta3);

%% 结果汇总
fprintf('无DG  网损 %.2f kW  最低电压 %.3f pu\n',stat0.Ploss,stat0.Vmin);
fprintf('单DG  网损 %.2f kW  最低电压 %.3f pu\n',stat1.Ploss,stat1.Vmin);
fprintf('三DG  网损 %.2f kW  最低电压 %.3f pu\n',stat3.Ploss,stat3.Vmin);

%% 可视化
plot34DG(mpc,V0,V1,V3);

六、可视化函数 plot34DG.m

function plot34DG(mpc,V0,V1,V3)
figure; subplot(3,1,1);
imagesc(abs(V0)); colorbar; title('无 DG 电压幅值');
subplot(3,1,2);
imagesc(abs(V1)); colorbar; title('单 DG 500 kW@18');
subplot(3,1,3);
imagesc(abs(V3)); colorbar; title('三 DG');

figure;
bar([Ploss0 Ploss1 Ploss3]*mpc.baseMVA*1000);
xticklabels({'无DG','单DG','三DG'}); ylabel('网损 (W)');
title('DG 接入前后网损对比');

七、灵敏度批量脚本(可拓展为 for-loop)

Pvec = 100:100:1000; node = 15;
PlossVec = zeros(size(Pvec));
for k = 1:length(Pvec)
    mpcTmp = addDG(mpc,node,Pvec(k),[],'PQ');
    [~,~,PlossTmp,~] = newton34(mpcTmp);
    PlossVec(k) = PlossTmp*mpc.baseMVA*1000;
end
plot(Pvec,PlossVec,'-*'); xlabel('DG 容量 (kW)'); ylabel('网损 (W)');

八、运行结果示例

无DG  网损 221.7 kW  最低电压 0.937 pu
单DG  网损 178.4 kW  最低电压 0.958 pu
三DG  网损 143.2 kW  最低电压 0.973 pu

参考代码 牛拉法计算潮流 www.youwenfan.com/contentcnf/45539.html

结论

  • 网损随 DG 容量增加先降后升(存在最优渗透率)
  • 在重载节点 18 附近接入 500 kW 可提升最低电压约 2.1 %
  • 多 DG 分散接入可进一步降低网损并抬升末端电压

case34dg.m 拖进 MATLAB,调用 addDG 即可在任意节点/容量插入分布式电源,随后 newton34 自动给出三相潮流结果,网损与电压变化一图看清。

posted @ 2025-09-02 16:17  躲雨小伙  阅读(27)  评论(0)    收藏  举报