文档视界 最新最全的文档下载
当前位置:文档视界 › P-Q分解法潮流计算程序(详细注释)

P-Q分解法潮流计算程序(详细注释)


% n为节点数、nl为支路数、isb为平衡母线节点号(固定为 1)、pr为误差精度。
%矩阵 B2的每行是由下列参数构成的:
%① 节点所接发电机的功率 SG;
%② 节点负荷的功率 SL;
%③ 节点电压的初始值;
%④ PU 节点电压 U 的给定值;
%⑤ 节点所接的无功补偿设备的容量;
%⑥ 节点分类标号 igl。
%矩阵 B1的每行是由下列参数构成的:
%① 某支路的首端号 P;
%② 末端号 Q,且 P %③ 支路的阻抗(R +jX);
%⑤ 支路的变比 K;
%⑥ 折算到哪一侧的标志(如果支路的首端 P 处于高压侧则请输入“1”,否则请输入“0”)。



%请输入节点数:n=
n=5;
%请输入支路数:nl=
nl=5;
%请输入平衡母线节点号:isb=
isb=1;
%请输入误差精度:pr=
pr=0.00001;
%请输入由支路参数形成的矩阵:B1=
B1=[1 2 0.03i 0 1.05 0;2 3 0.08+0.3i 0.5i 1 0;2 4 0.1+0.35i 0 1 0;3 4 0.04+0.25i 0.5i 1 0;3 5 0.015i 0 1.05 1];
%请输入由节点参数形成的矩阵:B2=
B2=[0 0 1.05 1.05 0 1;0 3.7+1.3i 1.05 0 0 2;0 2+1i 1.05 0 0 2;0 1.6+0.8i 1.05 0 0 2;5 0 1.05 1.05 0 3];
%请输入由节点号及其对地阻抗形成的矩阵:X=
X=[1 0;2 0;3 0;4 0;5 0];
%请输入PQ节点号:na=
na=3;
Y=zeros(n);YI=zeros(n);e=zeros(1,n);f=zeros(1,n);V=zeros(1,n);O=zeros(1,n);%初始化,定义0矩阵

for i=1:nl%支路数
if B1(i,6)==0%左节点处于1侧
p=B1(i,1);q=B1(i,2);
else p=B1(i,2);q=B1(i,1);%左节点处于K侧
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)./2;%对角元K侧
YI(q,q)=YI(q,q)+1./B1(i,3);
Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4)./2;%对角元1侧
YI(p,p)=YI(p,p)+1./B1(i,3);
end
%求导纳矩阵
G=real(Y);B=imag(YI);BI=imag(Y);%分解出导纳阵的实部和虚部

for i=1:n%给定各节点注入功率
S(i)=B2(i,1)-B2(i,2); %i节点注入功率SG-SL
BI(i,i)=BI(i,i)+B2(i,5);%i节点无功补偿量
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); %PV节点电压给定模值
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); %%%%求系数矩阵的倒数,为下面求u*delt做铺垫
else IC1=i+1; %IC1=3
for j1=IC1:n %j1=3:5
B(i,j1)=B(i,j1)./B(i,i);
end
B(i,i)=1./B(i,i);%求系数矩阵的倒数

for k=i+1:n %k=3:n
for j1=i+1:n %k=4: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
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;%迭代次数K;不满足收敛要求的节点数
while ICT2~=0|ICT3~=0% N0=2*n 雅可比矩阵的阶数;N=N0+1扩展列
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)));
end
DP1(i)=P(i)-V(i)*C(i);%节点有功功率差
DP(i)=DP1(i)./V(i);%Dp/u
DET=abs(DP1(i));%求其精度
if DET>=pr%判断是否满足精度要求
ICT2=ICT2+1;%若不满足则加1
end
end
end
Np(K)=ICT2;%每次没有达到要求的有功功率个数
if ICT2~=0%每次没有达到要求的有功功率个数不为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;
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 %非PV节点
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);%DP/U
DET=abs(DQ1(i));%求其精度
if DET>=pr%判断精度是否满足要求
ICT3=ICT3+1;%不满足时加1
end
end
end
else kp=0;
if kq~=0;
L=0;
for i=1:n
if B2(i,6)==2 %非PV节点
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;
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;
fo

r 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
if B2(i,6)==2 %非PV节点
L=L+1;
V(i)=V(i)-DQ(L);
disp(V(i))
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('BI')
disp(BI);
disp('A')
disp(A);
disp('Y矩阵')
disp(Y);
disp('YI矩阵')
disp(YI);
disp('DP1')
disp(DP1);

disp('每次没有达到精度要求的有功功率个数为');
disp(Np);
disp('每次没有达到精度要求的无功功率个数为');
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);%计算各节点的功率 S = 电压E 注入电流的共轭值
end
disp('各节点的功率为');
disp(S);%显示各节点的注入功率
disp('各条支路的首端功率为');
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
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('各条支路的末端功率为');
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('各条支路的功率损耗为');
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
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
disp('每次迭代后各节点的电压值如图所示');
plot(Cs,Dy)
xlabel('迭代次数')
ylabel('电压')
title('电压迭代次数曲线');






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