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

其他行业

开发平台:

Matlab

  1. %   Power flow solution by Newton-Raphson method
  2. %   Copyright (c) 1998 by  H. Saadat
  3. ns=0; ng=0; Vm=0; delta=0; yload=0; deltad=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. end
  19. for k=1:nbus
  20. if kb(k) == 1, ns = ns+1; else, end
  21. if kb(k) == 2 ng = ng+1; else, end
  22. ngs(k) = ng;
  23. nss(k) = ns;
  24. end
  25. Ym=abs(Ybus); t = angle(Ybus);
  26. m=2*nbus-ng-2*ns;
  27. maxerror = 1; converge=1;
  28. iter = 0;
  29. % Start of iterations
  30. clear A  DC   J  DX
  31. while maxerror >= accuracy & iter <= maxiter % Test for max. power mismatch
  32. for i=1:m
  33. for k=1:m
  34.    A(i,k)=0;      %Initializing Jacobian matrix
  35. end, end
  36. iter = iter+1;
  37. for n=1:nbus
  38. nn=n-nss(n);
  39. lm=nbus+n-ngs(n)-nss(n)-ns;
  40. J11=0; J22=0; J33=0; J44=0;
  41.    for i=1:nbr
  42.      if nl(i) == n | nr(i) == n
  43.         if nl(i) == n,  l = nr(i); end
  44.         if nr(i) == n,  l = nl(i); end
  45.         J11=J11+ Vm(n)*Vm(l)*Ym(n,l)*sin(t(n,l)- delta(n) + delta(l));
  46.         J33=J33+ Vm(n)*Vm(l)*Ym(n,l)*cos(t(n,l)- delta(n) + delta(l));
  47.         if kb(n)~=1
  48.         J22=J22+ Vm(l)*Ym(n,l)*cos(t(n,l)- delta(n) + delta(l));
  49.         J44=J44+ Vm(l)*Ym(n,l)*sin(t(n,l)- delta(n) + delta(l));
  50.         else, end
  51.         if kb(n) ~= 1  & kb(l) ~=1
  52.         lk = nbus+l-ngs(l)-nss(l)-ns;
  53.         ll = l -nss(l);
  54.       % off diagonalelements of J1
  55.         A(nn, ll) =-Vm(n)*Vm(l)*Ym(n,l)*sin(t(n,l)- delta(n) + delta(l));
  56.               if kb(l) == 0  % off diagonal elements of J2
  57.               A(nn, lk) =Vm(n)*Ym(n,l)*cos(t(n,l)- delta(n) + delta(l));end
  58.               if kb(n) == 0  % off diagonal elements of J3
  59.               A(lm, ll) =-Vm(n)*Vm(l)*Ym(n,l)*cos(t(n,l)- delta(n)+delta(l)); end
  60.               if kb(n) == 0 & kb(l) == 0  % off diagonal elements of  J4
  61.               A(lm, lk) =-Vm(n)*Ym(n,l)*sin(t(n,l)- delta(n) + delta(l));end
  62.         else end
  63.      else , end
  64.    end
  65.    Pk = Vm(n)^2*Ym(n,n)*cos(t(n,n))+J33;
  66.    Qk = -Vm(n)^2*Ym(n,n)*sin(t(n,n))-J11;
  67.    if kb(n) == 1 P(n)=Pk; Q(n) = Qk; end   % Swing bus P
  68.      if kb(n) == 2  Q(n)=Qk;
  69.          if Qmax(n) ~= 0
  70.            Qgc = Q(n)*basemva + Qd(n) - Qsh(n);
  71.            if iter <= 7                  % Between the 2th & 6th iterations
  72.               if iter > 2                % the Mvar of generator buses are
  73.                 if Qgc  < Qmin(n),       % tested. If not within limits Vm(n)
  74.                 Vm(n) = Vm(n) + 0.01;    % is changed in steps of 0.01 pu to
  75.                 elseif Qgc  > Qmax(n),   % bring the generator Mvar within
  76.                 Vm(n) = Vm(n) - 0.01;end % the specified limits.
  77.               else, end
  78.            else,end
  79.          else,end
  80.      end
  81.    if kb(n) ~= 1
  82.      A(nn,nn) = J11;  %diagonal elements of J1
  83.      DC(nn) = P(n)-Pk;
  84.    end
  85.    if kb(n) == 0
  86.      A(nn,lm) = 2*Vm(n)*Ym(n,n)*cos(t(n,n))+J22;  %diagonal elements of J2
  87.      A(lm,nn)= J33;        %diagonal elements of J3
  88.      A(lm,lm) =-2*Vm(n)*Ym(n,n)*sin(t(n,n))-J44;  %diagonal of elements of J4
  89.      DC(lm) = Q(n)-Qk;
  90.    end
  91. end
  92. DX=ADC';
  93. for n=1:nbus
  94.   nn=n-nss(n);
  95.   lm=nbus+n-ngs(n)-nss(n)-ns;
  96.     if kb(n) ~= 1
  97.     delta(n) = delta(n)+DX(nn); end
  98.     if kb(n) == 0
  99.     Vm(n)=Vm(n)+DX(lm); end
  100.  end
  101.   maxerror=max(abs(DC));
  102.      if iter == maxiter & maxerror > accuracy 
  103.    fprintf('nWARNING: Iterative solution did not converged after ')
  104.    fprintf('%g', iter), fprintf(' iterations.nn')
  105.    fprintf('Press Enter to terminate the iterations and print the results n')
  106.    converge = 0; pause, else, end
  107.    
  108. end
  109. if converge ~= 1
  110.    tech= ('                      ITERATIVE SOLUTION DID NOT CONVERGE'); else, 
  111.    tech=('                   Power Flow Solution by Newton-Raphson Method');
  112. end   
  113. V = Vm.*cos(delta)+j*Vm.*sin(delta);
  114. deltad=180/pi*delta;
  115. i=sqrt(-1);
  116. k=0;
  117. for n = 1:nbus
  118.      if kb(n) == 1
  119.      k=k+1;
  120.      S(n)= P(n)+j*Q(n);
  121.      Pg(n) = P(n)*basemva + Pd(n);
  122.      Qg(n) = Q(n)*basemva + Qd(n) - Qsh(n);
  123.      Pgg(k)=Pg(n);
  124.      Qgg(k)=Qg(n);     %june 97
  125.      elseif  kb(n) ==2
  126.      k=k+1;
  127.      S(n)=P(n)+j*Q(n);
  128.      Qg(n) = Q(n)*basemva + Qd(n) - Qsh(n);
  129.      Pgg(k)=Pg(n);
  130.      Qgg(k)=Qg(n);  % June 1997
  131.   end
  132. yload(n) = (Pd(n)- j*Qd(n)+j*Qsh(n))/(basemva*Vm(n)^2);
  133. end
  134. busdata(:,3)=Vm'; busdata(:,4)=deltad';
  135. Pgt = sum(Pg);  Qgt = sum(Qg); Pdt = sum(Pd); Qdt = sum(Qd); Qsht = sum(Qsh);
  136. %clear A DC DX  J11 J22 J33 J44 Qk delta lk ll lm
  137. %clear A DC DX  J11 J22 J33  Qk delta lk ll lm