matlab潮流计算程序_基于MATLAB的两机五节点潮流计算

本文介绍了基于MATLAB的两机五节点潮流计算程序,涉及高斯法、牛顿法等现代电力系统潮流计算方法。通过解读busdata和linedata文件,程序根据节点类型和线路数据进行潮流计算,迭代调整以满足电压和无功功率限定值。程序适用于不同类型的节点,包括PQ节点、平衡节点和PV节点,并提供了具体的MATLAB代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击上方蓝字关注“公众号”

46e2abdb137d071cd2044f5282d8e6b9.gif

MATLAB的两机五节点潮流计算程序

现代电力系统潮流计算的方法主要:高斯法、牛顿法、快速解耦法。

0809bf3a69b4f6dfb9db62fae60b657b.gif

用高斯法对实际电力系统进行潮流计算,需要用到busdata和linedata两个文件。

程序设计为输入负荷和发电机的有功MW和无功Mvar,以及节点电压标幺值和相角的角度值。根据所选复功率为基准值将负荷和发电机的功率转换为标幺值。9eaec5fe3510463c108467e4e7164f0f.gif

对于PV节点,如发电机节点,要提供一个无功功率限定值。当给定电压过高或过低时,无功功率可能超出功率限定值。

在几次迭代之后(高斯-塞德尔迭代为10次),需要检查一次发电机节点的无功出力,如果接近限定值,电压幅值进行上下5%的调整,使得无功保持在限定值内。

f54c1fe22a969c8cc7cf8cc356f1a647.pnge837f09f7ffd8d73b219c9492fc2cbfe.png

节点数据busdata

节点数据文件busdata:节点信息输入格式为单行输入,输入的数据形成一个矩阵,叫做busdata矩阵。

第一列为节点号;

第二列为节点类型;

第三列和第四列分别为节点电压幅值(标幺值)和相角(单位为度);

第五列和第六列分别为负荷的有功功率和无功功率;

第七列到十列分别为发电机的有功功率、无功功率、最小无功出力和最大无功出力;

最后一列为并联电容器注入无功功率。

4de41ae7d6fb5283847c68a36a4be488.png

01

第二列的编码用0、1、2来区分PQ节点、平衡节点和PV节点:
  0表示PQ节点,输入正的有功功率(MW)和无功功率(Mvar),并且要设定节点电压初始估计值,一般幅值和相角分别设为1和0,若已经给定初始值,则用其给定值来代替1和0。
  1表示平衡节点,且已知该节点的电压幅值和相角。

   2表示PV节点,要设定该节点的节点电压幅值和发电机的有功功率(MW),并设定发电机的无功最小出力和最大出力(Mvar)。

8a7a9995af9032a7fac8aeeab3165b73.gif

02

线路数据linedata

线路数据文件linedata线路数据用节点对的方法来确定,数据包含在称为linedata的矩阵中。

第一列和第二列为节点号码,

第三列到第五列为线路电阻、电抗及该线路电纳值的一半,以标幺值表示。

最后一列为变压器分接头设定值,对线路来说,需要输入1。

线路输入为无输入顺序,对变压器来说,左侧的节点号设为分接头端。

3e89876a0975e67e323a98003f2a7dd3.gif

根据自己实际的五节点两机图,结合上面的理论知识,编写busdata。

6e43bb3b8bef9bd40b57c0d01c5d33fb.png

    

01

根据自己实际的五节点两机图,结合上面的理论知识,编写linedata。 

 

d3cec157090e4dbb3980db5ef3a54222.png

将上面两个文件保存命名为fivebus。

02

高斯-赛德尔法潮流程序编写:

