www.pudn.com > IEEE33DG.rar > check_kxj.m, change:2015-04-17,size:7184b


function guanck=check_kxj(Swarm1) 
b=32; 
n=33; 
LL=5;      %联络开关数   
check=1;           
H=[ 7     6     5     4     3     2    20    19    18    33     0     0     0     0     0     0     0     0     0     0     0 
    14    13    12    11    10     9    34     0     0     0     0     0     0     0     0     0     0     0     0     0     0 
    11    10     9     8     7     6     5     4     3     2    21    20    19    18    35     0     0     0     0     0     0 
    17    16    15    14    13    12    11    10     9     8     7     6    32    31    30    29    28    27    26    25    36 
    24    23    22    28    27    26    25     5     4     3    37     0     0     0     0     0     0     0     0     0     0];%由函数matrixH生成 
 
    for i1=1:LL 
        a(1,i1)=H(i1,Swarm1(1,i1)); 
    end 
BranchM=[1 1 2    0.0922+i*0.047  %支路参数矩阵 
         2 2 3    0.4930+i*0.2511  
         3 3 4    0.3660+i*0.1864 
         4 4 5    0.3811+i*0.1941 
         5 5 6    0.8190+i*0.7070 
         6 6 7    0.1872+i*0.6188 
         7 7 8    0.7114+i*0.2351 
         8 8 9    1.0300+i*0.7400 
         9 9 10   1.0440+i*0.7400 
         10 10 11 0.1966+i*0.0650 
         11 11 12 0.3744+i*0.1238 
         12 12 13 1.4680+i*1.1550 
         13 13 14 0.5416+i*0.7129 
         14 14 15 0.5910+i*0.5260 
         15 15 16 0.7463+i*0.5450 
         16 16 17 1.2890+i*1.7210 
         17 17 18 0.3720+i*0.5740 
         18 2 19 0.1640+i*0.1565 
         19 19 20 1.5042+i*1.3554 
         20 20 21 0.4095+i*0.4784 
         21 21 22 0.7089+i*0.9373 
         22 3 23 0.4512+i*0.3083 
         23 23 24 0.8980+i*0.7091 
         24 24 25 0.8960+i*0.7011 
         25 6 26 0.2030+i*0.1034 
         26 26 27 0.2842+i*0.1447 
         27 27 28 1.0590+i*0.9337 
         28 28 29 0.8042+i*0.7006 
         29 29 30 0.5075+i*0.2585 
         30 30 31 0.9744+i*0.9630 
         31 31 32 0.3105+i*0.3619 
         32 32 33 0.3410+i*0.5362 
         33 8  21 2.0+i*2.0 
         34 9  15 2.0+i*2.0      %要保证联络开关的首节点必须是T=3节点,编程决定的。(如果两个节点T=2时就不做要求了) 
         35 22 12 2.0+i*2.0 
         36 18 33 0.5+i*0.5 
         37 25 29 0.5+i*0.5   ]; 
%  定义节点到母节点路径矩阵A(元素是节点号)(母节点编号为1) 
A=zeros(b);                   %对矩阵A进行初始化                 
for i1=1:b 
    A(i1,1)=i1;                 %将路径矩阵A的第一列储存为支路号 
end              
    for j=1:n                 %利用Z矩阵中的首末节点列向量进行路径搜索 
        n1=j; 
        k=2; 
        while(j~=1)            %一直搜寻到母节点1结束 
        for m=1:b 
        if(BranchM(m,3)==j)          %在末节点定位j 
            A(n1,k)=BranchM(m,2);      
            j=BranchM(m,2);          %将首节点赋给j,然后再在末节点定位j 
            k=k+1; 
        end 
        end 
        end 
    end 
    A(n,1)=n; 
     
%定义回路中含有的节点矩阵NodeH,由A矩阵求得 
for i1=n:b+LL 
        jd=max(intersect(A(BranchM(i1,2),:),A(BranchM(i1,3),:)));  %取回路交叉点jd,保证是单回路 
        h=1; 
        while(A(BranchM(i1,2),h)~=jd) 
            NodeH(i1-b,h)=A(BranchM(i1,2),h); 
            h=h+1; 
        end 
        NodeH(i1-b,h)=jd; 
        h1=1; 
        while(A(BranchM(i1,3),h1)~=jd) 
            NodeH(i1-b,h+1)=A(BranchM(i1,3),h1); 
            h=h+1; 
            h1=h1+1; 
        end 
    end 
%定义T矩阵为T节点度数矩阵T(第一列为节点号,第二列为节点的度数)      
 QN=unique(NodeH); 
 QN=QN(2:end);  %NodeH中不重复的非零点  QN为一列矩阵 
 for i1=1:b+LL 
    NodeN(BranchM(i1,2),BranchM(i1,3))=1; 
    NodeN(BranchM(i1,3),BranchM(i1,2))=1; 
