Matlab - Necesito ayuda con la programación de mi código matlab

   
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO

Necesito ayuda con la programación de mi código matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3440 intervenciones) el 28/06/2013 23:25:55
"No obtengo valores esperados". La pregunta que te hago es: ¿Qué valores es lo que esperar obtener?. Eso no mencionas en tu pregunta.
¿Cuáles son los valores iniciales a la cual te refieres?. Eso no mencionas en tu pregunta.
Mejora tu pregunta y trata de ser lo mas claro posible.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
clear 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);
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: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 && I< I_delta
        for t=14.6: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
 
    if I<0
        for t=16.6: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
 
 end
 plot(V);
 axis([0 220 0 10]);


1
>> juegos1




Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar