附录1
使用牛顿拉夫逊法进行潮流计算的Matlab程序代码
% 牛拉法计算潮流程序
%-----------------------------------------------------------------------
% B1矩阵:1、支路首端号;2、末端号;3、支路阻抗;4、支路对地电纳 % 5、支路的变比;6、支路首端处于K侧为1,1侧为0
% B2矩阵:1、该节点发电机功率;2、该节点负荷功率;3、节点电压初始值 % 4、PV节点电压V的给定值;5、节点所接的无功补偿设备的容量 % 6、节点分类标号:1为平衡节点(应为1号节点);2为PQ节点;3为PV节点;
%------------------------------------------------------------------------
clear all; format long;
n=input('请输入节点数:nodes='); nl=input('请输入支路数:lines=');
isb=input('请输入平衡母线节点号:balance='); pr=input('请输入误差精度:precision=');
B1=input('请输入由各支路参数形成的矩阵:B1='); B2=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 %支路数 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)+B1(i,4); %对角元K侧 Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4); %对角元1侧
Word 资料
.
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)=B2(i,4); %PV节点电压给定模值 end
for i=1:n %给定各节点注入功率 S(i)=B2(i,1)-B2(i,2); %i节点注入功率SG-SL B(i,i)=B(i,i)+B2(i,5); %i节点无功补偿量 end
%---------------------------------------------------------------------
P=real(S);Q=imag(S); %分解出各节点注入的有功和无功功率
ICT1=0;IT2=1;N0=2*n;N=N0+1;a=0; %迭代次数ICT1、a;不满足收敛要求的节点数IT2 while IT2~=0 % N0=2*n 雅可比矩阵的阶数;N=N0+1扩展列 IT2=0;a=a+1; for i=1:n
if i~=isb %非平衡节点 C(i)=0;D(i)=0; for j1=1: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
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) %求i节点有功和无功功率P',Q'的计算值 V2=e(i)^2+f(i)^2; %电压模平方
%以下针对非PV节点来求取功率差及Jacobi矩阵元素----------------------------- if B2(i,6)~=3 %非PV节点 DP=P(i)-P1; %节点有功功率差 DQ=Q(i)-Q1; %节点无功功率差
%以上为除平衡节点外其它节点的功率计算--------------------------------------
%求取Jacobi矩阵---------------------------------------------------------- for j1=1:n
if j1~=isb&j1~=i %非平衡节点&非对角元 X1=-G(i,j1)*e(i)-B(i,j1)*f(i); % dP/de=-dQ/df X2=B(i,j1)*e(i)-G(i,j1)*f(i); % dP/df=dQ/de X3=X2; % X2=dp/df X3=dQ/de X4=-X1; % X1=dP/de X4=dQ/df
Word 资料
.
p=2*i-1;q=2*j1-1;
J(p,q)=X3;J(p,N)=DQ;m=p+1; % X3=dQ/de J(p,N)=DQ节点无功功率差
J(m,q)=X1;J(m,N)=DP;q=q+1; % X1=dP/de 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;J(p,N)=DQ;%扩展列△Q m=p+1;
J(m,q)=X1;q=q+1;J(p,q)=X4;J(m,N)=DP;%扩展列△P J(m,q)=X2; end end else
%下面是针对PV节点来求取Jacobi矩阵的元素----------------------------------------- DP=P(i)-P1; % PV节点有功误差 DV=V(i)^2-V2; % PV节点电压误差 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;J(p,N)=DV; % PV节点电压误差 m=p+1;
J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X6; % PV节点有功误差
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;J(p,N)=DV; % PV节点电压误差 m=p+1;
J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X6; % PV节点有功误差
J(m,q)=X2; end end end
Word 资料
.
end end
%以上为求雅可比矩阵的各个元素及扩展列的功率差或电压差---------------------------------------
for k=3:N0 % N0=2*n (从第三行开始,第一、二行是平衡节点)
k1=k+1;N1=N; % N=N0+1 即 N=2*n+1扩展列△P、△Q 或△U
for k2=k1:N1 % 从k+1列的Jacobi元素到扩展列的△P、△Q 或△U
J(k,k2)=J(k,k2)./J(k,k);% 用K行K列对角元素去除K行K列后的非对角元素进行规格化 end
J(k,k)=1; % 对角元规格化K行K列对角元素赋1 %回代运算------------------------------------------------------------------- if k~=3 % 不是第三行 k > 3 k4=k-1;
for k3=3:k4 % 用k3行从第三行开始到当前行的前一行k4行消去 for k2=k1:N1 % k3行后各行上三角元素
J(k3,k2)=J(k3,k2)-J(k3,k)*J(k,k2);%消去运算(当前行k列元素消为0) end %用当前行K2列元素减去当前行k列元素乘以第k行K2列元素
J(k3,k)=0; %当前行第k列元素已消为0 end
if k==N0 %若已到最后一行 break; end
%前代运算------------------------------------------------------------ for k3=k1:N0 % 从k+1行到2*n最后一行
for k2=k1:N1 % 从k+1列到扩展列消去k+1行后各行下三角元素 J(k3,k2)=J(k3,k2)-J(k3,k)*J(k,k2);%消去运算
end %用当前行K2列元素减去当前行k列元素乘以第k行K2列元素 J(k3,k)=0; %当前行第k列元素已消为0 end
else %是第三行k=3
%第三行k=3的前代运算---------------------------------------------------- for k3=k1:N0 %从第四行到2n行(最后一行)
for k2=k1:N1 %从第四列到2n+1列(即扩展列)
J(k3,k2)=J(k3,k2)-J(k3,k)*J(k,k2);%消去运算(当前行3列元素消为0)
end %用当前行K2列元素减去当前行3列元素乘以第三行K2列元素
J(k3,k)=0; %当前行第3列元素已消为0
Word 资料
.
end end end
%上面是用线性变换方式高斯消去法将Jacobi矩阵化成单位矩阵 %----------------------------------------------------------------------------------- for k=3:2:N0-1
L=(k+1)./2;
e(L)=e(L)-J(k,N); %修改节点电压实部 k1=k+1;
f(L)=f(L)-J(k1,N); %修改节点电压虚部 end
%修改节点电压--------------------------- for k=3:N0
DET=abs(J(k,N));
if DET>=pr %电压偏差量是否满足要求 IT2=IT2+1; %不满足要求的节点数加1 end end
ICT2(a)=IT2; %不满足要求的节点数 ICT1=ICT1+1; %迭代次数 end
%用高斯消去法解\"w=-J*V\" disp('迭代次数:'); disp(ICT1);
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)*1i; %将各节点电压用复数表示 end
%计算各输出量------------------------------------------------------ disp('各节点的实际电压标幺值E为:');
disp(E); %显示各节点的实际电压标幺值E用复数表示 disp('-----------------------------------------------------'); disp('各节点的电压大小V为:');
disp(V); %显示各节点的电压大小V的模值 disp('-----------------------------------------------------'); disp('各节点的电压相角deg为:');
disp(sida); %显示各节点的电压相角 for p=1:n C(p)=0; for q=1:n
C(p)=C(p)+conj(Y(p,q))*conj(E(q)); %计算各节点的注入电流的共轭值
Word 资料
.
end
S(p)=E(p)*C(p); %计算各节点的功率 S = 电压 X 注入电流的共轭值 end
disp('各节点的功率S为:');
disp(S); %显示各节点的注入功率
disp('-----------------------------------------------------'); disp('各条支路的首端功率Si为:'); for i=1:nl
p=B1(i,1);q=B1(i,2); if B1(i,6)==0
Si(p,q)=E(p)*(conj(E(p))*conj(B1(i,4)./2)+(conj(E(p)*B1(i,5))... -conj(E(q)))*conj(1./(B1(i,3)*B1(i,5)))); Siz(i)=Si(p,q); else
Si(p,q)=E(p)*(conj(E(p))*conj(B1(i,4)./2)+(conj(E(p)./B1(i,5))... -conj(E(q)))*conj(1./(B1(i,3)*B1(i,5)))); Siz(i)=Si(p,q); end
disp(Si(p,q)); SSi(p,q)=Si(p,q);
ZF=['S(',num2str(p),',',num2str(q),')=',num2str(SSi(p,q))]; disp(ZF);
disp('-----------------------------------------------------'); end
disp('各条支路的末端功率Sj为:'); for i=1:nl
p=B1(i,1);q=B1(i,2); if B1(i,6)==0
Sj(q,p)=E(q)*(conj(E(q))*conj(B1(i,4)./2)+(conj(E(q)./B1(i,5))... -conj(E(p)))*conj(1./(B1(i,3)*B1(i,5)))); Sjy(i)=Sj(q,p); else
Sj(q,p)=E(q)*(conj(E(q))*conj(B1(i,4)./2)+(conj(E(q)*B1(i,5))... -conj(E(p)))*conj(1./(B1(i,3)*B1(i,5)))); Sjy(i)=Sj(q,p); end
disp(Sj(q,p)); SSj(q,p)=Sj(q,p);
ZF=['S(',num2str(q),',',num2str(p),')=',num2str(SSj(q,p))]; disp(ZF);
disp('-----------------------------------------------------'); end
disp('各条支路的功率损耗DS为:'); for i=1:nl
Word 资料
.
p=B1(i,1);q=B1(i,2); DS(i)=Si(p,q)+Sj(q,p); disp(DS(i)); DDS(i)=DS(i);
ZF=['DS(',num2str(p),',',num2str(q),')=',num2str(DDS(i))]; disp(ZF);
disp('-----------------------------------------------------'); end
附录2
使用PQ分解法进行潮流计算的Matlab程序代码
%PQ分解法潮流计算程序
%本文中的实例数据如下:节点数为9;支路数为9;平衡母线节点号为1;误差精度为0.00001;PQ节点数为5; %主程序 clear all; format long;
n=input('请输入节点数:n='); nl=input('请输入支路数:nl=');
isb=input('请输入平衡母线节点号:isb='); pr=input('请输入误差精度:pr=');
B1=input('请输入由支路参数形成的矩阵:B1='); %输入B1 B2=input('请输入由支路参数形成的矩阵:B2='); %输入B2
Word 资料
.
na=input('请输入PQ节点数na=');
Y=zeros(n);YI=zeros(n);e=zeros(1,n);f=zeros(1,n);V=zeros(1,n);O=zeros(1,n); for i=1:nl if B1(i,6)==0
p=B1(i,1);q=B1(i,2); else p=B1(i,2);q=B1(i,1); end
Y(p,q)=Y(p,q)-1./(B1(i,3)*B1(i,5)); YI(p,q)=YI(p,q)-1./B1(i,3); Y(q,p)=Y(p,q); YI(q,p)=YI(p,q);
Y(q,q)=Y(q,q)+1./(B1(i,3)*B1(i,5)^2)+B1(i,4); YI(q,q)=YI(q,q)+1./B1(i,3); Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4); YI(p,p)=YI(p,p)+1./B1(i,3); end %求导纳矩阵 disp('节点导纳矩阵为:'); disp(Y);
G=real(Y);B=imag(YI);BI=imag(Y); for i=1:n
Word 资料
.
S(i)=B2(i,1)-B2(i,2); BI(i,i)=BI(i,i)+B2(i,5); end
P=real(S);Q=imag(S); for i=1:n
e(i)=real(B2(i,3)); f(i)=imag(B2(i,3)); V(i)=B2(i,4); end for i=1:n
if B2(i,6)==2
V(i)=sqrt(e(i)^2+f(i)^2); O(i)=atan(f(i)./e(i)); end end for i=2:n if i==n
B(i,i)=1./B(i,i); else IC1=i+1; for j1=IC1:n
B(i,j1)=B(i,j1)./B(i,i); end
Word 资料
.
B(i,i)=1./B(i,i); for k=i+1:n for j1=i+1:n
B(k,j1)=B(k,j1)-B(k,i)*B(i,j1); end end end end p=0;q=0; for i=1:n if B2(i,6)==2 p=p+1;k=0; for j1=1:n
if B2(j1,6)==2 k=k+1; A(p,k)=BI(i,j1); end end end end for i=1:na if i==na
Word 资料
.
A(i,i)=1./A(i,i); else k=i+1; for j1=k:na
A(i,j1)=A(i,j1)./A(i,i); end
A(i,i)=1./A(i,i); for k=i+1:na for j1=i+1:na
A(k,j1)=A(k,j1)-A(k,i)*A(i,j1); end end end end
ICT2=1;ICT1=0;kp=1;kq=1;K=1;DET=0;ICT3=1; while ICT2~=0||ICT3~=0 ICT2=0;ICT3=0; for i=1:n if i~=isb C(i)=0; for k=1:n
C(i)=C(i)+V(k)*(G(i,k)*cos(O(i)-O(k))+BI(i,k)*sin(O(i)-O(k)));
Word 资料
.
end
DP1(i)=P(i)-V(i)*C(i); DP(i)=DP1(i)./V(i); DET=abs(DP1(i)); if DET>=pr ICT2=ICT2+1; end end end Np(K)=ICT2; if ICT2~=0 for i=2:n
DP(i)=B(i,i)*DP(i); if i~=n IC1=i+1; for k=IC1:n
DP(k)=DP(k)-B(k,i)*DP(i); end else
for LZ=3:i L=i+3-LZ; IC4=L-1;
Word 资料
.
for MZ=2:IC4 I=IC4+2-MZ;
DP(I)=DP(I)-B(I,L)*DP(L); end end end end for i=2:n
O(i)=O(i)-DP(i); end kq=1;L=0; for i=1:n if B2(i,6)==2 C(i)=0;L=L+1; for k=1:n
C(i)=C(i)+V(k)*(G(i,k)*sin(O(i)-O(k))-BI(i,k)*cos(O(i)-O(k))); end
DQ1(i)=Q(i)-V(i)*C(i); DQ(L)=DQ1(i)./V(i); DET=abs(DQ1(i)); if DET >=pr
Word 资料
.
ICT3=ICT3+1; end end end else kp=0; if kq~=0; L=0; for i=1:n if B2(i,6)==2 C(i)=0;L=L+1; for k=1:n
C(i)=C(i)+V(k)*(G(i,k)*sin(O(i)-O(k))-BI(i,k)*cos(O(i)-O(k))); end
DQ1(i)=Q(i)-V(i)*C(i); DQ(L)=DQ1(i)./V(i); DET=abs(DQ1(i)); end end end end Nq(K)=ICT3;
Word 资料
.
if ICT3~=0 L=0; for i=1:na
DQ(i)=A(i,i)*DQ(i); if i==na for LZ=2:i L=i+2-LZ; IC4=L-1; for MZ=1:IC4 I=IC4+1-MZ;
DQ(I)=DQ(I)-A(I,L)*DQ(L); end end else IC1=i+1; for k=IC1:na
DQ(k)=DQ(k)-A(k,i)*DQ(i); end end end L=0; for i=1:n
Word 资料
.
if B2(i,6)==2 L=L+1;
V(i)=V(i)-DQ(L); end end kp=1; K=K+1; else kq=0; if kp~=0 K=K+1; end end for i=1:n
Dy(K-1,i)=V(i); end end
disp('迭代次数'); disp(K);
disp('每次没有达到精度要求的有功功率个数为'); disp(Np);
disp('每次没有达到精度要求的无功功率个数为');
Word 资料
.
disp(Nq); for k=1:n
E(k)=V(k)*cos(O(k))+V(k)*sin(O(k))*j; O(k)=O(k)*180./pi; end
disp('各节点的电压标幺值E为:'); disp(E);
disp('各节点的电压V大小为:'); disp(V);
disp('各节点的电压相角O为:'); disp(O); 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); end
disp('各节点的功率S为:'); disp(S);
disp('各条支路的首端功率Sj为:'); for i=1:nl
Word 资料
.
if B1(i,6)==0
p=B1(i,1);q=B1(i,2); else p=B1(i,2);q=B1(i,1); end
Si(p,q)=E(p)*(conj(E(p))*conj(B1(i,4)./2)+(conj(E(p)*B1(i,5))-conj(E(q)))*conj(1./(B1(i,3)*B1(i,5)))); disp(Si(p,q)); end
disp('各条支路的末端功率Sj为:'); for i=1:nl
if B1(i,6)==0
p=B1(i,1);q=B1(i,2); else p=B1(i,2);q=B1(i,1); end
Sj(q,p)=E(q)*(conj(E(q))*conj(B1(i,4)./2)+(conj(E(q)./B1(i,5))-conj(E(p)))*conj(1./(B1(i,3)*B1(i,5)))); disp(Sj(q,p)); end
disp('各条支路的功率损耗DS为:'); for i=1:nl
Word 资料
.
if B1(i,6)==0
p=B1(i,1);q=B1(i,2); else p=B1(i,2);q=B1(i,1); end
DS(i)=Si(p,q)+Sj(q,p); disp(DS(i)); end for i=1:K Cs(i)=i; for j=1:n
Dy(K,j)=Dy(K-1,j); end end
附录3
进行三相短路容量计算的Matlab程序代码
%短路容量计算程序
%---------------------------------------------------------------------
% B1矩阵:1、支路首端号;2、末端号;3、支路阻抗;4、支路对地电纳 % 5、支路的变比;6、支路首端处于K侧为1,1侧为0
% B2矩阵:1、该节点发电机功率;2、该节点负荷功率;3、节点电压初始值
Word 资料
.
% 4、PV节点电压V的给定值;5、节点所接的无功补偿设备的容量 % 6、节点分类标号:1为平衡节点(应为1号节点);2为PQ节点; %Yd为修改后的节点导纳矩阵
%-----------------------------------------------------------------------
clear all; format long;
g1=input('300MW发电机数:g1='); g2=input('250MW发电机数:g2='); n=input('请输入节点数:n='); nl=input('请输入支路数:nl=');
B1=input('请输入由各支路参数形成的矩阵:B1='); B2=input('请输入各节点参数形成的矩阵:B2=');
Y=zeros(n);
% Y为修改前节点导纳矩阵 for i=1:nl
%支路数
%左节点处于1侧
if B1(i,6)==0
p=B1(i,1);q=B1(i,2);
else %左节点处于K侧
Word 资料
.
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)+B1(i,4); %对角元K侧 Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4); end
%---------------------------------------------------------- %Y2-Y5为各PQ节点负荷的导纳
Y1=0;Y2=conj(B2(2,2));Y3= conj(B2(5,2));
Xd300=0.51j/0.950413^2; XT300=0.033212j/0.950413^2; Xd250=0.714j/0.950413^2; XT250=0.038747j/0.950413^2;
Y6=g1/(XT300+Xd300)+g2/(XT250+Xd250); %处理相应的负荷及机组部分的导纳
%------------------------------------------------------------
C=[Y1,Y2,Y3,Y4,Y5,Y6];
conj(B2(3,2));Y4=
conj(B2(4,2));Y5=
%对角元1侧
Word 资料
.
Yd=Y; for i=1:n
Yd(i,i)=Yd(i,i)+C(i); %修改各节点自导纳 end disp(Yd);
Z = inv(Yd); %求节点阻抗矩阵 for j=1:n
I(j) = 1/Z(j,j); %电压故障前电压标幺值为1 S(j)=abs(I(j)); Sn(j)=S(j)*100; %短路电流有名值 end
%计算完毕----------------------------------------------------
disp('各节点短路时的短路电流幅值标幺值') disp(abs(I))
disp('短路容量有名值Sn='); disp(Sn);
Word 资料
因篇幅问题不能全部显示,请点此查看更多更全内容
怀疑对方AI换脸可以让对方摁鼻子 真人摁下去鼻子会变形
女子野生动物园下车狼悄悄靠近 后车司机按喇叭提醒
睡前玩8分钟手机身体兴奋1小时 还可能让你“变丑”
惊蛰为啥吃梨?倒春寒来不来就看惊蛰
男子高速犯困开智能驾驶出事故 60万刚买的奔驰严重损毁