⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chaoliu_finish.m

📁 电力系统潮流程序
💻 M
字号:
clc;
clear;
n=5; %input('请输入节点数:n=');
b=5; %input('请输入支路数:b=');
jd=0.00001; %input(' 请输入精度:jd=');
sb=5; %input(' 请输入平衡节点号sb=');
c=load('zlsj.txt');                                                 %支路数据形成的矩阵 第一列支路号 第二列支路始端 第三列支路末端 第四列支路电阻 
                                                                           %第五列支路电抗 第六列支路导纳一半 第七列变比 第八列方向标记
d=load('jdsj.txt');                                               %节点数据形成的矩阵 第一列节电号 第二列节点类型:1--PQ 2--PV 3--平衡 第三列注入有功 
                                                                           %第四列注入无功 第五列消耗有功 第六列消耗无功 第七初始电压实部 第八列初始电压虚部 
for ii=1:b
    B1(ii,1)=c(ii,1);                            %支路号
    B1(ii,2)=c(ii,2);                            %支路始端
    B1(ii,3)=c(ii,3);                            %支路末端
    B1(ii,4)=c(ii,4)+i*c(ii,5);                  %支路阻抗 
    B1(ii,5)=c(ii,6);                            %支路导纳一半
    B1(ii,6)=c(ii,7);                            %变比
    B1(ii,7)=c(ii,8);                            %方向标记(首端低压为0,反之为1)
end

%---------------------------------------------以下求导纳矩阵
Y=zeros(n,n);
for ii=1:b
    if B1(ii,7)==0
       p=B1(ii,2);q=B1(ii,3);
    else
       p=B1(ii,3);q=B1(ii,2);
    end
    Y(p,q)=Y(p,q)-1./(B1(ii,4)*B1(ii,6)); 
    Y(q,p)=Y(p,q);
    Y(p,p)=Y(p,p)+1./B1(ii,4)+i*B1(ii,5);                                  %以前错误虚部忘记乘以i
    Y(q,q)=Y(q,q)+1./(B1(ii,4)*B1(ii,6)^2)+i*B1(ii,5);
end
disp('导纳矩阵如下:');
disp(Y);

%--------------------------------------以下求ΔP,ΔQ或ΔP,ΔV^2
G=real(Y);
B=imag(Y);

for ii=1:n
    e(1,ii)=d(ii,7);                                   %电压实部
    f(1,ii)=d(ii,8);                                   %电压虚部
    V(1,ii)=sqrt(e(1,ii)^2+f(1,ii)^2);                 %电压幅值
    angle(1,ii)=atan(f(1,ii)/e(1,ii))*180/pi;          %电压相角(角度)
end   

Ps=zeros(1,n);
Qs=zeros(1,n);
DP=zeros(1,n);
DQ=zeros(1,n);
ee=zeros(100,n);
ff=zeros(100,n);

for j=1:n
     Ps(1,j)=d(j,3)+d(j,5);
     Qs(1,j)=d(j,4)+d(j,6);         
end

cs=0;
pre=1;

while pre>jd    
    cs=cs+1;   
      A1=zeros(1,n);
      A2=zeros(1,n);
      for ii=1:n
          for j=1:n   
              A1(1,ii)=A1(1,ii)+G(ii,j)*e(1,j)-B(ii,j)*f(1,j);
              A2(1,ii)=A2(1,ii)+G(ii,j)*f(1,j)+B(ii,j)*e(1,j);
          end
          if d(ii,2)==1                                                    %PQ节点
             DP(1,ii)=Ps(1,ii)-e(1,ii)*A1(1,ii)-f(1,ii)*A2(1,ii);
             DQ(1,ii)=Qs(1,ii)-f(1,ii)*A1(1,ii)+e(1,ii)*A2(1,ii);
          else                                                              %PV及平衡节点
                 DP(1,ii)=Ps(1,ii)-e(1,ii)*A1(1,ii)-f(1,ii)*A2(1,ii);
                 DV(1,ii)=d(ii,7)^2+d(ii,8)^2-(e(1,ii)^2+f(1,ii)^2);
          end
      end
      
