文档库 最新最全的文档下载
当前位置:文档库 › 潮流计算课程设计

潮流计算课程设计

%本程序的功能是用牛顿——拉夫逊法进行潮流计算

% B1矩阵:1、支路首端号;2、末端号;3、支路阻抗;4、线路对地电纳(或变压器导纳);

% 5、支路的变比;6、支路首端处于K侧为1,1侧为0;

% 7、线路/变压器标识(0/1)变压器参数当支路首端处于K侧标识为1时归算至末端侧,0归算至首端侧

% B2矩阵:1、该节点发电机功率;2、该节点负荷功率;

% 3、PQ节点电压初始值,或平衡节点及PV节点电压的给定值

% 4、节点所接无功补偿并联电容(感)的电纳

% 5、节点分类标号:1为平衡节点(应为1号节点);2为PQ节点;3为PV节点;

clear;

isb=1; %input('请输入平衡母线节点号:isb=');

pr=1e-5; %input('请输入误差精度:pr=');

%---------------------------------------------------

n=10;%input('请输入节点数:n=');

nl=10;%input('请输入支路数:nl=');

B1=[1 2 3.4+12.8i 1.4e-4i 1 0 0;

1 4 5.1+19.2i 2.1e-4i 1 0 0;

2 3 4.25+16i 1.75e-4i 1 0 0;

4 5 4.25+16i 7e-4i 1 0 0;

1 3 5.1+19.2i 2.1e-4i 1 0 0;

6 4 5.95+22.4i 9.8e-4i 1 0 0;

2 7 1.78+53.89i 0 38.5/231 0 1;

3 8 1.49+48.02i 0 11/231 0 1;

4 9 1.49+48.02i 0 11/231 0 1;

5 10 2.46+70.17i 0 38.5/231 0 1] %input('请输入由支路参数形成的矩阵:B1=');

B2=[0 0 225.5 0 1;

0 0 220 0 2;

0 0 220 0 2;

0 0 220 0 2;

0 0 220 0 2;

120 0 231 0 3;

0 61.11+37.87i 35 0 2;

0 47.53+29.46i 10 0 2;

0 54.32+33.66i 10 0 2;

0 40.74+25.25i 35 0 2] %input('请输入各节点参数形成的矩阵:B2=');

%-------------------------------------------------------------

%n=4;%input('请输入节点数:n=');

%nl=4;%input('请输入支路数:nl=');

%B1=[1 2 4+16i 0 1 0 0;

%1 3 4+16i 0 1 0 0;

%2 3 2+8i 0 1 0 0;

%2 4 1.49+48.02i 0 11/110 0 1] %input('请输入由支路参数形成的矩阵:B1=');

%B2=[0 0 115 0 1;

%0 0 110 0 2;

%0 20+4i 110 0 2;

%0 10+6i 10 0 2] %input('请输入各节点参数形成的矩阵:B2=');

%-------------------------------------------------------------

Y=zeros(n);e=zeros(1,n);f=zeros(1,n);V=zeros(1,n);sida=zeros(1,n);S1=zeros(nl);

% % %-----------求导纳矩阵------------------------

for i=1:nl %从1到n1(总支路数)

if B1(i,7)==1 %-----------如果是变压器支路--------

if B1(i,6)==0 %左节点(首端)处于1侧

p=B1(i,1);q=B1(i,2);

else %左节点(首端)处于K侧

p=B1(i,2);q=B1(i,1);

end

Y(p,q)=Y(p,q)-1./(B1(i,3)*B1(i,5)); %非对角元

Y(q,p)=Y(p,q); %非对角元

Y(q,q)=Y(q,q)+1./(B1(i,3)*B1(i,5)^2); %对角元K侧

Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4); %对角元1侧+励磁导纳

else %------------否则为线路支路--------------------

p=B1(i,1);q=B1(i,2);

Y(p,q)=Y(p,q)-1./B1(i,3); %非对角元

Y(q,p)=Y(p,q); %非对角元

Y(q,q)=Y(q,q)+1./B1(i,3)+B1(i,4)./2.0; %对角元j侧+线路电纳的一半

Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4)./2.0; %对角元i侧+线路电纳的一半end

