Zbuildpi.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. % This program is compatible with power flow data.
  4. %  Copyright (C) 1998  by H. Saadat.
  5. function [Zbus, linedata] = zbuildpi(linedata, gendata, yload)
  6. ng=length(gendata(:,1));
  7. nlg=gendata(:,1);
  8. nrg=gendata(:,2);
  9. zg= gendata(:,2) + j*gendata(:,3);
  10. nl = linedata(:,1); nr = linedata(:,2); R = linedata(:,3);
  11. X = linedata(:,4);
  12. nbr=length(linedata(:,1)); nbus = max(max(nl), max(nr));
  13. nc = length(linedata(1,:));
  14. for k=1:nbr
  15.     if R(k) == inf | X(k) == inf
  16.     R(k) = 99999999; X(k) = 99999999;
  17.     else, end
  18. end
  19. if nc > 4
  20. BC = linedata(:,5);
  21.     for n = 1:nbus
  22.     yc(n) = 0;
  23.     nlc(n) = 0; nrc(n) = n;
  24.           for k = 1:nbr
  25.              if nl(k) == n | nr(k) == n
  26.              yc(n) = yc(n) + j*BC(k);
  27.              else, end
  28.        end
  29.     end
  30. elseif nc==4 yc= zeros(1, nbr); end
  31. nlc=nlc'; nrc=nrc'; yc=yc.';
  32. ZB = R + j*X;
  33. if exist('yload') == 1
  34.    yload = yload.';
  35.    yc =yc + yload;
  36. else, end
  37. m = 0;
  38. for n = 1:nbus
  39.    if abs(yc(n)) ~=0
  40.    m=m+1;
  41.    nlcc(m) = nlc(n);
  42.    nrcc(m) = nrc(n);
  43.    zc(m) = 1/yc(n);
  44.    else, end
  45. end
  46. nlcc=nlcc'; nrcc=nrcc'; zc=zc.';
  47. nl=[nlg; nlcc; nl]; nr = [nrg; nrcc; nr]; ZB = [zg; zc; ZB];
  48. linedata=[nl nr real(ZB) imag(ZB)];
  49. nbr= length(nl);
  50. Zbus = zeros(nbus, nbus);
  51. tree=0;  %%%%new
  52. % Adding a branch from a new bus to reference bus 0
  53.   for I = 1:nbr
  54.   ntree(I) = 1;
  55.       if nl(I) == 0 | nr(I) == 0
  56.           if nl(I) == 0      n = nr(I);
  57.           elseif nr(I) == 0  n = nl(I);
  58.           end
  59.               if abs(Zbus(n, n)) == 0   Zbus(n,n) = ZB(I); tree=tree+1; %%new
  60.               else Zbus(n,n) = Zbus(n,n)*ZB(I)/(Zbus(n,n) + ZB(I));
  61.               end
  62.               ntree(I) = 2;
  63.       else,end
  64.   end
  65. % Adding a branch from new bus to an existing bus
  66. while tree < nbus  %%% new
  67.   for n = 1:nbus
  68.      nadd = 1;
  69.      if abs(Zbus(n,n)) == 0
  70.         for I = 1:nbr
  71.             if nadd == 1
  72.                 if nl(I) == n | nr(I) == n
  73.                    if nl(I) == n      k = nr(I);
  74.                    elseif nr(I) == n  k = nl(I);
  75.                    end
  76.                      if abs(Zbus(k,k)) ~= 0
  77.                           for m = 1:nbus
  78.                               if m ~= n
  79.                               Zbus(m,n) = Zbus(m,k);
  80.                               Zbus(n,m) = Zbus(m,k);
  81.                               else, end
  82.                           end
  83.                           Zbus(n,n) = Zbus(k,k) + ZB(I); tree=tree+1; %%new
  84.                           nadd = 2; ntree(I) = 2;
  85.                      else, end
  86.                 else, end
  87.             else, end
  88.         end
  89.      else, end
  90. end
  91. end  %%%%%%new
  92. % Adding a link between two old buses
  93.   for n = 1:nbus
  94.       for I = 1:nbr
  95.           if ntree(I) == 1
  96.              if nl(I) == n | nr(I) == n
  97.                  if nl(I) == n     k = nr(I);
  98.                  elseif nr(I) == n k = nl(I);
  99.                  end
  100.              DM = Zbus(n,n) + Zbus(k,k) + ZB(I) - 2*Zbus(n,k);
  101.                   for jj = 1:nbus
  102.                   AP = Zbus(jj,n) - Zbus(jj,k);
  103.                        for kk = 1:nbus
  104.                        AT = Zbus(n,kk) - Zbus(k, kk);
  105.                        DELZ(jj,kk) = AP*AT/DM;
  106.                        end
  107.                   end
  108.                   Zbus = Zbus - DELZ;
  109.                   ntree(I) = 2;
  110.              else,end
  111.           else,end
  112.       end
  113.   end