Matlab - Variables Globales

 
Vista:
sin imagen de perfil
Val: 21
Ha aumentado su posición en 8 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Variables Globales

Publicado por Dionisio (12 intervenciones) el 06/05/2019 02:33:51
Necesito ayuda con el uso de las variables globales. Lo que ocurre es que quiero cambiar el valor de una variable (la variable es D), que se encuentra de una funcion (la funcion se llama Modeleth) para cambiar el valor original de D con estos nuevos datos: .04 .08 .12 .16 .3.
El objetivo es graficar utilizando hold on para observar y comparar el comportamiento de la grafica.


FUNCION:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function dydt = Modeleth(t,y)               %AQUI SE NOMBRA LA FUNCION
So=30;                                      %CONSTATNE: sustrato de alimentacion
D=0;                                        %CONSTATNE: tasa de dilucion
umax=0.2717;                                %CONSTATNE: velocidad maxima
ks=9.8414;                                  %CONSTATNE: saturacion de sustrato
ki=0.0058;                                  %CONSTATNE: inhibicion por sustrato
kp=0.1054;                                  %CONSTATNE: inhibicion por producto
Yxs=14.08;                                  %CONSTATNE: factor de rendimiento biomasa apartir sustrato
Yps=2.63;                                   %CONSTATNE: factor de rendimiento producto a partir sustrato            
ms=-.0126;                                  %CONSTATNE: coeficiente de mantenimiento celular
alpha=6.16;                                 %CONSTATNE: termino asociado al rendimiento
X=y(1); S=y(2); P=y(3);                     %LA BIOMASA PRIMERA EC. EL SUSTRATO SEGUNDA EC. EL PRODUCT TERCERA EC.
u = (umax*S/(ks+S+((S^2)*ki)))*(1-(P*kp));  %FUNCION DEL MODELO
dXdt = (u-D)*X;                             %ECUACION DIFERENCIAL
dSdt = ((-Yxs-Yps)*u*X)+(-ms*X)+((So-S)*D); %ECUACION DIFERENCIAL
dPdt=(alpha*u*X)-(D*P);                     %ECUACION DIFERENCIAL
dydt = [dXdt dSdt dPdt]';                   %ECUACIONES EN MATRIZ


ASI TRATO DE CORRER EL SCRIPT;
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
[t,x]= ode23('Modeleth',[0,100],[0.9 30 2.5]); %BIOMASA SUSTRATO PRODUCTO
subplot(3,2,1), plot(t,x(:,1));                %:1 DICE QUE SE QUIEREN TODOS LOS RENGLONES PERO SOLO LA COLUMNA 1
hold on
 
global D
D=.04;
[t,x]= ode23('Modeleth',[0,100],[0.9 30 2.5]); %BIOMASA SUSTRATO PRODUCTO
subplot(3,2,1), plot(t,x(:,1));                %:1 DICE QUE SE QUIEREN TODOS LOS RENGLONES PERO SOLO LA COLUMNA 1
hold on
 
global D
D=.08;
[t,x]= ode23('Modeleth',[0,100],[0.9 30 2.5]);
subplot(3,2,1), plot(t,x(:,1));
hold on
 
global D
D=.12;
[t,x]= ode23('Modeleth',[0,100],[0.9 30 2.5]);
subplot(3,2,1), plot(t,x(:,1));
hold on
 
global D
D=.16;
[t,x]= ode23('Modeleth',[0,100],[0.9 30 2.5]);
subplot(3,2,1), plot(t,x(:,1));
hold on
 
global D
D=.3;
[t,x]= ode23('Modeleth',[0,100],[0.9 30 2.5]);
subplot(3,2,1), plot(t,x(:,1));


Captura
Captura2
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 David
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Variables Globales

Publicado por David (1094 intervenciones) el 06/05/2019 03:02:51
Hola Dionisio;

Respecto a tu consulta, veo que no estas definiendo la variable global D, dentro de la función Modeleth(...) y debes comentar la variable D, ya que si lo dejas con el valor D = 0, este valor será usado en todos los calculos, debe quedar como sigue.

1
2
3
4
5
6
7
8
9
function dydt = Modeleth(t,y) %AQUI SE NOMBRA LA FUNCION
global D
 
So=30; %CONSTATNE: sustrato de alimentacion
% D=0; %CONSTATNE: tasa de dilucion
umax=0.2717; %CONSTATNE: velocidad maxima
ks=9.8414; %CONSTATNE: saturacion de sustrato
...
...

Otra cosa, no necesitas volver a colocar global D, antes de colorcar un nuevo valor de D, basta con que definas "global D" al inicio del script o la función, luego puedes ir cambiando el valor de D en cualquier parte del script.

Espero ser de ayuda

​Saludos
David Correa
Director de Servicios de Programación
E-mail: [email protected]
Web page: https://www.fismatlab.com
Facebook: https://www.facebook.com/fismatlabperu
Blog: http://fismatlab.blogspot.com
Spot: https://www.youtube.com/watch?v=NTDY-MRnFMk
WhatsApp: +51 - 922210488
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

Variables Globales

Publicado por richar (3 intervenciones) el 18/05/2019 06:20:22
No entiendo bien tu programa
Pero algunos comentarios:
- Estas usando el mismo subplot para todos los graficos, para mostrar varios graficos en una misma ventana deberia ser algo asi:
subplot(3,2,1), plot(t,x(:,1));
subplot(3,2,2), plot(t,x(:,2));
subplot(3,2,3), plot(t,x(:,3));
subplot(3,2,4), plot(t,x(:,4));
subplot(3,2,5), plot(t,x(:,5));
subplot(3,2,6), plot(t,x(:,6));

- el hold on no es necesario solo se usa para superponer varias curvas en un mismo grafico (osea en los mismos ejes)

- las variables globales solo se declaran una vez al inicio del programa (para ser usados en diferentes subprogramas), con que vayas
declarando un nuevo valor para D se actualiza solo a medida que se va ejecutando el script (fila por fila).

- en la funcion al momento de crearla deberias declarar tambien dos argumentos de salida, ya que al momento de llamarla estas dando dos
argumentos, ah y quiza deberias incluir el valor de D como variable de entrada de la funcion para que pueda actualizarla en cada grafico.

Espero te sirva.
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