end

disp('导纳矩阵Y=');disp(Y);

%-----------给定各节点初始电压及给定各节点注入功率--------------------------

G=real(Y);B=imag(Y); %分解出导纳阵的实部和虚部

for i=1:n %给定各节点初始电压的实部和虚部

e(i)=real(B2(i,3));

f(i)=imag(B2(i,3));

V(i)=abs(B2(i,3)); %PV、平衡节点及PQ节点电压模值

end

for i=1:n %给定各节点注入功率

S(i)=B2(i,1)-B2(i,2); %i节点注入功率SG-SL

B(i,i)=B(i,i)+B2(i,4); %i节点无功补偿量(电纳值)

end

%==================用牛顿-拉夫逊法迭代求解非线性代数方程(功率方程)=======================

P=real(S);Q=imag(S); %分解出各节点注入的有功和无功功率

ICT1=0;IT2=1;N0=2*n;N1=N0+1;a=0; %迭代次数ICT1、a;不满足收敛要求的节点数IT2 while IT2~=0 % N0=2*n 雅可比矩阵的阶数;N1=N0+1扩展列IT2=0;a=a+1;

JZ=['Jacobi矩阵第(',num2str(a),')次消去运算'];JZ1=['Jacobi矩阵第(',num2str(a),')次回代运算'];JZ0=['功率方程第(',num2str(a),')次差值:'];

%----------------求取各个节点的功率及功率偏差及PV节点的电压偏差-------------------- for i=1:n %n个节点2n行(每节点两个方程P和Q或U) p=2*i-1;m=p+1;C(i)=0;D(i)=0;

for j1=1:n %第i行共n列(n个节点间互导纳及节点电压相乘即电流) C(i)=C(i)+G(i,j1)*e(j1)-B(i,j1)*f(j1);%Σ(Gij*ej-Bij*fj)

D(i)=D(i)+G(i,j1)*f(j1)+B(i,j1)*e(j1);%Σ(Gi j*fj+Bij*ej)

end

%求i节点有功和无功功率P',Q'的计算值

P1=C(i)*e(i)+f(i)*D(i);%节点功率P计算eiΣ(Gij*ej-Bij*fj)+fiΣ(Gij*fj+Bij*ej)

Q1=C(i)*f(i)-e(i)*D(i);%节点功率Q计算fiΣ(Gij*ej-Bij*fj)-eiΣ(Gij*fj+Bij*ej)

V2=e(i)^2+f(i)^2; %电压模平方

%===求取功率差及PV节点电压模平方差=========

if i~=isb %非平衡节点(PQ或PV节点)

if B2(i,5)~=3 %非PV节点(只能是PQ节点)

J(m,N1)=P(i)-P1; %PQ节点有功功率差J(m,N1)扩展列△P

J(p,N1)=Q(i)-Q1; %PQ节点无功功率差J(p,N1)扩展列△Q

else %PV节点==================

J(m,N1)=P(i)-P1; %PV节点有功功率差J(m,N1)扩展列△P

J(p,N1)=V(i)^2-V2; %PV节点电压模平方差J(p,N1)扩展列△U

end

end %(if i~=isb) 非平衡节点(PQ或PV节点)

end %(for i=1:n) n个节点2n行(每节点两个方程P和Q或U)

for m=1:N0

JJN1(m)=J(m,N1);

end

disp(JZ0);disp(JJN1);

%-------------判断功率偏差量及PV节点的电压偏差量是否满足要求-----------------

for k=3:N0 %除去平衡节点1、2号以外的所有节点

DET=abs(J(k,N1));

if DET>=pr %PQ节点的功率偏差量及PV节点的电压偏差量是否满足要求IT2=IT2+1; %不满足要求的节点数加1

end

end

ICT2(a)=IT2; %不满足要求的节点数;a为迭代次数

ICT1=ICT1+1; %迭代次数

if ICT2(a)==0; %当前不满足要求的节点数为零

break %退出迭代运算

end

%--------------------以上为求取各个节点的功率及功率偏差及PV节点的电压偏差-------------

%================= 求取Jacobi矩阵形成修正方程===================

