您好,欢迎来到年旅网。
搜索
您的当前位置:首页牛拉潮流程序

牛拉潮流程序

来源:年旅网
clear; clc;

%%%+++++++++++++++++++++++++++++++++++++输入带有变压器的支路矩阵中各节点对应各变比 % function[]

%========================================================================== [NODE,Branch]=OpDF_; %打开矩阵 (test.m)文件 Node=NODE;

N=Node(:,1); %节点号 Type=Node(:,2); %节点类型

BR=Branch %将支路信息保存在BR中%%

K=Branch(:,6); %支路变压器变比,0代表没有变压器 n=length(N); %节点数

nbr=length(K); %支路数

Total_of_Bus1=size(NODE);%%%取节点矩阵的行和列

Total_of_Bus=Total_of_Bus1(1,1)%%bus矩阵的行数即 节点数 Total_of_Branch1=size(Branch);%%%%取支路矩阵的行和列

Total_of_Branch=Total_of_Branch1(1,1);%% 支路branch矩阵行数即 支路数

Z=zeros(Total_of_Bus1); %将节点排序重新存储节点信息%%%%定义为 节点数的方阵 format short

b=1; %排序标志位 pq=0; %PQ节点标志位 pv=0; %PV节点标志位 ph=0; %平衡节点标志位

%---------------------按照PQ,PV,平衡节点的次序排序各种节点

%-------------------------------------统计PQ节点数 0代表是pq节点 for a=1:Total_of_Bus if NODE(a,2) == 0 Z(b,:)=NODE(a,:); b=b+1;

pq=pq+1; end end

%-------------------------------------统计PV节点数2代表pv节点 for a=1:Total_of_Bus if NODE(a,2) == 2 Z(b,:)=NODE(a,:); b=b+1;

pv=pv+1; end end

%-------------------------------------统计平衡节点数 3代表平衡节点 for a=1:Total_of_Bus if NODE(a,2) == 3 Z(b,:)=NODE(a,:); b=b+1;

ph=ph+1; end end Z

Z2=Z;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%将节点进行重新排序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% mm=zeros(n,1); for i=1:n

mm(i,1)=i; end

Z1(:,1)=mm(:,1);

Branch1=zeros(nbr,2); for i=1:n

if Z(i,1)~=Z1(i) for j=1:nbr

if Branch(j,1)==Z(i,1) Branch1(j,1)=Z1(i); end

if Branch(j,2)==Z(i,1) Branch1(j,2)=Z1(i); end end

else

for j=1:nbr

if Branch(j,1)==Z(i,1) Branch1(j,1)=Z(i,1); end

if Branch(j,2)==Z(i,1) Branch1(j,2)=Z(i,1); end end end end

Branch(:,1)=Branch1(:,1); Branch(:,2)=Branch1(:,2); Z(:,1)=Z1(:,1);

j=sqrt(-1);

%--------矩阵已经完成按照PQ,PV,平衡节点的顺序排列起来------ YSNODE=Z; %保存排序后的原始节点数据

%%%%=======================================================================

Y=zeros(n,n);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求互导纳%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:n

for t=1:nbr

if (Branch(t,1)==i||Branch(t,2)==i)&& Branch(t,6)==0 %%非变压器支路%%%%%%% Y(Branch(t,1),Branch(t,2))=-1/(Branch(t,3)+j*Branch(t,4)); Y(Branch(t,2),Branch(t,1))=Y(Branch(t,1),Branch(t,2));

else if (Branch(t,1)==i||Branch(t,2)==i)&&Branch(t,6)~=0 %%变压器支路%%%%%% Y(Branch(t,1),Branch(t,2))=(-1/(j*Branch(t,4)))/Branch(t,6);

Y(Branch(t,2),Branch(t,1))=Y(Branch(t,1),Branch(t,2)); end end end end

%%%%%%%%%%%%%%%%%%%%%%%%%求自导纳%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for i=1:n

for t=1:nbr

if (Branch(t,1)==i||Branch(t,2)==i)&& Branch(t,6)==0 %%非变压器支路%%%%%%% Y(i,i)=Y(i,i)+1/(Branch(t,3)+j*Branch(t,4))+(1/2)*j*Branch(t,5);

