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

其他行业

开发平台:

Matlab

  1. %   Power Flow Solution by the Power Perturbation Technique
  2. %   Copyright (c) 1998 H. Saadat
  3. ns=0;
  4. nbus = length(busdata(:,1));
  5. for k=1:nbus
  6. n=busdata(k,1);
  7. kb(n)=busdata(k,2); Vm(n)=busdata(k,3); delta(n)=busdata(k, 4);
  8. Pd(n)=busdata(k,5); Qd(n)=busdata(k,6); Pg(n)=busdata(k,7); Qg(n) = busdata(k,8);
  9. Qmin(n)=busdata(k, 9); Qmax(n)=busdata(k, 10);
  10. Qsh(n)=busdata(k, 11);
  11.     if Vm(n) <= 0  Vm(n) = 1.0; V(n) = 1 + j*0;
  12.     else delta(n) = pi/180*delta(n);
  13.          V(n) = Vm(n)*(cos(delta(n)) + j*sin(delta(n)));
  14.          P(n)=(Pg(n)-Pd(n))/basemva;
  15.          Q(n)=(Qg(n)-Qd(n)+ Qsh(n))/basemva;
  16.          S(n) = P(n) + j*Q(n);
  17.     end
  18. if kb(n) == 1, ns = ns+1; else, end
  19. nss(n) = ns;
  20. end
  21. ii=0;
  22. for ib=1:nbus
  23.      if kb(ib) == 0 | kb(ib) == 2
  24.      ii = ii+1;
  25.       jj=0;
  26.          for jb=1:nbus
  27.              if kb(jb) == 0 | kb(jb) == 2
  28.              jj = jj+1;
  29.              Y1(ii,jj)=Ybus(ib,jb);
  30.              else,end
  31.          end
  32.      else, end
  33. end
  34. YS =Y1;
  35. maxerror = 1;
  36. iter = 0;
  37. % Start of iterations
  38. while maxerror >= accuracy & iter <= maxiter % Test for max. power mismatch
  39. iter = iter+1;
  40. id=0; iv=0;
  41.   for n=1:nbus
  42.   nn=n-nss(n);
  43.     if kb(n) ~=1
  44.     I(nn)=0;
  45.       for ii=1:nbr
  46.         if nl(ii) == n | nr(ii) == n
  47.            if nl(ii) == n,  l = nr(ii); end
  48.            if nr(ii) == n,  l = nl(ii); end
  49.               if kb(l)==1
  50.               I(nn)=I(nn)-Ybus(n,l)*V(l); end
  51.         else, end
  52.       end
  53.      YS(nn,nn) = Y1(nn,nn)- conj(S(n))/Vm(n)^2 ;
  54.     else,end
  55.   end
  56. Vk = YSconj(I');
  57.   for n=1:nbus
  58.     if kb(n)~=1
  59.     nn=n-nss(n);
  60.     V(n) = Vk(nn);
  61.     Pk(n)= (abs(Vk(nn)))^2/(Vm(n))^2*P(n);
  62.     Qk(n)= (abs(Vk(nn)))^2/(Vm(n))^2*Q(n);
  63.     Vm(n)=abs(Vk(nn));
  64.     else, end
  65.     if kb(n)==1
  66.     Pk(n)=P(n); Qk(n)=Q(n); else, end
  67.   end
  68. DP = Pk - P;
  69. DQ = Qk - Q;
  70. maxerror=max(max(abs(DP)),max(abs(DQ)));
  71. end
  72. for ii=1:nbus
  73.   if kb(ii) ==1
  74.      S1=0;
  75.      for jj=1:nbus
  76.      S1 = S1 + conj(Ybus(ii,jj))*conj(V(jj));
  77.      end
  78.   S(n)=V(ii)*S1;
  79.   Pk(ii) = real(S(n));
  80.   Qk(ii) = imag(S(n));
  81.   else,end
  82. end
  83. P = Pk; Q = Qk; S = P+j*Q;
  84. delta=angle(V);
  85. deltad=180/pi*delta;
  86. %clear Ybus; clear Ym; clear t, clear A; clear DC; clear DX
  87.   tech=('               Power Flow Solution by Power Perturbation Technique');
  88. k=0;
  89. for n = 1:nbus
  90.      if kb(n) == 1
  91.      S(n)=P(n)+j*Q(n);
  92.      Pg(n) = P(n)*basemva + Pd(n);
  93.      Qg(n) = Q(n)*basemva + Qd(n) - Qsh(n);
  94.      k=k+1;
  95.      Pgg(k)=Pg(n);
  96.      elseif  kb(n) ==2
  97.      S(n)=P(n)+j*Q(n);
  98.      Qg(n) = Q(n)*basemva + Qd(n) - Qsh(n);
  99.      k=k+1;
  100.      Pgg(k)=Pg(n);
  101.      Qgg(k)=Qg(n);     %june 97
  102.      end
  103. yload(n) = (Pd(n)- j*Qd(n)+j*Qsh(n))/(basemva*Vm(n)^2);
  104. end
  105. busdata(:,3)=Vm'; busdata(:,4)=deltad';
  106. Pgt = sum(Pg);  Qgt = sum(Qg); Pdt = sum(Pd); Qdt = sum(Qd); Qsht = sum(Qsh);
  107. clear Pk Qk DP DQ DV I S1 Vk Y1 YS delta ib id ii iv jb jj