for i=2:n %n个节点2n行(每节点两个方程P和Q或U)

if i~=isb %非平衡节点(PQ或PV节点)

if B2(i,5)~=3 %下面是针对PQ节点来求取Jacobi矩阵的元素===========

C(i)=0;D(i)=0;

for j1=1:n %第i行共n列(n个节点间互导纳及节点电压相乘即电流) C(i)=C(i)+G(i,j1)*e(j1)-B(i,j1)*f(j1);%Σ(Gij*ej-Bij*fj)

D(i)=D(i)+G(i,j1)*f(j1)+B(i,j1)*e(j1);%Σ(Gij*fj+Bij*ej)

end

for j1=2:n %第i行共n列(2n个Jacobi矩阵元素dP/de及dP/df或dQ/de及dQ/df)

if j1~=isb&j1~=i %非平衡节点&非对角元

X1=-G(i,j1)*e(i)-B(i,j1)*f(i); % X1=dP/de=-dQ/df=-X4

X2=B(i,j1)*e(i)-G(i,j1)*f(i); % X2=dP/df=dQ/de=X3

X3=X2; % X2=dp/df X3=dQ/de

X4=-X1; % X1=dP/de X4=dQ/df

p=2*i-1;q=2*j1-1;

J(p,q)=X3;m=p+1; % X3=dQ/de J(p,N)=DQ节点无功功率差J(p,N)=DQ;

J(m,q)=X1;q=q+1; % X1=dP/de J(m,N)=DP节点有功功率差J(m,N)=DP;

J(p,q)=X4;J(m,q)=X2; % X4=dQ/df X2=dp/df

elseif j1==i&j1~=isb %非平衡节点&对角元

X1=-C(i)-G(i,i)*e(i)-B(i,i)*f(i);% dP/de

X2=-D(i)+B(i,i)*e(i)-G(i,i)*f(i);% dP/df

X3=D(i)+B(i,i)*e(i)-G(i,i)*f(i); % dQ/de

X4=-C(i)+G(i,i)*e(i)+B(i,i)*f(i);% dQ/df

p=2*i-1;q=2*j1-1;J(p,q)=X3;%扩展列△Q J(p,N)=DQ;

m=p+1;

J(m,q)=X1;q=q+1;J(p,q)=X4;%扩展列△P J(m,N)=DP;

J(m,q)=X2;

end

end

else %if B2(i,5)~=3 否则(即为PV节点)

%=============== 下面是针对PV节点来求取Jacobi矩阵的元素===========

for j1=1:n

if j1~=isb&j1~=i %非平衡节点&非对角元

X1=-G(i,j1)*e(i)-B(i,j1)*f(i); % dP/de

X2=B(i,j1)*e(i)-G(i,j1)*f(i); % dP/df

X5=0;X6=0;

p=2*i-1;q=2*j1-1;J(p,q)=X5; % PV节点电压误差J(p,N)=DV;

m=p+1;

J(m,q)=X1;q=q+1;J(p,q)=X6; % PV节点有功误差J(m,N)=DP;

J(m,q)=X2;

elseif j1==i&j1~=isb %非平衡节点&对角元

X1=-C(i)-G(i,i)*e(i)-B(i,i)*f(i);% dP/de

X2=-D(i)+B(i,i)*e(i)-G(i,i)*f(i);% dP/df

X5=-2*e(i);

X6=-2*f(i);

p=2*i-1;q=2*j1-1;J(p,q)=X5; % PV节点电压误差J(p,N)=DV;

m=p+1;

J(m,q)=X1;q=q+1;J(p,q)=X6; % PV节点有功误差J(m,N)=DP;

J(m,q)=X2;

end

end

end %(if B2(i,5)~=3 else)

end %(if i~=isb)

end %(for i=1:n)n个节点2n行(每节点两个方程P和Q或U)

JZ0=['形成的第(',num2str(a),')次Jacobi矩阵:'];

%disp(JZ0);disp(J);

%=============================== 以上为形成完整的Jacobi矩阵================================

%====下面用高斯消去法对由Jacobi矩阵形成的修正方程进行求解(按列消去、回代) ==========

for k=3:N0 % N0=2*n (从第三行开始,第一、二行是平衡节点)

for k1=k+1:N1 % 从k+1列的Jacobi元素到扩展列的△P、△Q 或△U

J(k,k1)=J(k,k1)./J(k,k);% 用K行K列对角元素去除K行K列后的非对角元素进行规格化

end

J(k,k)=1; % 对角元规格化K行K列对角元素赋1

%================== 按列消去运算==================================

for k2=k+1:N0 % 从k+1行到2*n最后一行

for k3=k+1:N1 %从k2+1列到扩展列消去k+1行后各行下三角元素

J(k2,k3)=J(k2,k3)-J(k2,k)*J(k,k3);%消去运算

end %用当前行K3列元素减去当前行K列元素乘以第k行K3列元素

J(k2,k)=0; %当前行第k列元素已消为0

end

end

%JZ=['Jacobi矩阵第(',num2str(a),')次消去运算'];JZ1=['Jacobi矩阵第(',num2str(a),')次回代运算'];

%disp(JZ);disp(J);

%==================== 按列回代运算=======================================

for k=N0:-1:3

for k1=k-1:-1:3

J(k1,N1)=J(k1,N1)-J(k1,k)*J(k,N1);

J(k1,k)=0;

end

end

for m=1:N0

JJN1(m)=J(m,N1);

end

disp(JZ1);disp(JJN1);%disp(J);

%----------------------------------修改节点电压-------------------------------

for k=3:2:N0-1

L=(k+1)./2;

e(L)=e(L)-J(k,N1); %修改节点电压实部

k1=k+1;

f(L)=f(L)-J(k1,N1); %修改节点电压虚部

U(L)=sqrt(e(L)^2+f(L)^2);

end

disp('各个节点电压模');disp(U);

%============================== 结束一次迭代==============================

end

%********************** 下面为迭代计算结束后的有关输出过程***************** disp('迭代次数:');

disp(ICT1-1);

disp('没有达到精度要求的个数:');

disp(ICT2);

for k=1:n

V(k)=sqrt(e(k)^2+f(k)^2); %计算各节点电压的模值

sida(k)=atan(f(k)./e(k))*180./pi; %计算各节点电压的角度

E(k)=e(k)+f(k)*j; %将各节点电压用复数表示

end

%=============== 计算各输出量===========================

disp('各节点的电压复数值E为(节点号从小到大排列):');

disp(E); %显示各节点的实际电压值E用复数表示

disp('-----------------------------------------------------');

disp('各节点的电压模值大小V为(节点号从小到大排列):');

disp(V); %显示各节点的电压大小V的模值

disp('-----------------------------------------------------');

disp('各节点的电压相角sida为(节点号从小到大排列):');

disp(sida); %显示各节点的电压相角

for p=1:n

C(p)=0;

for q=1:n

C(p)=C(p)+conj(Y(p,q))*conj(E(q)); %计算各节点注入电流的共轭值end

S(p)=E(p)*C(p); %计算各节点的功率S = 电压X 注入电流的共轭值end

disp('各节点的功率S为(节点号从小到大排列):');

disp(S); %显示各节点的注入功率

disp('-----------------------------------------------------');

disp('各条支路的首端功率Si为(顺序同您输入B1时一致):');

for i=1:nl

p=B1(i,1);q=B1(i,2);

if B1(i,7)==0

Si(p,q)=E(p)*conj(E(p)*B1(i,4)./2+(E(p)-E(q))./B1(i,3));

Siz(i)=Si(p,q);

else

if B1(i,6)==0

Si(p,q)=E(p)*(conj(E(p)*B1(i,4)...

+(E(p)*B1(i,5)-E(q))*(1./(B1(i,3)*B1(i,5)))));

Siz(i)=Si(p,q);

else

Si(p,q)=E(p)*conj((E(p)-E(q)*B1(i,5))*(1./(B1(i,3)*B1(i,5)^2)));

Siz(i)=Si(p,q);

end

end

ZF=['S(',num2str(p),',',num2str(q),')=',num2str(Si(p,q))];

disp(ZF);

disp('-----------------------------------------------------');

end

disp('各条支路的末端功率Sj为(顺序同您输入B1时一致):');

for i=1:nl

p=B1(i,1);q=B1(i,2);

if B1(i,7)==0

Sj(q,p)=E(q)*conj(E(q)*B1(i,4)./2+(E(q)-E(p))./B1(i,3));

Sjy(i)=Sj(q,p);

else

if B1(i,6)==0

Sj(q,p)=E(q)*conj((E(q)-E(p)*B1(i,5))*(1./(B1(i,3)*B1(i,5)^2)));

Sjy(i)=Sj(q,p);

else

Sj(q,p)=E(q)*(conj(E(q)*B1(i,4)...

+(E(q)*B1(i,5)-E(p))*(1./(B1(i,3)*B1(i,5)))));

Sjy(i)=Sj(q,p);

end

end

ZF=['S(',num2str(q),',',num2str(p),')=',num2str(Sj(q,p))];

disp(ZF);

disp('-----------------------------------------------------');

end

disp('各条支路的功率损耗DS为(顺序同您输入B1时一致):');

for i=1:nl

p=B1(i,1);q=B1(i,2);

DS(i)=Si(p,q)+Sj(q,p);

ZF=['DS(',num2str(p),',',num2str(q),')=',num2str(DS(i))];

disp(ZF);

disp('-----------------------------------------------------');

end

zws=0;JDDY=[];JDP=[];JDQ=[];JDDYJD=[];

for i=1:n %总网损为所有节点注入功率的代数和

zws=zws+S(i);

JDDYJD=strcat(JDDYJD,num2str(i),'(',num2str(sida(i)),'),');

JDDY=strcat(JDDY,num2str(i),'(',num2str(V(i)),'),');

JDP=strcat(JDP,num2str(i),'(',num2str(real(S(i))),'),');

JDQ=strcat(JDQ,num2str(i),'(',num2str(imag(S(i))),'),');

end

JDDYJD=strcat('节点电压角度:',JDDYJD);

JDDY=strcat('节点电压模值:',JDDY);

JDP=strcat('节点有功:',JDP);

JDQ=strcat('节点无功:',JDQ);

ZF=['总网损S=',num2str(zws)];

ZFS=['有功总损耗= ',num2str(real(zws)),' 无功总损耗= ',num2str(imag(zws))]; disp(ZF);

figure(1);

subplot(4,1,1);

bar(V);

title(JDDY);

ylabel('节点电压模值');

grid on;

subplot(4,1,2);

plot(sida);

title(JDDYJD);

ylabel('节点电压角度');

grid on;

subplot(4,1,3);

P=real(S);Q=imag(S);

bar(P);

title(JDP);

ylabel('节点注入有功');

grid on;

subplot(4,1,4);

bar(Q);

title(JDQ);

xlabel(ZFS);ylabel('节点注入无功');

grid on;%***********************************

figure(2);

subplot(3,2,1);

JDH=[];JDH1=[];

for i=1:nl

JDH=strcat(JDH,num2str(i),'(',num2str(B1(i,1)),',',num2str(B1(i,2)),'), ');

JDH1=strcat(JDH1,num2str(i),'(',num2str(B1(i,2)),',',num2str(B1(i,1)),'), '); end

P1=real(Siz);Q1=imag(Siz);

bar(P1);

title(JDH);

ylabel('支路首端注入有功');%xlabel('支路号');

grid on;

subplot(3,2,2);

bar(Q1);

title(JDH);

ylabel('支路首端注入无功');

grid on;

subplot(3,2,3);

P2=real(Sjy);Q2=imag(Sjy);

bar(P2);

title(JDH1);

ylabel('支路末端注入有功');

grid on;

subplot(3,2,4);

bar(Q2);

title(JDH1);

ylabel('支路末端注入无功');

grid on;

subplot(3,2,5);

P3=real(DS);Q3=imag(DS);

bar(P3);

xlabel(JDH);ylabel('支路有功损耗');

grid on;

subplot(3,2,6);

bar(Q3);

xlabel(JDH);ylabel('支路无功损耗');

grid on;

相关文档
相关文档 最新文档