end 
k=1; 
for i1=1:length(QN) 
    gq=find(NodeN(QN(i1),:)==1); 
    if length(gq)>2 
       T(k,1)=QN(i1); 
       T(k,2)=length(gq); 
       k=k+1; 
    end 
end 
 
F=zeros(5); 
%1、判断是否形成环路,F为支路环路关联矩阵(行表示回路,列表示断开开关,若任意两行相同,则表示形成了环路) 
for i1=1:LL  %回路 
    for i2=1:LL   %断开开关 
        if max(a(1,i2)==H(i1,:)) 
            F(i1,i2)=1; 
        end 
    end 
end 
for i1=1:LL-1 
    for i2=i1+1:LL 
        if min(F(i1,:)==F(i2,:)) 
        check=0;                %disp('出现环路')出现环路时 
        end 
    end 
end 
 
%2、判断是否形成孤岛或孤点 
%产生A1矩阵,A1矩阵为联络开关节点不全是T=3节点的强狂,补充了联络回路,用于首尾节点搜索到T节点 
%为辅助矩阵,可单独运行产生后将结果粘到大程序中 
A1=[12    22     0     0     0     0     0     0 
    29    30    31    32    33    18    17    16 
    15    16    17    18    33    32    31    30 
    29    25    24    23     0     0     0     0  ];  
 
for i1=1:LL 
    m1=BranchM(a(1,i1),2);  %首节点 
    n1=BranchM(a(1,i1),3);  %尾节点 
   hs=max(intersect(A(m1,:),T(:,1)));  %首节点搜扫到的T节点 
   h1=find(T(:,1)==hs); 
   T(h1,2)=T(h1,2)-1; 
   TT(i1,1)=hs;                 %首节点寻到的,观察每个开关断开都使哪些T改变(TT开关记录T节点变化情况) 
    
   k=1; 
   gg=0; 
   for i2=1:length(T)            %尾节点搜扫到的T节点 
       if max(A(T(i2,1),:)==n1) 
           gg(k,1)=find(A(T(i2,1),:)==n1); 
           gg(k,2)=T(i2,1); 
           k=k+1; 
       end 
    end 
   if gg~=0                        
      j=find(min(gg(:,1))); 
       h2=find(T(:,1)==gg(j,2)); 
       T(h2,2)=T(h2,2)-1; 
       TT(i1,2)=T(h2,1);  
   else                       %若gg=0,说明尾节点搜索时遇到联络开关不是T=3节点情况,则需要从A1矩阵中搜索 
    for i3=1:length(A1(:,1)) 
           if max(A1(i3,:)==n1) 
              h3=intersect(A1(i3,:),T(:,1)); 
              if hs~=h3                       %保证首末节点寻到的T=3的节点不相同,防止出现联络开关的两个节点都不是T=3节点的情况,如18,33 
                h4=find(T(:,1)==h3); 
                T(h4,2)=T(h4,2)-1; 
                TT(i1,2)=h3;      %尾节点寻到的,观察每个开关断开都使哪些T改变(TT开关记录T节点变化情况) 
              end 
           end 
    end 
    end 
end 
%下面生成T节点连通关系矩阵(LT),可生成后再粘贴到程序中 
LT=zeros(n); 
%1、仅从A矩阵搜索 
for i1=length(T):-1:1    %从T的最后一行开始 
    glt1=0; 
    glt1=intersect(A(T(i1,1),:),T(:,1));     
    if length(glt1)~=1 
        LT(T(i1,1),glt1(1,length(glt1)-1))=1; 
        LT(glt1(1,length(glt1)-1),T(i1,1))=1; 
    end 
end 
%2、联络开关处 
%产生Alt矩阵,Alt矩阵为联络开关节点不全是T=3节点的情况,补充了联络回路,用于首尾节点搜索到T节点 
Alt =[8    21     0     0     0     0     0     0     0 
     9    15     0     0     0     0     0     0     0 
    12    22    21     0     0     0     0     0     0 
    15    16    17    18    33    32    31    30    29 
    29    25    24    23     3     0     0     0     0  ]; 
 
for i1=1:length(Alt(:,1)) 
    glt2=0; 
    glt2=intersect(Alt(i1,:),T(:,1)); 
    LT(glt2(1,1),glt2(1,2))=1; 
    LT(glt2(1,2),glt2(1,1))=1; 
end 
 
%判断是否出现孤岛(孤点) 
if max(T(:,2)==0) 
    check=0;                           %disp('出现孤岛情况1'); 
elseif max(T(:,2)==1) 
    g1=find(T(:,2)==1); 
    for i1=1:length(g1) 
       gt2(i1,1)=T(g1(i1,1),1); 
    end 
   for i1=1:length(gt2)-1 
       for i2=i1+1:length(gt2) 
           if LT(gt2(i1,1),gt2(i2,1))==1 
               check=0;                 %disp('出现孤岛情况2'); 
               break 
           end 
       end 
   end 
end 
if check==1 
    guanck=1; 
else 
    guanck=0; 
end