Seguimiento de punto de poder máximo basado en Pso

0

Estoy en problemas con MATLAB FUNCTION al obtener V e I de la entrada del bloque y lo uso en FOR LOOP y en la salida D para el convertidor boost. Escribo un MPPT basado en PSO para una matriz pv en el bloque MATLAB FUNCTION y sus entradas son voltaje y corriente de la matriz pv, y la salida del bloque es D que alimenta la puerta MOS. Creo que el bloque no lee V y yo como entradas. Y el algoritmo se detiene al inicio. Gracias. Este es el código:

00000000
function D = PSO(V, I)
%% Parameters of PSO
Ni=50;                                                                                            
Np=5;                                                                                             
w=0.9;                                                                                            
c1=2;                                                                                             
c2=2;                                                                                             
D_min=0.01;
D_Max=0.99;
%% Initialization
D=zeros;
empty_Duty.Position = zeros;                                                                              
empty_Duty.Velocity = zeros;                                                                              
empty_Duty.Power = zeros;                                                                                 
empty_Duty.Best.Position = zeros;                                                                         
empty_Duty.Best.Power = zeros;                                                                              
Duty = repmat(empty_Duty , Np, 1);                                                                                                                                                  
GlobalBest.Power=0;
GlobalBest.Position=0;
for i=1:Np
    i
   Duty(i).Position = unifrnd(D_min,D_Max,1);
   Duty(i).Velocity = zeros;
   Duty(i).Power = V(i)*I(i);
   Duty(i).Best.Position = Duty(i).Position;
   Duty(i).Best.Power = Duty(i).Power;
end
BestPowers = zeros(Ni,1);
%% Main loop of PSO
for j=1:Ni
    j
    for i=1:Np
        i

        Duty(i).Velocity = w*Duty(i).Velocity...
                              +c1*rand*(Duty(i).Best.Position - Duty(i).Position)....
                              +c2*rand*(GlobalBest.Position - Duty(i).Position);

        Duty(i).Position = Duty(i).Position + Duty(i).Velocity;

        Duty(i).Power = V(i)*I(i);

        if Duty(i).Power > Duty(i).Best.Power

            Duty(i).Best.Position = Duty(i).Position;
            Duty(i).Best.Power = Duty(i).Power;

            if Duty(i).Best.Power > GlobalBest.Power; 

                GlobalBest.Position = Duty(i).Position;
                GlobalBest.Power=Duty(i).Best.Power;
           end
       end
       D(i)=Duty(i).Position;
    end

end
    
pregunta Electronic_Power

0 respuestas

Lea otras preguntas en las etiquetas