Matlab - GUIDE Matlab

   
Vista:

GUIDE Matlab

Publicado por Nicko (1 intervención) el 20/01/2015 06:11:07
Buenas noches prof. Jeremias

Queria saber como puedo utilizar el ode45 para desarrollar un sistema de ecuaciones diferenciales mediante el GUIDE MATLAB.

Se utilizar el ode45, tengo mi codigo de runge kutta pero no se como puedo implementarlo en un GUIDE pues no me reconoce dbidamente los valores pues me arroja valores muy grandes.

Muchas Gracias.


Codigo

***********************************************

Ss = handles.edit3; % SUCEPTIBLES
Ys = handles.edit4; % INFECTADOS
Rs = handles.edit5; % RECUPERADOS

bs = handles.edit1; % TASA DE CONTAGIO
rs = handles.edit2; % TASA DE RECUPERACION
T = handles.edit6; % TIEMPO LIMITE

x0=0
n=50;
h=(T-x0)/n;

% SISTEMA DE E.D.O.

ys1='-bs*Ss*Ys';
ys2='bs*Ss*Ys-rs*Ys';
ys3='rs*Ys';

F1=inline(ys1,'x','Ss','Ys','Rs','bs','rs');
F2=inline(ys2,'x','Ss','Ys','Rs','bs','rs');
F3=inline(ys3,'x','Ss','Ys','Rs','bs','rs');

x(1)=x0;
w1(1)=Ss;
w2(1)=Ys;
w3(1)=Rs;

for i=1:n

k11=h*F1(x(i),w1(i),w2(i),w3(i),bs,rs);
k12=h*F1(x(i)+h/2,w1(i)+k11/2,w2(i)+k11/2,w3(i)+k11/2,bs,rs);
k13=h*F1(x(i)+h/2,w1(i)+k12/2,w2(i)+k12/2,w3(i)+k12/2,bs,rs);
k14=h*F1(x(i)+h,w1(i)+k13,w2(i)+k13,w3(i)+k13,bs,rs);

k21=h*F2(x(i),w1(i),w2(i),w3(i),bs,rs);
k22=h*F2(x(i)+h/2,w1(i)+k21/2,w2(i)+k21/2,w3(i)+k21/2,bs,rs);
k23=h*F2(x(i)+h/2,w1(i)+k22/2,w2(i)+k22/2,w3(i)+k22/2,bs,rs);
k24=h*F2(x(i)+h,w1(i)+k23,w2(i)+k23,w3(i)+k23,bs,rs);

k31=h*F3(x(i),w1(i),w2(i),w3(i),bs,rs);
k32=h*F3(x(i)+h/2,w1(i)+k31/2,w2(i)+k31/2,w3(i)+k31/2,bs,rs);
k33=h*F3(x(i)+h/2,w1(i)+k32/2,w2(i)+k32/2,w3(i)+k32/2,bs,rs);
k34=h*F3(x(i)+h,w1(i)+k33,w2(i)+k33,w3(i)+k33,bs,rs);

w1(i+1)=w1(i)+(k11+2*k12+2*k13+k14)/6;
w2(i+1)=w2(i)+(k21+2*k22+2*k23+k24)/6;
w3(i+1)=w3(i)+(k31+2*k32+2*k33+k34)/6;

x(i+1)=x0+i*h;

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 Jorge De Los Santos

GUIDE Matlab

Publicado por Jorge De Los Santos (212 intervenciones) el 22/01/2015 17:49:05
Hola Nicko.

El error está en la manera en que obtienes los datos de entrada.

1
2
3
4
5
6
7
Ss = handles.edit3; % SUCEPTIBLES
Ys = handles.edit4; % INFECTADOS
Rs = handles.edit5; % RECUPERADOS
 
bs = handles.edit1; % TASA DE CONTAGIO
rs = handles.edit2; % TASA DE RECUPERACION
T = handles.edit6; % TIEMPO LIMITE


Lo que haces con lo anterior es guardar solamente la "referencia" a los objetos gráficos. Para obtener el valor que introduces debes hacer lo siguiente:


1
2
3
4
Ss = str2double(get(handles.edit3,'String')); % SUCEPTIBLES
.
.
.


Debes hacer lo mismo con todos los datos de entrada.



Saludos.

Jorge De Los Santos
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