else if Branch(t,1)==i&&Branch(t,6)~=0 %%%%%%变压器支路——————————且i为首节点%%%%%%%%

Y(i,i)=Y(i,i)+1/(j*Branch(t,4));

else if Branch(t,2)==i&&Branch(t,6)~=0%%%%%%%%%%%__变压器支路————且i为末节点%%%%%%%%

Y(i,i)=Y(i,i)+(1/(j*Branch(t,4)))/(Branch(t,6)*Branch(t,6)); end end end end end

%%%%%%%%%若有并联电容器组,则自导纳要加上并联电容器的导纳%%%%%%%%%%%%%%%%%%%%%% for i=1:n

if NODE(i,13)~=0

Y(i,i)=Y(i,i)+j*NODE(i,13) end end Y

n=length(N);

G=real(Y); %实部,即电导 B=imag(Y); %虚部,即电纳

%%%%%%%%%%%%%%%%%%%%%%%%%%%给定初始的电压值与相位值%%%%%%%%%%%%%%%%%%%%%% U_first=Z(:,3); %初始电压幅值 phase_first=Z(:,4); %初始相位值 e=U_first.*cos(phase_first); f=U_first.*sin(phase_first);

%%%%%%%%%%%%%%%%%计算Delta_P初始功率量%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% P=Z(:,5); %节点负荷有功分量 Q=Z(:,6); %节点负荷无功分量

PG=Z(:,7); %发电机发出的有功 QG=Z(:,8); %发电机发出的无功 U0=Z(:,9); %节点电压都的初始值 Delta_P=zeros(1,n-1); for i=1:n-1 for j=1:n

Delta_P(i)=Delta_P(i)-e(i)*(G(i,j)*e(j)-B(i,j)*f(j))+f(j)*(G(i,j)*f(j)+B(i,j)*e(j)); end end

for i=1:n-1

Delta_P(i)=Delta_P(i)-(P(i)-PG(i)); end Delta_P

%%%%%%%%%%%%%%%%%%计算Delta_Q初始功率量%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% m=0;

for i=1:n;

if Type(i)==2; %计算PV节点的个数 m=m+1; %m代表pv节点个数 end end

Delta_Q=zeros(1,n-m-1); for i=1:n-m-1 for j=1:n

Delta_Q(i)=Delta_Q(i)-f(i)*(G(i,j)*e(j)-B(i,j)*f(j))+e(i)*(G(i,j)*f(j)+B(i,j)*e(j)); end end

for i=1:n-m-1

Delta_Q(i)=Delta_Q(i)-(Q(i)-QG(i)); end Delta_Q

Delta_V=zeros(1,m); for i=1:m for j=1:n

if Type(j)==2

Delta_V(i)=U0(j)^2-(e(j)^2+f(i)^2); end end end Delta_V num=0;

disp(['第',num2str(num),'次时的Delta总的失配量为:'])

%--------------------------进入循环体判断是否满足条件--------------------------------% %--------------------先算出最大值,作为判断是否收敛的依据----------------------------% DEL=[Delta_P Delta_Q]; %Delta_P Delta_Q______________%%%%%% MAX =max(abs(DEL)); MAX

Theta_first=zeros(1,n);

U_f=U_first';

Delta_F_E1=[Theta_first(1:n-1) U_f(1:n-m-1)]; Delta_F=Delta_F_E1';

Delta_Cor=Delta_F_E1; %_______________Delta_the Delta_u________________%%

disp(['第一次最大失配量误差:',num2str(MAX)]) %-------------循环判断-----------%

if MAX>1e-004 % 判断依据

disp('-----------------------下面开始下一次迭代过程!-----------------------') end

while MAX>1e-004 num=num+1;

%%%%%%%%%%%%%%%%%%%形成雅克比矩阵%%%%%%%%%%%%%%%%%%%%%%%%%%% %--------------------------先求非对角元素--(H)-------------% Hik=zeros(n-1,n-1); for i=1:n-1 for k=1:n-1 if i~=k

theik=Theta_first(i)-Theta_first(k);

