⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yacha1.m

📁 基于最优流的配电网络重构程序
💻 M
字号:
%% 找到要闭合的支路与要打开的支路
%% 找到要闭合的支路与要打开的支路
%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
















    






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -