Matlab - guardar datos al usar ciclo for usando comando ode45

   
Vista:

guardar datos al usar ciclo for usando comando ode45

Publicado por carlos (1 intervención) el 31/10/2015 07:13:21
hola, estoy haciendo un pequeño programa para hacer una comparacion de datos. tengo un problema para guardar los resultados luego de usar el ciclo "for" sobre el comando "ode45", como puedo guardar dichos datos de forma tal que al pasar cada ciclo estos tengan el nombre de alguna variable o poder agruparlos todos en una matriz mas grande. de la forma que lo hago solo puedo guardar el ultimo resultado. por favor ayuda, de ante mano muchas gracias.


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
clc
clear all
clc
Po=4;%[=]atm
To=50;%[=]°c
vo=0.2;%[=]dm^3/seg
S=0.2;%[=]dm^2
k1=1.8;%[=]1/seg
k2=4.5;%[=]dm^6/(seg*mol^2)
R=0.082;%[=](atm*l)/(mol*K)
ct0=Po/(R*(To+273.15));%[=] mol/dm^3
Zf=input('largo final reactor[dm]:');
%sean Fa=F(1); Fb=F(2); Fc=F(3) y Fi=F(4)
%ecuaciones diferenciales:
%(dFa/dZ)=S*(-k1*ct0*(F(1)/(F(1)+F(2)+F(3)+F(4)))+k2*F(2)*(F(3)^2)*(ct0/(F(1)+F(2)+F(3)+F(4)))^3)
%(dFb/dZ)=S*(k1*ct0*(F(1)/(F(1)+F(2)+F(3)+F(4)))-k2*F(2)*(F(3)^2)*(ct0/(F(1)+F(2)+F(3)+F(4)))^3)
%(dFc/dZ)=2*S*(k1*ct0*(F(1)/(F(1)+F(2)+F(3)+F(4)))-k2*F(2)*(F(3)^2)*(ct0/(F(1)+F(2)+F(3)+F(4)))^3)
%(dFi/dZ)=0
paso=.5;
yAvector=[0:.1:1];
for i=1:1:11
    yA=yAvector(i);
    H=@(Z,F) [ec.dif.1;ec.dif.2;ec.dif.3,ec.dif.4];
    [Z,F]=ode45(H,[0:paso:Zf],[yA*ct0;0;0;(1-yA)*ct0])
end
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 Royeth

guardar datos al usar ciclo for usando comando ode45

Publicado por Royeth jesus.royeth@gmail.com (742 intervenciones) el 31/10/2015 16:23:08
prueba haciendo :

1
2
3
4
5
for i=1:1:11
    yA=yAvector(i);
    H=@(Z,F) [ec.dif.1;ec.dif.2;ec.dif.3,ec.dif.4];
    [Z{i},F{i}]=ode45(H,[0:paso:Zf],[yA*ct0;0;0;(1-yA)*ct0])
end


te quedan guardadas en z que es de tipo cell y para visualizar cada una puedes hacer :


Z{n}

donde n es el número que deseas


saludos
https://www.facebook.com/royethmatlab/
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
Imágen de perfil de JOSE JEREMIAS CABALLERO

guardar datos al usar ciclo for usando comando ode45

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 01/11/2015 01:37:40
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
function ode45_foro2
close all
global Po To R ct0
Zf=input('largo final reactor[dm]:');
 Po=4;%[=]atm
 To=50;%[=]°c
 R=0.082;%[=](atm*l)/(mol*K)
 ct0=Po/(R*(To+273.15));%[=] mol/dm^3
paso=.5;
yAvector=0:.1:1;
hold on
for i=1:11
    yA=yAvector(i);
    [Z,F]=ode45(@caballero,0:paso:Zf,[yA*ct0;0;0;(1-yA)*ct0]);
    for j=1:size(F,2)
    plot(Z,F(:,j),'color', rand(1,3))
    end
end
hold off
 
function dF=caballero(~,F)
global Po To   ct0 R
S=0.2;%[=]dm^2
k1=1.8;%[=]1/seg
k2=4.5;%[=]dm^6/(seg*mol^2)
ct0=Po/(R*(To+273.15));%[=] mol/dm^3
dF=zeros(4,1);
dF(1)=S*(-k1*ct0*(F(1)/(F(1)+F(2)+F(3)+F(4)))+k2*F(2)*(F(3)^2)*(ct0/(F(1)+F(2)+F(3)+F(4)))^3);
dF(2)=S*(k1*ct0*(F(1)/(F(1)+F(2)+F(3)+F(4)))-k2*F(2)*(F(3)^2)*(ct0/(F(1)+F(2)+F(3)+F(4)))^3);
dF(3)=2*S*(k1*ct0*(F(1)/(F(1)+F(2)+F(3)+F(4)))-k2*F(2)*(F(3)^2)*(ct0/(F(1)+F(2)+F(3)+F(4)))^3);
dF(4)=0;

1
2
>> ode45_foro2
largo final reactor[dm]:5



Saludos
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
Servicios de programación matlab
jjcc94@hotmail.com
Estimado Usuario, el correo es para servicios de cursos, asesoría y programación. Toda ayuda gratuita es vía foro



http://matlabcaballero.blogspot.com
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