
Necesito ayuda con la programación de mi código matlab
Publicado por Alfonso (1 intervención) el 26/06/2013 21:38:04
Hola.
Explico la jugada.
Quiero hacer un barrido de I (para ello utilizo un bucle for) y en función de su valor que haga una cosa u otra (para ello utilizo los if). El bucle de t dentro de cada if lo pongo para ordenar en el tiempo cada situacion.
clear all
close all
C10 = 800; %Capacidad de carga en un regimen de corriente de 10hrs.
CT = 1.67*C10; %Capacidad limite de la bateria.
I10 = 80;
T=25;
I_delta=0.5;
% I=abs(60);
V=[];
indx=1; %indice donde se almacena el valor calculado en el vector V
for I=60:-1:-60
if (I > I_delta)
for t=0:1:14.6
%I=60;
Q= I*t;
C = CT/(1+0.67*((I/I10)^0.9));
tao = 17.3/(1+852*((I/C10)^1.67));
SOC=Q/C;
LOE=Q/C10;
Ac= 6/(1+I^0.6);
Bc=0.48/(1-(SOC^1.2));
Vg = (2.24+(1.97*log(1+(I/C10)))*(1-(0.002*T)));
Vec = (2.45+2.011*log(1+(I/C10))*(1-(0.002*T)));
Vc=(2+0.16*(SOC))+(I/C10)*(Ac+Bc+0.036)*(1-(0.025*T));
Vsc=Vg+(Vec-Vg)*(1-exp((LOE*C10-SOC*C)/(I*tao)));
V(indx)=Vc;
if (Vc > Vg)
V(indx)=Vsc;
else
V(indx)=Vc;
end
end
indx=indx+1;
end
if (I < 0)
for t=16.6:1:20
%I=-60;
Q= abs(I)*t;
C = CT/(1+0.67*((abs(I)/I10)^0.9));
SOC=Q/C;
LOE=Q/C10;
tao = 17.3/(1+852*((abs(I)/C10)^1.67));
Ad=4/(1+abs(I)^1.3);
Bd=0.27/(1-(SOC^1.5));
Vd = (2.085-0.12*(1-SOC))-(abs(I)/C10)*(Ad+Bd+0.02)*(1-(0.007*T));
V(indx)=Vd;
indx=indx+1;
end
end
if (I >= 0)&&(I < I_delta)
for t=14.6:1:16.6
Ac= 6/(1+I_delta^0.6);
Bc=0.48/(1-(SOC^1.2))
Ad=4/(1+abs(I_delta)^1.3);
Bd=0.27/(1-(SOC^1.5));
Vc_delta=(2+0.16*(SOC))+(I_delta/C10)*(Ac+Bc+0.036)*(1-(0.025*T));
Vd_delta = (2.085-0.12*(1-SOC))-(abs(I_delta)/C10)*(Ad+Bd+0.02)*(1-(0.007*T));
Vcdc=(((Vc_delta-Vd_delta)/(2*I_delta)*I)+(((Vc_delta+Vd_delta)/2)));
V(indx)=Vcdc;
indx=indx+1;
end
end
end
salida=V;
plot(salida);
axis([0 220 0 10]);
El problema que tengo es que no obtengo los resultados esperados, entre otras cosas porque los bucles no toman el valor inicial.
Espero que alguien me pueda echar una mano.
Saludos
Aqui os dejo el codigo que he
clear all
Explico la jugada.
Quiero hacer un barrido de I (para ello utilizo un bucle for) y en función de su valor que haga una cosa u otra (para ello utilizo los if). El bucle de t dentro de cada if lo pongo para ordenar en el tiempo cada situacion.
clear all
close all
C10 = 800; %Capacidad de carga en un regimen de corriente de 10hrs.
CT = 1.67*C10; %Capacidad limite de la bateria.
I10 = 80;
T=25;
I_delta=0.5;
% I=abs(60);
V=[];
indx=1; %indice donde se almacena el valor calculado en el vector V
for I=60:-1:-60
if (I > I_delta)
for t=0:1:14.6
%I=60;
Q= I*t;
C = CT/(1+0.67*((I/I10)^0.9));
tao = 17.3/(1+852*((I/C10)^1.67));
SOC=Q/C;
LOE=Q/C10;
Ac= 6/(1+I^0.6);
Bc=0.48/(1-(SOC^1.2));
Vg = (2.24+(1.97*log(1+(I/C10)))*(1-(0.002*T)));
Vec = (2.45+2.011*log(1+(I/C10))*(1-(0.002*T)));
Vc=(2+0.16*(SOC))+(I/C10)*(Ac+Bc+0.036)*(1-(0.025*T));
Vsc=Vg+(Vec-Vg)*(1-exp((LOE*C10-SOC*C)/(I*tao)));
V(indx)=Vc;
if (Vc > Vg)
V(indx)=Vsc;
else
V(indx)=Vc;
end
end
indx=indx+1;
end
if (I < 0)
for t=16.6:1:20
%I=-60;
Q= abs(I)*t;
C = CT/(1+0.67*((abs(I)/I10)^0.9));
SOC=Q/C;
LOE=Q/C10;
tao = 17.3/(1+852*((abs(I)/C10)^1.67));
Ad=4/(1+abs(I)^1.3);
Bd=0.27/(1-(SOC^1.5));
Vd = (2.085-0.12*(1-SOC))-(abs(I)/C10)*(Ad+Bd+0.02)*(1-(0.007*T));
V(indx)=Vd;
indx=indx+1;
end
end
if (I >= 0)&&(I < I_delta)
for t=14.6:1:16.6
Ac= 6/(1+I_delta^0.6);
Bc=0.48/(1-(SOC^1.2))
Ad=4/(1+abs(I_delta)^1.3);
Bd=0.27/(1-(SOC^1.5));
Vc_delta=(2+0.16*(SOC))+(I_delta/C10)*(Ac+Bc+0.036)*(1-(0.025*T));
Vd_delta = (2.085-0.12*(1-SOC))-(abs(I_delta)/C10)*(Ad+Bd+0.02)*(1-(0.007*T));
Vcdc=(((Vc_delta-Vd_delta)/(2*I_delta)*I)+(((Vc_delta+Vd_delta)/2)));
V(indx)=Vcdc;
indx=indx+1;
end
end
end
salida=V;
plot(salida);
axis([0 220 0 10]);
El problema que tengo es que no obtengo los resultados esperados, entre otras cosas porque los bucles no toman el valor inicial.
Espero que alguien me pueda echar una mano.
Saludos
Aqui os dejo el codigo que he
clear all
Valora esta pregunta


0