%--------------------------------------------------以下是求所有节点雅可比矩阵
     K=zeros(2*n,2*n+3); 
     H=zeros(n);
     N=zeros(n);
     J=zeros(n);
     L=zeros(n);
     R=zeros(n);
     S=zeros(n);
     
      for ii=1:n
          if d(ii,2)==1
             for j=1:n
                 if ii~=j
                    H(ii,j)=-G(ii,j)*e(1,ii)-B(ii,j)*f(1,ii);
                    N(ii,j)=B(ii,j)*e(1,ii)-G(ii,j)*f(1,ii);
                    J(ii,j)=B(ii,j)*e(1,ii)-G(ii,j)*f(1,ii);
                    L(ii,j)=G(ii,j)*e(1,ii)+B(ii,j)*f(1,ii);
                 else
                     H(ii,j)=-G(ii,j)*e(1,ii)-B(ii,j)*f(1,ii)-A1(1,ii);
                     N(ii,j)=B(ii,j)*e(1,ii)-G(ii,j)*f(1,ii)-A2(1,ii);
                     J(ii,j)=B(ii,j)*e(1,ii)-G(ii,j)*f(1,ii)+A2(1,ii);
                     L(ii,j)=G(ii,j)*e(1,ii)+B(ii,j)*f(1,ii)-A1(1,ii);
                 end
                 p=2*ii-1;q=2*j-1;r=p+1;s=q+1;t=2*n+1;
                 K(p,q)=J(ii,j);K(p,s)=L(ii,j);K(p,t)=DQ(1,ii);
                 K(r,q)=H(ii,j);K(r,s)=N(ii,j);K(r,t)=DP(1,ii);
             end 
         else     
              for j=1:n
                  if ii~=j
                     H(ii,j)=-G(ii,j)*e(1,ii)-B(ii,j)*f(1,ii);
                     N(ii,j)=B(ii,j)*e(1,ii)-G(ii,j)*f(1,ii);
                     R(ii,j)=0;
                     S(ii,j)=0;
                  else
                      H(ii,j)=-G(ii,j)*e(1,ii)-B(ii,j)*f(1,ii)-A1(1,ii);
                      N(ii,j)=B(ii,j)*e(1,ii)-G(ii,j)*f(1,ii)-A2(1,ii);
                      R(ii,j)=-2*e(1,ii);
                      S(ii,j)=-2*f(1,ii);
                  end
                  p=2*ii-1;q=2*j-1;r=p+1;s=q+1;t=2*n+1;
                  K(p,q)=R(ii,j);K(p,s)=S(ii,j);K(p,t)=DV(1,ii);
                  K(r,q)=H(ii,j);K(r,s)=N(ii,j);K(r,t)=DP(1,ii);
              end
          end
          K(2*ii-1,2*n+2)=d(ii,1);K(2*ii-1,2*n+3)=d(ii,2);
          K(2*ii,2*n+2)=d(ii,1);K(2*ii,2*n+3)=d(ii,2);
      end
      
%-----------------------------------------------以下是求除去平衡节点的雅可比矩阵
      KL=zeros(2*n-2,2*n+3);                                               %KL为行除去平衡节点后形成的矩阵
      for ii=1:2*n
          if K(ii,2*n+2)==sb
              break
          end
      end
              for q=1:ii-1
                  for j=1:2*n+3
                      KL(q,j)=K(q,j);
                  end
              end
              for p=ii:2*n-2
                  for j=1:2*n+3
                      KL(p,j)=K(p+2,j);
                  end
              end            
      
      KK=zeros(2*n-2,2*n+1);                                               %KK为行和列除去平衡节点后形成的矩阵
      for j=1:2*n
          if K(j,2*n+2)==sb
              break
          end
      end
              for q=1:j-1
                  for ii=1:2*n-2
                      KK(ii,q)=KL(ii,q);
                  end
              end
              for p=j:2*n+1
                  for ii=1:2*n-2
                      KK(ii,p)=KL(ii,p+2);
                  end
              end
                 
      zd(1,cs)=KK(1,2*n-1);
      for ii=1:2*n-2    
          if KK(ii,2*n-1)>zd(1,cs)
             zd(1,cs)=KK(ii,2*n-1);
          end 
      end 
      
