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