clear;
clc;
fivebus
bus1 = busdata(:,1);
bus2 = busdata(:,2);
bus3 = busdata(:,3);
% Theta = busdata(:,4)*pi/180;
Theta = busdata(:,4);
PL = busdata(:,5);
QL = busdata(:,6);
PG = busdata(:,7);
QG = busdata(:,8);
Nbus = length(bus1);
v=zeros(Nbus,2);
v(:,1)=bus3;
v(:,2)=Theta;
Br1 = linedata(:,1);
Br2 = linedata(:,2);
LR  = linedata(:,3);
LX  = linedata(:,4);
LB  = linedata(:,5);
Tap = linedata(:,6);
Nline= length(Br1);
%------------形成导纳矩阵Y----------------
Y = zeros(Nbus,Nbus);
   %---------导纳矩阵的对角线元素---------
for ii = 1:Nbus
    for jj = 1:Nline
        if Br1(jj) == ii
            Y(ii,ii) = Y(ii,ii)+1/(LR(jj)+LX(jj)*1i)*(1/Tap(jj)^2)+1i*LB(jj);
        elseif Br2(jj) == ii
            Y(ii,ii) = Y(ii,ii)+1/(LR(jj)+LX(jj)*1i)+1i*LB(jj);
        end
    end
end
   %---------导纳矩阵的非对角线元素--------
for ii = 1:Nline
    Y(Br1(ii),Br2(ii)) = Y(Br1(ii),Br2(ii))-1/(LR(ii)+LX(ii)*1i)*(1/Tap(ii));
    Y(Br2(ii),Br1(ii)) = Y(Br1(ii),Br2(ii));
end
%------------导纳矩阵Y-end----------------
G = real(Y);
B = imag(Y);
U=bus3;
D=Theta;
UU=zeros(Nbus,1);
for i=1:Nbus
   UU(i)=U(i)*(cos(D(i))+1i*sin(D(i)));%UU为复数
end
DD=D;
P=PG-PL;
Q=QG-QL;
k=0;%迭代次数
e=0.00001;%迭代精度
UU_former=zeros(Nbus,1);
delta_e=UU-UU_former;
tic;
while max(abs(delta_e))>e && k<2000
    UU_former=UU;
for i=1:Nbus
    if bus2(i)==1
        continue;
    else if bus2(i)==2
            UU(i)=U(i)*(cos(angle(UU(i)))+1i*sin(angle(UU(i))));        %重设PV节点的电压幅值
            T1_Q=0; %计算PV节点的无功Q
            for j=1:Nbus                 
                    T1_Q=T1_Q+conj(Y(i,j))*conj(UU(j));
            end
            Q(i)=imag(UU(i)*T1_Q);
            T1_U=0;
            for j=1:Nbus           %进行电压迭代
                if(j~=i)
                    T1_U=T1_U+Y(i,j)*UU(j);
                end
            end
            UU(i)= (1/Y(i,i))*((P(i)-1i*Q(i))/conj(UU(i))-T1_U);
        else
            T1_U=0;
            for j=1:Nbus           %进行电压迭代                
                if(j~=i)
                    T1_U=T1_U+Y(i,j)*UU(j);
                end
            end
            UU(i)=(1/Y(i,i))*((P(i)-1i*Q(i))/conj(UU(i))-T1_U);
        end
    end
end
k=k+1;
delta_e=UU-UU_former;
end
toc;
U_amp=abs(UU);
V=abs(U_amp)*230; %幅值
U_ang=angle(UU);
U_deg=U_ang*180/pi;               

03

牛顿-拉弗逊算法程序编写:

clear;
clc;
fivebus
bus1 = busdata(:,1);
bus2 = busdata(:,2);
bus3 = busdata(:,3);
Theta = busdata(:,4)*pi/180;
PL = busdata(:,5);
QL = busdata(:,6);
PG = busdata(:,7);
QG = busdata(:,8);
Nbus = length(bus1);
v=zeros(Nbus,2);
v(:,1)=bus3;
v(:,2)=[0 0 0 0 0]';
Br1 = linedata(:,1);
Br2 = linedata(:,2);
LR  = linedata(:,3);
LX  = linedata(:,4);
LB  = linedata(:,5);
Tap = linedata(:,6);
Nline= length(Br1);
%------------形成导纳矩阵Y----------------
Y = zeros(Nbus,Nbus);
   %---------导纳矩阵的对角线元素---------
for ii = 1:Nbus
    for jj = 1:Nline
        if Br1(jj) == ii
            Y(ii,ii) = Y(ii,ii)+1/(LR(jj)+LX(jj)*1i)*(1/Tap(jj)^2)+1i*LB(jj);
        elseif Br2(jj) == ii
            Y(ii,ii) = Y(ii,ii)+1/(LR(jj)+LX(jj)*1i)+1i*LB(jj);
        end
    end
end
   %---------导纳矩阵的非对角线元素--------
for ii = 1:Nline
    Y(Br1(ii),Br2(ii)) = Y(Br1(ii),Br2(ii))-1/(LR(ii)+LX(ii)*1i)*(1/Tap(ii));
    Y(Br2(ii),Br1(ii)) = Y(Br1(ii),Br2(ii));
end
%------------导纳矩阵Y-end----------------
G = real(Y);
B = imag(Y);
e = v(:,1);
f = v(:,2);
%-----------利用直角坐标求解潮流------------
P=zeros(Nbus,1);
Q=zeros(Nbus,1);
U2=zeros(Nbus,1);%PV节点电压的平方
for ii=1:Nbus
    if bus2(ii)==2
        U2(ii)=bus3(ii)^2;
    end
end
delta_e=ones(Nbus,1);
delta_f=ones(Nbus,1);
delta_e(5)=0;
delta_f(5)=0;
Delta_PQ=zeros(2*Nbus,1);
delta_P=PG-PL;
delta_Q=QG-QL;
Miter=100;    %迭代次数限制
k=0;
tic;
while  k=0.0001 && max(abs(delta_f))>=0.0001
    k=k+1;
    U3=zeros(Nbus,1);%PV节点电压的平方
    T1_P=zeros(Nbus,1);
    T2_P=zeros(Nbus,1);
    T1=zeros(Nbus,1);
    T2=zeros(Nbus,1);
 for ii=1:Nbus
      if  bus2(ii)==0
        for jj=1:Nbus
           T1_P(ii)=T1_P(ii)+G(ii,jj)*e(jj)-B(ii,jj)*f(jj);
           T2_P(ii)=T2_P(ii)+G(ii,jj)*f(jj)+B(ii,jj)*e(jj);
        end
        P(ii)=T1_P(ii)*e(ii)+T2_P(ii)*f(ii);
        Q(ii)=T1_P(ii)*f(ii)-T2_P(ii)*e(ii);
    elseif bus2(ii)==2
         for jj=1:Nbus
           T1_P(ii)=T1_P(ii)+G(ii,jj)*e(jj)-B(ii,jj)*f(jj);
           T2_P(ii)=T2_P(ii)+G(ii,jj)*f(jj)+B(ii,jj)*e(jj);
         end
        P(ii)=T1_P(ii)*e(ii)+T2_P(ii)*f(ii);
        U3(ii)=e(ii)^2+f(ii)^2;
      end
 end
 for ii=1:Nbus
       if bus2(ii)==0
         Delta_PQ(2*ii-1)=delta_P(ii)-P(ii);
         Delta_PQ(2*ii)=delta_Q(ii)-Q(ii);
     elseif bus2(ii)==2
         Delta_PQ(2*ii-1)=delta_P(ii)-P(ii);
         Delta_PQ(2*ii)=U2(ii)-U3(ii);
     end
 end
        %-----------形成雅克比矩阵JJ-----------
  J=zeros(2*Nbus,2*Nbus);
 for ii=1:Nbus
      if bus2(ii)==0
        for jj=1:Nbus
            if ii~=jj
                J(2*ii-1,2*jj-1)=-B(ii,jj)*e(ii)+G(ii,jj)*f(ii);
                J(2*ii-1,2*jj)=G(ii,jj)*e(ii)+B(ii,jj)*f(ii);
                J(2*ii,2*jj-1)=-J(2*ii-1,2*jj);
                J(2*ii,2*jj)=J(2*ii-1,2*jj-1);
            elseif ii==jj
                for kk=1:Nbus
                    T1(jj)=T1(jj)+G(jj,kk)*f(kk)+B(jj,kk)*e(kk);%T1=b
                    T2(jj)=T2(jj)+G(jj,kk)*e(kk)-B(jj,kk)*f(kk);%T2=a
                end
                J(2*ii-1,2*ii-1)=-B(ii,ii)*e(ii)+G(ii,ii)*f(ii)+T1(ii);
                J(2*ii-1,2*ii)=G(ii,ii)*e(ii)+B(ii,ii)*f(ii)+T2(ii);
                J(2*ii,2*ii-1)=-G(ii,ii)*e(ii)-B(ii,ii)*f(ii)+T2(ii);
                J(2*ii,2*ii)=-B(ii,ii)*e(ii)+G(ii,ii)*f(ii)-T1(ii);
            end
        end
    elseif bus2(ii)==2
        for jj=1:Nbus
            if ii~=jj
                J(2*ii-1,2*jj-1)=-B(ii,jj)*e(ii)+G(ii,jj)*f(ii);
                J(2*ii-1,2*jj)=G(ii,jj)*e(ii)+B(ii,jj)*f(ii);
                J(2*ii,2*jj-1)=0;
                J(2*ii,2*jj)=0;
            elseif ii==jj
                for kk=1:Nbus
                    T1(jj)=T1(jj)+G(jj,kk)*f(kk)+B(jj,kk)*e(kk);%T1=b
                    T2(jj)=T2(jj)+G(jj,kk)*e(kk)-B(jj,kk)*f(kk);%T2=a
                end
                J(2*ii-1,2*ii-1)=-B(ii,ii)*e(ii)+G(ii,ii)*f(ii)+T1(ii);
                J(2*ii-1,2*ii)=G(ii,ii)*e(ii)+B(ii,ii)*f(ii)+T2(ii);
                J(2*ii,2*ii-1)=2*f(ii);
                J(2*ii,2*ii)=2*e(ii);
            end
        end
    end
 end
 Delta_S=Delta_PQ(1:(2*Nbus-2));
 JJ=J(1:(2*Nbus-2),1:(2*Nbus-2));  
      %-----------形成雅克比矩阵JJ--end---------
 Delta_u=JJ\Delta_S;
for ii=1:(Nbus-1)
     delta_e(ii)=Delta_u(2*ii);
     delta_f(ii)=Delta_u(2*ii-1);
 end
    e=delta_e+e;
    f=delta_f+f;
end
u=e+1i*f;U=abs(u);
V=abs(u)*230;
theta=180*imag(log(u))/pi;%节点母线电压相角

04

PQ潮流法程序编写:

clear;
clc;
fivebus
bus1 = busdata(:,1);
bus2 = busdata(:,2);
bus3 = busdata(:,3);
% Theta = busdata(:,4)*pi/180;
Theta = busdata(:,4);
PL = busdata(:,5);
QL = busdata(:,6);
PG = busdata(:,7);
QG = busdata(:,8);
Nbus = length(bus1);
v=zeros(Nbus,2);
v(:,1)=bus3;
v(:,2)=Theta;
Br1 = linedata(:,1);
Br2 = linedata(:,2);
LR  = linedata(:,3);
LX  = linedata(:,4);
LB  = linedata(:,5);
Tap = linedata(:,6);
Nline= length(Br1);
%------------形成导纳矩阵Y----------------
Y = zeros(Nbus,Nbus);
   %---------导纳矩阵的对角线元素---------
for ii = 1:Nbus
    for jj = 1:Nline
        if Br1(jj) == ii
            Y(ii,ii) = Y(ii,ii)+1/(LR(jj)+LX(jj)*1i)*(1/Tap(jj)^2)+1i*LB(jj);
        elseif Br2(jj) == ii
            Y(ii,ii) = Y(ii,ii)+1/(LR(jj)+LX(jj)*1i)+1i*LB(jj);
        end
    end