%------------------------------------------以下是高斯消去法求e,f
      for ii=1:2*n-2
          for j=ii+1:2*n-1
              KK(ii,j)=KK(ii,j)/KK(ii,ii);
         end
          KK(ii,ii)=1;
          for p=ii+1:2*n-2
              for j=ii+1:2*n-1
                  KK(p,j)=KK(p,j)-KK(ii,j)*KK(p,ii);
              end
              KK(p,ii)=0;
          end
      end                                                                  %求出了上三角矩阵  
      
%-------------------------------------------以下是回代过程      
      X=zeros(1,2*n-2);DE=zeros(1,n-1);DF=zeros(1,n-1);
      for ii=2*n-2:-1:1
          if ii~=2*n-2
             X(1,ii)=KK(ii,2*n-1);
             for j=2*n-2:-1:ii+1
                 X(1,ii)=X(1,ii)-KK(ii,j)*X(1,j);
             end
          else
              X(1,2*n-2)=KK(2*n-2,2*n-1);
          end
      end                                                                  %回代结束
     pree=0;
       for ii=1:2*n-2
          if abs(X(1,ii))>pree
              pree=abs(X(1,ii));
          end
       end
       pre=pree;                                                           %判断是否收敛
       
%---------------------------------------------以下是求修正值       
       for ii=1:n-1
           DE(1,ii)=X(1,2*ii-1);
           DF(1,ii)=X(1,2*ii);                                             %除去平衡节点的电压实部、虚部的修正值
       end
       for ii=1:n
          if ii==sb
             for j=n:-1:ii+1
                  DE(1,j)=DE(1,j-1);
                  DF(1,j)=DF(1,j-1);
             end
             DE(1,ii)=0;
             DF(1,ii)=0;
          end
       end                                                                 %加上平衡节点后的电压实部、虚部修正值  
       
%-----------------------------------------------以下是修正后的新的值       
      for ii=1:n               
          if cs~=1
             ee(cs,ii)=ee(cs-1,ii)-DE(1,ii);
             e(1,ii)=ee(cs,ii);
             ff(cs,ii)=ff(cs-1,ii)-DF(1,ii);
             f(1,ii)=ff(cs,ii);
          else
              ee(cs,ii)=e(1,ii)-DE(1,ii);
              e(1,ii)=ee(cs,ii);
              ff(cs,ii)=f(1,ii)-DF(1,ii);
              f(1,ii)=ff(cs,ii);
          end
             V(cs,ii)=sqrt(ee(cs,ii)^2+ff(cs,ii)^2);
             angle(cs,ii)=atan(ff(cs,ii)/ee(cs,ii))*180/pi;
      end
end
%----------------------------------------------以下是求各点有功功率、无功功率
for ii=1:n
    A1(1,ii)=0;
    A2(1,ii)=0;
    for j=1:n
       A1(1,ii)=A1(1,ii)+G(ii,j)*e(1,j)-B(ii,j)*f(1,j);
       A2(1,ii)=A2(1,ii)+G(ii,j)*f(1,j)+B(ii,j)*e(1,j);
    end
    PP(1,ii)=e(1,ii)*A1(1,ii)+f(1,ii)*A2(1,ii);
    QQ(1,ii)=f(1,ii)*A1(1,ii)-e(1,ii)*A2(1,ii);
end
CH=zeros(n,5);                                                             %CH为各节点潮流。第一列为节点号,第二列为电压幅值,
                                                                           %第三列为电压角度,第四列为有功功率,第五列为无功功率
for ii=1:n
    CH(ii,1)=ii;
    CH(ii,2)=V(cs,ii);
    CH(ii,3)=angle(cs,ii);
    CH(ii,4)=PP(1,ii);
    CH(ii,5)=QQ(1,ii);
end

disp('迭代次数:')
disp(cs);
disp('电压实部:')
disp(ee(1:cs,n));
disp('电压虚部:')
disp(ff(1:cs,n));
disp('电压数量值:')
disp(V);
disp('电压角度值:')
disp(angle);
disp('各节点潮流')
disp(CH)
figure(1);
plot(zd);
xlabel('diedaicishu');
ylabel('dianyawucha');
      

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -