%% 找到要闭合的支路与要打开的支路
%% 找到要闭合的支路与要打开的支路
%formback5;
global A;
%A
[Rower,c0]=size(A);
Load(Rower,3)=0;
Load(:,1)=A(:,2);
Load(:,2)=A(:,5);
Load(:,3)=A(:,6);
global Ibr;
global Unods;
[sU,r1]=size(Unods);
global C;
[r,sC]=size(C);
%for i=1:sC %显示
%C(i)
%end
CC(sC,3)=0;
%% 给联络矩阵中的各个节点找到环路
for kk=1:sC
M=[];
sendnod=C(kk).nod1;
k=0;
while k<Rower
k=k+1;
if sendnod==A(k,2)
sendnod=A(k,1);
M=[M,k];
k=0;
end
end
sendnod=C(kk).nod2;
k=0;
N=[];
while k<Rower
k=k+1;
if sendnod==A(k,2)
sendnod=A(k,1);
N=[N,k];
k=0;
end
end
[r,m]=size(M);
[t,n]=size(N);
mm=0;
for i=1:m
for j=1:n
if A(M(i),1)==A(N(j),1)
mm=1;
break
elseif A(M(i),2)==A(N(j),1)
i=i-1;
mm=1;
break
elseif A(M(i),1)==A(N(j),2)
j=j-1;
mm=1;
break
end
end
if mm==1
break
end
end
if i~=0
C(kk).matrix1=M(:,i:-1:1);
else
C(kk).matrix1=[];
end
if j~=0
C(kk).matrix2=N(:,j:-1:1);
else
C(kk).matrix2=[];
end
end
for i=1:sC %显示
C(i)
end
%% 给联络矩阵中的各个节点找到环路
%% 找到压差最大的支路闭合
%% 计算压差
for i=1:sC
for j=1:sU
if C(i).nod1==Unods(j,2)
U1=abs(Unods(j,3));
break
end
end
for j=1:sU
if C(i).nod2==Unods(j,2)
U2=abs(Unods(j,3));
break
end
end
C(i).yacha=abs(U1-U2);
if U1>=U2 %% 电压大的节点在前
CC(i,1)=C(i).nod1;
CC(i,2)=C(i).nod2;
CC(i,3)=C(i).yacha;
else
CC(i,1)=C(i).nod2;
CC(i,2)=C(i).nod1;
CC(i,3)=C(i).yacha;
C(i).nod1=CC(i,1);
C(i).nod2=CC(i,2);
a=C(i).matrix1;
C(i).matrix1=C(i).matrix2;
C(i).matrix2=a;
end
end
CC=sortrows(CC,3); %% CC矩阵为:电压大节点、电压小节点、压差
%CC
%% 计算压差
%% 联络开关支路的电阻
sC1=sC;
s=0;
while s==0&&sC1~=0
sC1
M1=[];
M2=[];
for i=1:sC
if CC(sC1,1)==C(i).nod1||CC(sC1,1)==C(i).nod2
Zloop=C(i).risistance;
break
end
end
%% 联络开关支路的电阻
iii=i;
%% 计算环路电流dI
[r3,sZL1]=size(C(iii).matrix1);
for j=1:sZL1
Zloop=Zloop+A(C(iii).matrix1(1,j),3);
end
[r4,sZL2]=size(C(iii).matrix2);
for j=1:sZL2
Zloop=Zloop+A(C(iii).matrix2(1,j),3);
end
dI=CC(sC1,3)/Zloop;
%% 计算环路电流dI
%% 把dI与原电流叠加,并判断要打开的支路
[sIbr,c1]=size(Ibr);
Ibr1=[];
for i=1:sZL1
Ibr1=[Ibr1;[Ibr(C(iii).matrix1(1,i),1),Ibr(C(iii).matrix1(1,i),2),abs(Ibr(C(iii).matrix1(1,i),3)+dI)]];%节点号1、节点号2、支路电流幅值
end
for i=1:sZL2
Ibr1=[Ibr1;[Ibr(C(iii).matrix2(1,i),1),Ibr(C(iii).matrix2(1,i),2),abs(Ibr(C(iii).matrix2(1,i),3)-dI)]];
end
Ibr1=[Ibr1;[CC(sC1,1),CC(sC1,2),dI]];
Ibr1=sortrows(Ibr1,3);
if Ibr1(1,1)==CC(sC1,1)&&Ibr1(1,2)==CC(sC1,2) %当闭合支路与断开支路为同一支路时
sC1=sC1-1;
s=0;
else
s=1;
end
end
if sC1~=0
fprintf('%4d和%1d是闭合的联络开关两侧的节点。\n',CC(sC1,1),CC(sC1,2));
fprintf('%4d和%1d是断开的分段开关两侧的节点。\n',Ibr1(1,1),Ibr1(1,2));
%% 构造新的data
%% 构造新的data
M1=C(iii).matrix1;
M2=C(iii).matrix2;
kk=0;
for i1=1:sZL1
if Ibr1(1,1)==A(M1(i1),1)
kk=1;
break
end
end
A1(1,6)=0;
if kk==1
A1=[CC(sC1,2),CC(sC1,1),C(iii).risistance,C(iii).reactance,0,0];
if i1~=1
for i=sZL1:-1:i1+1
aa=A(M1(i),1);
A(M1(i),1)=A(M1(i),2);
A(M1(i),2)=aa;
for j=1:Rower
if A(M1(i),2)==Load(j,1)
A(M1(i),5)=Load(j,2);
A(M1(i),6)=Load(j,3);
break
end
end
end
end
else
for i2=1:sZL2
if Ibr1(1,1)==A(M2(i2),1)
break
end
end
A1=[CC(sC1,1),CC(sC1,2),C(iii).risistance,C(iii).reactance,0,0];
if i2~=1
for i=sZL2:-1:i2+1
aa=A(M2(i),1);
A(M2(i),1)=A(M2(i),2);
A(M2(i),2)=aa;
for j=1:Rower
if aa==Load(j,1)
A(M2(i),5)=Load(j,2);
A(M2(i),6)=Load(j,3);
break
end
end
end
end
end
for i=1:Rower
if A1(1,2)==Load(i,1)
A1(1,5)=Load(i,2);
A1(1,6)=Load(i,3);
break
end
end
A=[A;A1];
%% 把断开支路从A中删除
for i=1:Rower+1
if Ibr1(1,1)==A(i,1)&&Ibr1(1,2)==A(i,2)
risis=A(i,3);
react=A(i,4);
bb=i; %% 改变matrix中的行数时用
A(i,:)=[];
break
end
end
%% data的改造完成
%% data的改造完成
formback5;
%% 联络节点矩阵的改造,把断开的支路加入到联络节点矩阵中,取代已闭合的联络开关
C(iii).nod1=Ibr1(1,1);
C(iii).nod2=Ibr1(1,2);
C(iii).yacha=0;
C(iii).risistance=risis;
C(iii).reactance=react;
for i=1:sC
C(i).matrix1=[];
C(i).matrix2=[];
end
else
fprintf('over\n');
end
评论0