Matlab - Ecuación diferencial con matlab

   
Vista:

Ecuación diferencial con matlab

Publicado por Javi (5 intervenciones) el 22/07/2011 09:18:26
si me pueden ayudar, necesito resolver urgentemente un problema de matlab. Tengo la siguiente ecuación diferencial dy/dt=((-m/0.6)*(y/(23500+y))*X)+((1/10)*(47806-y));
m=0,15*1,072^(T-20)
Tengo datos experimentales de T, X en función del tiempo en un excel y he creado los siguientes ficheros.m:

sustrato.m
clear all
%toma de datos experimentales
Data1=xlsread('programa','Datos');
[M,N]=size(Data1);
%Comienzo programa
texp(:,1)=Data1(:,1);
j=find(~isnan(texp(:,1)));
tspan=texp(j,1);
T(:,2)=Data1(:,2);
X(:,3)=Data1(:,3);
m(:,4)=Data1(:,4);
[t,y]=ode45(@funcion,tspan,20000);

funcion.m
function dy=funcion(t,y)
dy=((-m/0.6)*(y/(23500+y))*X)+((1/10)*(47806-y));

Pero al ejecutarlo en matlab simpre me da el siguiente error:
??? Undefined function or variable 'm'.
Error in ==> funcion at 2
dy=((-m/0.6)*(y/(23500+y))*X)+((1/10)*(47806-y));
Error in ==> odearguments at 110
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
Error in ==> sustrato at 12
[t,y]=ode45(@funcion,tspan,20000);

Siento molestarle pero necesito urgentemente resolver el problema, para mi sería de gran ayuda si le puede echar un vistazo y decirme donde cometo el error al definir las variables.

Muchas gracias

Un saludo
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

Ecuación diferencial con matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 22/07/2011 16:03:03
hola Javi.
1). No se puede resolver sin ver tu datos de excel.
Si deseas enviame tus datos de excel a mi correo.

saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
jjcc94@hotmail.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

Ecuación diferencial con matlab

Publicado por Javi (5 intervenciones) el 22/07/2011 16:35:25
Ok, le envío un correo con el archivo excel adjunto.

Gracias
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

Ecuación diferencial con matlab

Publicado por Javi (5 intervenciones) el 23/07/2011 14:19:14
He intentado cambiar los código pero me sigue apareciendo errores en la definición de las variables, podrías escribirme como sería, al menos una orientación a partir de la cual pueda continuar yo, porque por mas que leo en las ode45 no encuentro ningun caso parecido al mío.

Gracias
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

Ecuación diferencial con matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 23/07/2011 21:18:15
hola Javier.
Una ecuacion diferencial con condiciones iniciales es de laforma siguiente:

dy/dt=f(t,y) a<=t<b
y(a)=alfa

en ode seria de la forma:

[T,Y]=ode45('f(t,y)', [a b], alfa)

entonces la pregunta que te hago a ti es:

1). a: que valor toma en tu problema
2) . b: Que valor toma en tu problema.

3). Para ser te sincero, el problema es tu fundamentento teorico de PVI (problemas de valor inicial). Revisa tu teoria y trata de aclara tus ideas.

4). Luego podras utilizar con claridada de datos de excel.



saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
jjcc94@hotmail.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

Ecuación diferencial con matlab

Publicado por Javier (5 intervenciones) el 24/07/2011 20:16:25
Hola Jose,

En realidad el problema no sebería ser complicado, tengo la siguiente ecuación:
dy/dt=((-m/0.6)*(y/(23500+y))*X)+((1/10)*(47806-y))

donde "m" y "X" tienen unos determinados valores para diferentes tiempos,
Sí t=45 --> m=6607 --> X=0,17
Sí t=47--> m=6407 --> X=0,19
Sí t=49--> m=6483 --> X=0,19
.
.
.
Sí t=84--> m=6367--> X=0,19

asi que lo que necesito es que el matlab me obtenga los valores de "y" correspondientes a cada tiempo mediante una ode45, asi que teóricamente habría que crear el siguiente programa en matlab:
function dy=funcion(t,y) 45<=t<84
y(45)=20000;
t=xlsread('programa','Datos','A1:A18');
m=xlsread('programa','Datos','D1:D18');
X=xlsread('programa','Datos','C1:C18');
dy=((-m/0.6)*(y/(23500+y))*X)+((1/10)*(47806-y));
[t,y]=ode45('funcion',[45,84],20000);

Pero ahora me da el siguiente error y ya no se que mas hacer:

Error using ==> mtimes
Inner matrix dimensions must agree.

Error in ==> funcion at 12
dy=((-m/0.6)*(y/(23500+y))*X)+((1/10)*(47806-y));

Gracias por todo
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

Ecuación diferencial con matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 24/07/2011 20:28:10
Hola Javier.
Una sugerencia.
Aplica metodo de runge kutta de 4to orden para resolver tu problema.
Ya que por el metodo ode45 tienes dificultades. Lo que estoy viendo son tus conocimientos de matlab, por lo tanto estudia mas de matlab.

Ademas estudia archivos tipo funciton de matlab. Alli veo que tambien que tienes problemas.


saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
jjcc94@hotmail.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
Imágen de perfil de JOSE JEREMIAS CABALLERO

Ecuación diferencial con matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 26/07/2011 17:43:29
hola Javier.
Te llego a salir el programa que estabas haciendo.
Yo lo he resuelto con metodo de runge de 4to orden,


saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
jjcc94@hotmail.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

Ecuación diferencial con matlab

Publicado por Javier (5 intervenciones) el 27/07/2011 10:17:45
Hola, he conseguido que el programa no me de error definiendo cada variable en cada tiempo de la siguiente forma:

function dy=mifun(t,y)
t=xlsread('programa','Datos','A1:A8');
if t==45;
m(45)=0.17;
X(45)=6607;
elseif t==47;
m(47)=0.19;
X(47)=6407;
elseif t==49;
m(49)=0.19;
X(49)=6483;
elseif t==52;
m(52)=0.18;
X(52)=6337;
elseif t==54;
m(54)=0.19;
X(54)=5950;
elseif t==56;
m(56)=0.18;
X(56)=6233;
elseif t==59;
m(59)=0.19;
X(59)=6363;
elseif t==61;
m(61)=0.19;
X(61)=6300;
y(45)=20000;
dy=((-m/0.6)*(y/(23500+y))*X)+((1/10)*(47806-y));
[t,y]=ode45(@mifun,[45,61],20000);
end

Pero aún no estoy seguro que el método sea el mas adecuado, si puedes envíame como lo has hecho para comparar resultados.

Un saludo

Javier
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

Ecuación diferencial con matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 31/07/2011 17:09:28
hola Javier.
Al parecer estas aplicando el ode45 en cada subintervalo.
pero recuerda solo tienes valor inicial solo en el punto t=45. que es 2000, pero en punto t=47 no tienes valor inicial, como podrias aplicar ode45.
Seria muy intersante que lo resolvieras manualmente tu problema.Recuerda q las computadoras son para ganar tiempo.

Ademas tu problema la forma como estas programando solo sirve solo especificamente para ese archivos de datos de excel. Que pasaria si cambio mi archivo de datos de excel, mas aun si mi data es mas de 1000 filas de datos.

Una sugerencia.
Aplica metodo de runge kutta de 4to orden para resolver tu problema.
Ya que por el metodo ode45 tienes dificultades.

saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
jjcc94@hotmail.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