what is mistake in my matlab code
    4 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Quynh tran
 el 2 de Abr. de 2016
  
    
    
    
    
    Comentada: Rena Berman
    
 el 20 de En. de 2017
                Ybusn(linedata)=
 Columns 1 through 5
    14.7752 - 6.4985i   0.0000 + 0.0000i   0.0000 + 0.0000i -14.7752 + 6.4985i   0.0000 + 0.0000i
     0.0000 + 0.0000i  14.7752 - 6.4985i   0.0000 + 0.0000i   0.0000 + 0.0000i -14.7752 + 6.4985i
     0.0000 + 0.0000i   0.0000 + 0.0000i  14.7752 - 6.4985i   0.0000 + 0.0000i   0.0000 + 0.0000i
   -14.7752 + 6.4985i   0.0000 + 0.0000i   0.0000 + 0.0000i  26.1902 - 9.6810i -11.4150 + 3.1825i
     0.0000 + 0.0000i -14.7752 + 6.4985i   0.0000 + 0.0000i -11.4150 + 3.1825i  37.6052 -12.8635i
     0.0000 + 0.0000i   0.0000 + 0.0000i -14.7752 + 6.4985i   0.0000 + 0.0000i -11.4150 + 3.1825i
    Column 6
     0.0000 + 0.0000i
     0.0000 + 0.0000i
   -14.7752 + 6.4985i
     0.0000 + 0.0000i
   -11.4150 + 3.1825i
    26.1902 - 9.6810i
phi =
   0.9840 - 0.0134i   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.9808 - 0.0125i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i   0.9795 - 0.0122i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i  -0.0000 - 0.0000i
C =
   1.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   1.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i   1.0000 + 0.0000i   0.0000 + 0.0000i
  -0.4669 + 0.0010i  -0.4669 + 0.0010i  -0.4669 + 0.0010i  -0.4669 + 0.0010i
  -0.2139 - 0.0103i  -0.2139 - 0.0103i  -0.2139 - 0.0103i  -0.2139 - 0.0103i
  -0.3193 + 0.0093i  -0.3193 + 0.0093i  -0.3193 + 0.0093i  -0.3193 + 0.0093i
Zbus=1/Ybus;
  PG1=0.0923;
  PG2=0.1368; %sau nay chinh lai de chon nut dieu chinh cong suat phat
  PG3=0.0792;
  Pgg=[PG1,PG2,PG3,1];
  %tinh dong dien nhanh
  e=ybusn(linedata);
  linebranch=zeros(nbr,3);
  Ig=phi*Pgg';
  Ibus=C*Ig;
  V=Zbus*Ibus;
  for k=1:nbr
      if nl(k)>0 && nr(k)>0
         Ibranch(k)=abs(-(V(nl(k))-V(nr(k)))*e(nl(k),nr(k)));
      end
  end
  Ibranch;
  linebranch(:,1)=linedata(:,1);
  linebranch(:,2)=linedata(:,2);
  linebranch(:,3)=Ibranch';
  disp([ '      nl        nr      |I|' ]);
  disp([linebranch]);
  %Kiem tra dong nhanh
  nbr=length(linedata(:,1));
  Imax=linedata(:,7);
  flag=0;
  niter=0;
  n=0
  while (flag==0&&niter<90)
      for n=1:nbr 
          if linebranch(n)>Imax(n)
              niter=niter+1;
              PG2=PG2-0.001;
              Pgg=[PG1,PG2,PG3,1];
              Ig=phi*Pgg';
              Ibus=C*Ig;
              V=Zbus*Ibus;
              for k=1:nbr
                  if nl(k)>0 && nr(k)>0
                      Ibranch(k)=abs(-(V(nl(k))-V(nr(k)))*e(nl(k),nr(k)));
                  end
              end            
          else
              flag=1;
          end
      end
  end
  Ibranch
I changed my new code. It work ok but the loop is not stop when Ibracnh<Imax.Please post your answer in a new answer let me know you online and answer you soon, don't post in comment.
4 comentarios
Respuesta aceptada
  Kuifeng
      
 el 2 de Abr. de 2016
        
      Editada: Walter Roberson
      
      
 el 2 de Abr. de 2016
  
      i think maybe your loop never finishes.... endlesss loop in the 'Ibranch'
k = 1;
while k<=nbr % k run in the number of branch
    while Ibranch(k)>Imax(k) %to check Ibranh in each of branch
            PG2=PG2-0.001;
            Pgg=[0.0923,PG2,0.0792,1];
            V=Zbus*(C*(phi*Pgg'));
            k=k+1;
            % caculate again the Ibranch in branch;   
    end
end
Más respuestas (2)
  Walter Roberson
      
      
 el 2 de Abr. de 2016
        Your code has
while Ibranch(k)>Imax(k) %to check Ibranh in each of branch
but inside the "while" you do not appear to change Ibranch or Imax or k. If the condition becomes true once, then it appears that you are going to get an infinite loop.
However, you do have the line of code
caculate again the Ibranch in branch;
which, due to MATLAB's command / function equivalence, would be the same as calling
calculate('again', 'the', 'Ibranch', 'in', 'branch')
and we have no information about any function named "calculate" or how that function is going to modify Ibranch or Imax . It could happen. It just looks unlikely.
5 comentarios
  Walter Roberson
      
      
 el 2 de Abr. de 2016
				Your current posted code has an outer loop of "for k=1:nbr " and also has that as an inner loop. If you need an inner loop then you must use a different variable name for the index.
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