Hik(i,k)=-U_first(i)*U_first(k)*(G(i,k)*sin(theik)-B(i,k)*cos(theik)); end end end

%----------------------再求对角元素---(H)---------------------% for i=1:n-1 for k=1:n if i~=k

theik=Theta_first(i)-Theta_first(k);

Hik(i,i)=Hik(i,i)+U_first(k)*(G(i,k)*sin(theik)-B(i,k)*cos(theik)); end end

Hik(i,i)=U_first(i)*Hik(i,i); end Hik

%-------------------------先求非对角元素---N-------------------% Nik=zeros(n-1,n-m-1); for i=1:n-1

for k=1:n-m-1 if i~=k

theik=Theta_first(i)-Theta_first(k);

Nik(i,k)=-U_first(i)*U_first(k)*(G(i,k)*cos(theik)+B(i,k)*sin(theik)); end end end

%-------------------------再求对角元素------------------------% for i=1:n-m-1 for k=1:n

if i~=k

theik=Theta_first(i)-Theta_first(k);

Nik(i,i)=Nik(i,i)+U_first(k)*(G(i,k)*cos(theik)+B(i,k)*sin(theik)); end end

Nik(i,i)=-U_first(i)*Nik(i,i)-2*U_first(i)*U_first(i)*G(i,i); end Nik

%------------------------先求非对角元素--------(M)--------------% Mik=zeros(n-m-1,n-1); for i=1:n-m-1 for k=1:n-1 if i~=k

theik=Theta_first(i)-Theta_first(k);

Mik(i,k)=U_first(i)*U_first(k)*(G(i,k)*cos(theik)+B(i,k)*sin(theik)); end end end

%-------------------再求对角元素-----------------------------% for i=1:n-m-1 for k=1:n if i~=k

theik=Theta_first(i)-Theta_first(k);

Mik(i,i)=Mik(i,i)+U_first(k)*(G(i,k)*cos(theik)+B(i,k)*sin(theik)); end end

Mik(i,i)=-U_first(i)*Mik(i,i); end Mik

%------------------先求非对角元素----(L)-------------------------------% Lik=zeros(n-m-1,n-m-1); for i=1:n-m-1 for k=1:n-m-1 if i~=k

theik=Theta_first(i)-Theta_first(k);

Lik(i,k)=-U_first(i)*U_first(k)*(G(i,k)*sin(theik)-B(i,k)*cos(theik)); end end end

%-------------------再求对角元素-----------------------------% for i=1:n-m-1 for k=1:n if i~=k

theik=Theta_first(i)-Theta_first(k);

Lik(i,i)=Lik(i,i)+U_first(k)*(G(i,k)*sin(theik)-B(i,k)*cos(theik)); end end

Lik(i,i)=-U_first(i)*Lik(i,i)+2*U_first(i)*U_first(i)*B(i,i); end

Lik

%-----至此雅可比矩阵已经形成------------------- %-----开始构造[Delta_f;Delta_e] kacb=[Hik Nik;Mik Lik];

kacb %%%%%%%%%%%%%%雅克比矩阵%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%--------修正各个量,包括e,f,P,Q,U^2(重要!)----%%%%%%%%%%%%%% DEL=DEL';

Delta_F_E=(-1*inv(kacb))*DEL; Delta_F=Delta_F_E';

Delta_Cor=Delta_F+Delta_Cor;

Theta_first(1,1:n-1)=Delta_Cor(1,1:n-1);

Theta_first(1,n)=0;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%初始相角的修正%%%%%%%%% Theta_first=Theta_first';

Theta_first %%%%%%%%%修正后的角度值%%%%%%%%%%%%%%%% Delta_C=Delta_Cor';

U_first(1:n-m-1,1)=Delta_C(n:2*n-m-2,1);

U_first %%%%%%%%%%%%%修正后的电压值%%%%%%%%%%%%%%%% e=U_first.*cos(Theta_first); f=U_first.*sin(Theta_first); e f

%-———————————————计算修正Delta_P————————% Delta_P=zeros(1,n-1); for i=1:n-1 for k=1:n

Delta_P(i)=Delta_P(i)-e(i,1)*(G(i,k)*e(k,1)-B(i,k)*f(k,1))-f(i,1)*(G(i,k)*f(k,1)+B(i,k)*e(k,1)); end end

for i=1:n-1

Delta_P(i)=Delta_P(i)-(P(i,1)-PG(i,1)); end Delta_P

%%%%%%%%%%-----------------Delta_P-计算完成-------------%%%%%% %%%%%%%%%%-------------计算Delta_Q--------------------%%%%%%% Delta_Q=zeros(1,n-m-1); for i=1:n-m-1 for k=1:n

Delta_Q(i)=Delta_Q(i)-f(i)*(G(i,k)*e(k)-B(i,k)*f(k))+e(i)*(G(i,k)*f(k)+B(i,k)*e(k)); end end

for i=1:n-m-1

Delta_Q(i)=Delta_Q(i)-(Q(i)-QG(i)); end Delta_Q

DEL=[Delta_P Delta_Q];

disp(['第 ',num2str(num),' 次时的Delta总的失配量为:'])

% DEL

%----继续判断最大值 MAX =max(abs(DEL));

Theta_first=Theta_first'; end

%%%%%%%%%%%%%%%%%%求平衡节点的有功功率和无功功率%%%%%%%%%%%%%%%%%%%%%%%%%%% Ps0=0; i=n;

for t=1:n

theij=Theta_first(i)-Theta_first(t);

Ps0=Ps0+U_first(t)*(G(i,t)*cos(theij)+B(i,t)*sin(theij)); end

Ps0=U_first(i)*Ps0; Z(i,7)=Ps0; Qs0=0; i=n;

for t=1:n

theij=Theta_first(i)-Theta_first(t);

Qs0=Qs0+U_first(t)*(G(i,t)*sin(theij)-B(i,t)*cos(theij)); end

Qs0=U_first(i)*Qs0; Z(i,8)=Qs0;

%%%%%%%%%%%%%%%%%%%%%计算PV节点的无功功率%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Qv0=zeros(1,n); for i=n-m:n-1 for t=1:n

theij=Theta_first(i)-Theta_first(t);

Qv0(i)=Qv0(i)+U_first(t)*(G(i,t)*sin(theij)-B(i,t)*cos(theij)); end

Qv0(i)=U_first(i)*Qv0(i); end

for i=n-m:n-1

Z(i,8)=Qv0(i); end Z

j=sqrt(-1); for i=1:n

Angle(i)=Theta_first(i)*180/pi;

P_in(i)=Z(i,7)-Z(i,5)+j*(Z(i,8)-Z(i,6)); end

for i=1:n

Flow(i,1)=Z(i,1); Flow(i,2)=U_first(i); Flow(i,3)=Angle(i); Flow(i,4)=P_in(i); end

Flow(:,1)=Z2(:,1);

disp('####################节点电压和注入功率#######################')

disp(' 节点号 节点电压幅值 节点电压相位 节点注入功率') Flow

disp('=======================完*************成======================')

test.m的例子5节点

%Bus 信息

%1编号 2类型 3U *4 5 P(L) 6Q(L) 7P(G) 8Q(G) 9Uo 10Qmax 11Qmin 12(串并联电容电抗器)

NODE=[1 0 1.0000 0 0.8055 0.5320 0 0 1 0 0 0 0;

2 0 1.0000 0 0.1800 0.1200 0 0 1 0 0 0 0;

3 0 1.0000 0 0 0 0 0 1 0 0 0 0;

4 2 1.0000 0 0 0 0.5 0 1.0000 0 0 0 0;

5 3 1.0000 0 0 0 0 0 1.0000 0 0 0 0;]

%---------------------------------------------------------------------------------------------------------- % Branch 信息

%i j R X B K(>1) Branch=[1 2 0.0250 0.0800 0.1400 0.0000; 1 3 0.0300 0.1000 0.1800 0.0000; 2 3 0.0200 0.0600 0.1000 0.0000; 4 2 0.0000 0.1905 0.0000 1.0522; 5 3 0.0000 0.1905 0.0000 1.0522;] %-----------------------------------------------------------

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务