Zbuild.m
上传用户:eighthdate
上传日期:2014-05-24
资源大小:270k
文件大小:3k
源码类别:

其他行业

开发平台:

Matlab

  1. % This program forms the complex bus impedance matrix by the method
  2. % of building algorithm.  Bus zero is taken as reference.
  3. %  Copyright (c) 1998  by H. Saadat
  4. function [Zbus] = zbuild(linedata)
  5. nl = linedata(:,1); nr = linedata(:,2); R = linedata(:,3);
  6. X = linedata(:,4);
  7. nbr=length(linedata(:,1)); nbus = max(max(nl), max(nr));
  8. for k=1:nbr
  9.     if R(k) == inf | X(k) ==inf
  10.     R(k) = 99999999; X(k) = 99999999;
  11.     else, end
  12. end
  13. ZB = R + j*X;
  14. Zbus = zeros(nbus, nbus);
  15. tree=0;  %%%%new
  16. % Adding a branch from a new bus to reference bus 0
  17.   for I = 1:nbr
  18.   ntree(I) = 1;
  19.       if nl(I) == 0 | nr(I) == 0
  20.           if nl(I) == 0      n = nr(I);
  21.           elseif nr(I) == 0  n = nl(I);
  22.           end
  23.               if abs(Zbus(n, n)) == 0   Zbus(n,n) = ZB(I);tree=tree+1; %%new
  24.               else Zbus(n,n) = Zbus(n,n)*ZB(I)/(Zbus(n,n) + ZB(I));
  25.               end
  26.               ntree(I) = 2;
  27.       else,end
  28.   end
  29. % Adding a branch from new bus to an existing bus
  30. while tree < nbus  %%% new
  31.   for n = 1:nbus
  32.      nadd = 1;
  33.      if abs(Zbus(n,n)) == 0
  34.         for I = 1:nbr
  35.             if nadd == 1;
  36.                 if nl(I) == n | nr(I) == n
  37.                    if nl(I) == n      k = nr(I);
  38.                    elseif nr(I) == n  k = nl(I);
  39.                    end
  40.                      if abs(Zbus(k,k)) ~= 0
  41.                           for m = 1:nbus
  42.                               if m ~= n
  43.                               Zbus(m,n) = Zbus(m,k);
  44.                               Zbus(n,m) = Zbus(m,k);
  45.                               else, end
  46.                           end
  47.                           Zbus(n,n) = Zbus(k,k) + ZB(I); tree=tree+1; %%new
  48.                           nadd = 2;  ntree(I) = 2;
  49.                      else, end
  50.                 else, end
  51.             else, end
  52.         end
  53.      else, end
  54. end
  55. end  %%%%%%new
  56. % Adding a link between two old buses
  57.   for n = 1:nbus
  58.       for I = 1:nbr
  59.           if ntree(I) == 1
  60.              if nl(I) == n | nr(I) == n
  61.                  if nl(I) == n     k = nr(I);
  62.                  elseif nr(I) == n k = nl(I);
  63.                  end
  64.              DM = Zbus(n,n) + Zbus(k,k) + ZB(I) - 2*Zbus(n,k);
  65.                   for jj = 1:nbus
  66.                   AP = Zbus(jj,n) - Zbus(jj,k);
  67.                        for kk = 1:nbus
  68.                        AT = Zbus(n,kk) - Zbus(k, kk);
  69.                        DELZ(jj,kk) = AP*AT/DM;
  70.                        end
  71.                   end
  72.                   Zbus = Zbus - DELZ;
  73.                   ntree(I) = 2;
  74.              else,end
  75.           else,end
  76.       end
  77.   end