end
   %---------导纳矩阵的非对角线元素--------
for ii = 1:Nline
    Y(Br1(ii),Br2(ii)) = Y(Br1(ii),Br2(ii))-1/(LR(ii)+LX(ii)*1i)*(1/Tap(ii));
    Y(Br2(ii),Br1(ii)) = Y(Br1(ii),Br2(ii));
end
%------------导纳矩阵Y-end----------------
G = real(Y);
B = imag(Y);
B1=B(1:(Nbus-1),1:(Nbus-1));
B2=B(1:(Nbus-2),1:(Nbus-2));
U = v(:,1);            %电压幅值
D = v(:,2);            %电压相角
%-----------利用极坐标求解潮流------------
P=PG-PL;
Q=QG-QL;
k=0;   %k为迭代次数
kp=0;  %计算P不平衡量deltaPi的收敛标志(0表示不收敛,1表示收敛)
kq=0;  %计算U不平衡量deltaQi的收敛标志(0表示不收敛,1表示收敛)
deltaPi=zeros(Nbus-1,1);%deltaPi为4阶矩阵
deltaQi=zeros(Nbus-2,1);%deltaQi为pqnum*1阶矩阵
e=0.00001;
tic;
while((kq==0)||(kp==0))&&(k<1000) %效果一样
% while((~kq|~kp)&(k<100))
    k=k+1;
    %-------------------------P--------------------------
    for ii=1:(Nbus-1)
        T1_P=0;
       for jj=1:Nbus
             DD=D(ii)-D(jj);
             T1_P=T1_P+U(ii)*U(jj)*(G(ii,jj)*cos(DD)+B(ii,jj)*sin(DD));
       end
       deltaPi(ii)=P(ii)-T1_P;
    end
    Up=U(1:(Nbus-1));
    B11=inv(B1);
    deltaD=(-B11*(deltaPi./Up))./Up;%求相角a的不平衡量(参考书上式4-59a)
    for ii=1:(Nbus-1)%求相角D的新迭代值矩阵
        D(ii)=D(ii)+deltaD(ii);
    end
    max1=max(abs(deltaPi./Up));%求deltaP/U绝对值的最大值
    if max1<=e   %如果最大值满足要求,则kp置为"1",表示收敛
         kp=1;
    end
   %---------------------P   END---------------------
   %-----------------------Q----------------------
    for ii=1:(Nbus-2)  %书上式4-45(b)求deltaQi
         T1_Q=0;
         for jj=1:Nbus
             DD=D(ii)-D(jj);
             T1_Q=T1_Q+U(ii)*U(jj)*(G(ii,jj)*sin(DD)-B(ii,jj)*cos(DD));
         end
         deltaQi(ii)=Q(ii)-T1_Q;
    end
    Uq=U(1:(Nbus-2));
    B22=inv(B2);
    deltaU=-B22*(deltaQi./Uq);   %求U的不平衡量deltaU
    for ii=1:(Nbus-2)%求幅值U的新迭代值矩阵
        U(ii)=U(ii)+deltaU(ii);
    end
    max2=max(abs(deltaQi./Uq)); %求deltaQ/U绝对值的最大值
    if max2<=e     %如果最大值满足要求,则kp置为"1",表示收敛
         kq=1;
    end
%------------------------------Q   END----------------------------
end    
V=abs(U)*230; %幅值
theta=D*180/pi;

6a88336f1735c0deafa64641d682d566.gif

以上各种潮流算法的获取,在公众号内回复【潮流计算】即可获得。

未完待续

扫码关注

不迷路

6776e8ef7e8a1e242982f1c0bad154d0.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值