function dc = IC( V, I, Adc, dcinit)
%#codegen
%Algoritmo IncrementalConductance mi referencia es la dI/dV
% Isc=input ('Corriente de corto circuito=');
% Voc=input('Voltaje de circuito abierto=');
% Adc=3e-4; %variacion de ciclo de trabajo
persistent dcold Vold Iold
dataType = 'double';
if isempty(Vold)
Vold=0;
Iold=0;
dcold=dcinit;
end
%calculo de errores
dV=V-Vold;
dI=I-Iold;
%
if dV==0
if dI==0
dc =dcold;
return
else
if dI>0
dc = dcold - Adc; %reduce V
else
dc = dcold + Adc; %incrementa V
end
end
else
if I+(dI/dV)==0
dc=dcold;
return
else
if I+(dI/dV)>0
dc = dcold + Adc; %incrementa V
else
dc = dcold - Adc; %reduce V
end
end
end
dcmax=0.95; %esto es para limitar los máximos y minimos del dc
dcmin=0.05;
if dc>=dcmax || dc<=dcmin
dc=dcold;
end
dcold=dc;
Vold=V;
Iold=I;