Académique Documents
Professionnel Documents
Culture Documents
on de un sistema
depredador-presa a partir del
modelo de Volterra-Lotka y de un
amortiguador
Alonso Guerrero Llorente
March 21, 2015
1
1.1
Simulaci
on del modelo de Volterra-Lotka usando Matlab
Introducci
on
(1)
dy
= y(c dx)
(2)
dt
Donde x es el n
umero de presas, y el de depredadores y las constantes a, b,
c y d son par
ametros que describen la interaccion entre ambas poblaciones o el
crecimiento/decrecimiento natural de ellas. En algunos sitios estas constantes se
denominan con las cuatro primeras letras del abecedario griego ( a = , b = ,
c = , d = ), en este texto se usan, indistintamente, ambas notaciones.
A priori tanto las constantes como las poblaciones no tienen unidades. Por
tanto cuando se asigna a una poblacion el valor 1, nos podemos estar refiriendo
tanto a decenas como a millones. Por lo que conviene que, inicialmente, todos
los valores sean del mismo orden de magnitud; para as evitar que haya terminos
despreciables frente a otros.
Este programa hace una Simulacion del modelo de Volterra-Lotka mediante
la resoluci
on de las ecuaciones del modelo, presentes en la funcion volterra ec.m,
usando el comando ode45. Se utilizan diversos valores de las poblaciones iniciales, x0, as como de los parametros de interaccion a, b, c y d.
Funci
on con las ecuaciones del modelo:
function xdot = volterra_ec(t, x, a, b, c, d)
% Ecuaciones del modelo de Volterra-Lotka para su posterior resoluci
on con
% el comando ode45.
% x(1) -> presas,, x(2) -> depredadores
% a, b, c y d son constantes de interaci
on depredador-presa
xdot(1, 1) = x(1) * ( a - b*x(2) );
xdot(2, 1) = -x(2) * ( c - d*x(1) );
1
1.2
En este caso se puede comprobar que las depredadores se comen a las presas
antes de que estas puedan reproducirse. Esto hace que la poblacion depredadores
aumenta hasta que llega un punto en el que el n
umero de presas no es suficiente
para alimentar a todos los depredadores y, por tanto, el n
umero de depredadores
comienza a descender.
Llegado a un cierto punto el n
umero de presas es muy peque
no y se mantiene
as hasta que el n
umero de depredadores es tal que permite, nuevamente, el
aumento de la poblaci
on de presas. Se podra decir que el n
umero de conejos es
tan peque
no que los coyotes no los encuentrar y esto hace que, llegado un punto,
los conejos empiecen a reproducirse mientras los coyotes siguen muriendo. Tras
el nuevo aumento de la poblacion de conejos los coyotes que quedan vuelven a
tener alimento y su poblaci
on vuelve a crecer. Este ciclo se va repitiendo en el
tiempo.
Tal y como vemos en el diagrama de fase el ciclo mencionado en el parrafo
anterior es peri
odico.
clear
% Simulaci
on con poblaci
on inicial [presas = 10; depredadores = 10],
% par
ametros de interacci
on a=b=c=d=1 y los tiempo entre 0 y 1.5.
x0 = [10; 10];
[t, x] = ode45(@(t,x) volterra_ec(t, x, 1, 1, 1, 1), [0 1.5], x0);
% Diagrama de Fase
figure
subplot(2,2,1)
plot( x0(1), x0(2), *r, x(:,1), x(:,2), b )
title(Diagrama de Fase, \alpha=\beta=\gamma=\delta=1)
xlabel(x_1), ylabel(x_2)
% Evolucion temporal
subplot(2,2,3)
plot(t, x(:,1), b, t, x(:,2), r)
title(Evoluci
on Temporal de los Estados)
xlabel(tiempo), ylabel(estado)
legend(x_1, x_2, Location, best)
% Simulaci
on con poblaci
on inicial [presas = 10; depredadores = 10],
% par
ametros de interacci
on a=b=c=d=1 y los tiempo entre 0 y 50.
[t, x] = ode45(@(t,x) volterra_ec(t, x, 1, 1, 1, 1), [0 50], x0);
% Diagrama de Fase
figure
subplot(2,2,2)
plot( x0(1), x0(2), *r, x(:,1), x(:,2), b )
title(Diagrama de Fase, \alpha=\beta=\gamma=\delta=1)
xlabel(x_1), ylabel(x_2)
% Evoluci
on temporal
subplot(2,2,4)
plot(t, x(:,1), b, t, x(:,2), r)
title(Evoluci
on Temporal de los Estados)
xlabel(tiempo), ylabel(estado)
legend(x_1, x_2, Location, best)
2
15
15
x2
x2
10
5
5
0
5
x1
10
10
x1
15
20
15
15
10
5
0
10
5
0.5
1
tiempo
1.3
estado
estado
10
1.5
x1
20
x2
40
60
tiempo
Caso 2: qu
e sucede cuando s
olo hay depredadores o
s
olo presas?
Este caso nos permite visualizar lo que sucede cuando las presas o los depredadores
se extinguen. Tambien uso distintos valores de las constantes a y c para estudiar
su influencia.
En el momento que las presas se extinguen los depredadores no tienen alimento y por tanto van desapareciendo exponencialmente. El parametro c representa la muerte natural de los depredadores cuando estos no tienen presas
para alimentarse. Por tanto, cuanto mayor es c mas rapida es la muerte de los
depredadores.
Con la extinci
on de los depredadores, el n
umero de presas crece de forma
exponencial. Dependiendo del parametro a dicho crecimiento sera mas o menos
acusado, pues este par
ametro describe la reproduccion de las presas; tomando
que estas disponen siempre de alimento. Sera una buena idea escribir un lmite
de alimento del que disponen los depredadores, de forma que cuando el alimento
escasea el par
ametro a pasara a ser negativo.
Este mencionado comportamiento exponencial en ambos casos implica que
aunque haya disminuciones drasticas de poblacion ninguna de las especies, ni
presas ni depredadores, se extingan; pues habra una asntota horizontal en
poblaci
on = 0. Esto se debe al comportamiento exponencial, el cual se puede
verificar analticamente resolviendo las ecuaciones en los casos x = 0 e y = 0.
clear
figure
x0 = [0; 1]; t_max = 5;
[t, x] = ode45(@(t,x) volterra_ec(t, x, 1, 1, 1, 1), [0 t_max], x0);
subplot(2,1,1)
plot(t, x(:,2))
hold on
[t, x] = ode45(@(t,x) volterra_ec(t, x, 1, 1, 2, 1), [0 t_max], x0);
plot(t, x(:,2), r)
hold off
1
=1
=2
0.8
0.6
0.4
0.2
0
3
4
5
tiempo
Evolucin Temporal del Nmero de Presas, ausencia de depredadores
=1
=2
6
x1 presas
4
2
0
0.2
0.4
0.6
0.8
tiempo
1.4
figure
subplot(2,1,1)
plot( x0(1), x0(2), *r, x(:,1), x(:,2), b )
title(Diagrama de Fase, \alpha=\beta=\delta=1, \gamma = 8/3)
xlabel(x_1), ylabel(x_2)
subplot(2,1,2)
plot(t, x(:,1), b, t, x(:,2), r)
title(Evoluci
on Temporal de los Estados)
xlabel(tiempo), ylabel(estado)
axis([0 t_max 0 6.5])
legend(x_1, x_2, Location, best)
Diagrama de Fase, ===1, = 8/3
4
x2
3
2
1
0
x1
Evolucin Temporal de los Estados
estado
x1
x2
4
2
0
10
15
tiempo
Ejecuci
on del modelo Simulink de las ecuaciones de Volterra-Lotka
x(aby) = dx
a*x
a
simout
dx
1
s
axbxy
b
b*x
b*x*y
x*d*y
d
dy
1
s
y
c
d*y
c*y
x*d*yc*y
2.1
Caso 1
Recreaci
on del caso 1 realizado en matlab.
clear
a = 1; b = 1; c = 1; d = 1; %Par
ametros del modelo
x0 = 10; y0 = 10; % poblaciones de presas y depredadores iniciales
t = 0:0.01:50; % tiempo de simulaci
on, se necesita un dt relativamente
% peque~
no para obtener unos resultados equivalentes a los
% obtenidos anteriormente.
sim(volterra_simulink, t );
x = simout(:, 1); % presas
y = simout(:, 2); % depredadores
figure
% Diagrama de Fases
subplot(2,1,1)
plot( x0, y0, *r, x, y, b )
title(Diagrama de Fases con Simulink, \alpha=\beta=\gamma=\delta=1)
xlabel(x)
ylabel(y)
% Variaci
on temporal
subplot(2,1,2)
plot( t, x, k, t, y, b)
title(Variaci
on temporal, con Simulink)
xlabel(tiempo t), ylabel(estado)
legend(x, y, Location, best)
15
10
5
0
10
12
x
Variacin temporal, con Simulink
14
16
18
20
x
y
estado
15
10
5
0
10
20
30
40
50
tiempo t
2.2
Caso 2
Recreaci
on del caso 3 realizado en matlab.
clear
a = 1; b = 1; c = 8/3; d = 1; % Par
ametros del modelo
x0 = 1; y0 = 1; % poblaciones de presas y depredadores iniciales
t = 0:0.01:15; % tiempo de simulaci
on
sim(volterra_simulink, t );
x = simout(:, 1); % presas
y = simout(:, 2); % depredadores
figure
% Diagrama de Fases
subplot(2,1,1)
plot( x0, y0, *r, x, y, b )
title(Diagrama de Fases con Simulink, \alpha=\beta=\delta=1 & \gamma=8/3)
xlabel(x)
ylabel(y)
% Variaci
on temporal
subplot(2,1,2)
plot( t, x, b, t, y, k)
title(Evoluci
on Temporal de los Estados con Simulink)
xlabel(tiempo t), ylabel(estado)
legend(x, y, Location, best)
3
2
1
0
4
5
x
Evolucin Temporal de los Estados con Simulink
estado
x
y
4
10
15
tiempo t
Simulaci
on de un sistema masa-muelle-amortiguador
El siguiente sistema a simular esta constituido por un muelle y un amortiguador ambos conectados a una masa m. Los parametros que caracterizan al
muelle y al amortiguador son k y c, respectivamente. En este caso las unidades
utilizadas son las del sistema internacional en todo momento. La ecuacion del
movimiento de la masa m es:
m
y (t) + cy(t)
+ ky(t) = F (t)
(3)
Esta ecuaci
on la podemos poner como dos ecuaciones diferenciales de primer
orden haciendo los cambios de variable y1 = y y y2 = y.
Obteniendo:
y1 = y y 1 = y = y2
1
y2 = y y 2 = y = [F (t) cy 1 ky1 ]
m
Funci
on con las ecuaciones del sistema:
(4)
(5)
Apartado A
Debemos examinar el sistema para una fuerza constante de 1N. En este caso
observamos que ambas variables, y1 e y2 , tienden a 2.5 y 0 respectivamente.
En los primeros segundos se observa una oscilacion de ambas variables pero
r
apidamente esa oscilaci
on reduce su amplitud, se amortigua, hasta alcanzar
una posicion de equilibrio. Si hubiesemos tomado como valores iniciales [y1 =
2.5, y2 = 0] habramos observado que ambas variables tendran un valor constante en el tiempo, estaran en equilibrio.
F = @(t) 1;
[t, y] = ode45(@(t,y) amortiguador_ec(t, y, F, m, c, k ), [0 50], y0);
figure
subplot(2,1,1)
plot( y0(1), y0(2), *r, y(:,1), y(:,2), b)
title(Diagrama de Fase)
xlabel(y1)
ylabel(y2)
subplot(2,1,2)
plot(t, y(:,1), b, t, y(:,2), k)
title(Variaci
on temporal)
xlabel(tiempo t)
legend(y1, y2, Location, best)
Diagrama de Fase
1
y2
0.5
0.5
0.5
1.5
2
y1
Variacin temporal
2.5
3.5
4
3
2
y1
y2
1
0
1
10
20
30
40
50
tiempo t
Apartado B
Debemos examinar el sistema para una fuerza sinusoidal de = 0.1. Al trabajar
con una fuerza de entrada sinusoidal esta estara variando en el tiempo y por
tanto tambien variar
a consigo la posicion y1 de la masa m. La amplitud de y1
es constante pero presenta un ligero desfase respecto a la fuerza perturbadora.
F = @(t) sin(0.1*t);
[t, y] = ode45(@(t,y) amortiguador_ec(t, y, F, m, c, k ), [0 200], y0);
9
figure
plot( t, y(:,1), b, t, F(t), k)
title(Variaci
on temporal de la posici
on con la F_{in}, con Simulink, apartado B)
xlabel(tiempo t), ylabel(se~
nales)
legend(y, F_{in})
Variacin temporal de la posicin con la Fin, con Simulink, apartado B
3
y
Fin
2
seales
50
100
tiempo t
150
200
Apartado C
Debemos examinar el sistema para una fuerza sinusoidal de = 0.4. Con este
aumento de la frecuencia de la oscilacion de la fuerza perturbadora vemos que el
desfase entre entrada y salida ha aumentado, siendo aproximadamente de pi/4.
Adem
as la se
nal y tarda un periodo en empezar a realizar todas las ocilaciones
con la misma amplitud.
F = @(t) sin(0.4*t);
[t, y] = ode45(@(t,y) amortiguador_ec(t, y, F, m, c, k ), [0 100], y0);
figure
plot( t, y(:,1), b, t, F(t), k)
title(Variaci
on temporal de la posici
on con la F_{in}, con Simulink, apartado C)
xlabel(tiempo t), ylabel(se~
nales)
legend(y, F_{in})
Variacin temporal de la posicin con la Fin, con Simulink, apartado C
5
y
Fin
4
3
2
seales
1
0
1
2
3
4
5
20
40
60
tiempo t
10
80
100
Apartado D
Debemos examinar el sistema para una fuerza sinusoidal de = 1. El desfase entre F e y ha aumentado a /2 y el tiempo que tarda la se
nal y en
estabilizarse ha aumentado siendo ahora de dos periodos.
F = @(t) sin(1*t);
[t, y] = ode45(@(t,y) amortiguador_ec(t, y, F, m, c, k ), [0 50], y0);
figure
plot( t, y(:,1), b, t, F(t), k)
title(Variaci
on temporal de la posici
on con la F_{in}, con Simulink, apartado D)
xlabel(tiempo t), ylabel(se~
nales)
legend(y, F_{in})
Variacin temporal de la posicin con la Fin, con Simulink, apartado D
1.5
y
Fin
1
seales
0.5
0.5
10
20
30
40
50
tiempo t
Apartado E
Al igual que en el modelo de Volterra-Lotka existia un cierto desfase entre el crecimiento de la poblacion de presas y depredadores en este sistema tambien observamos un desfase entre perturbacion y efecto. Cuando introducimos una se
nal
perturbadora sinusoidal comprobamos que la masa necesita un cierto tiempo
para responder al estmulo, este tiempo es tanto mayor cuanto mayor sea la
frecuencia de la perturbaci
on.
Ejecuci
on del modelo de Simulink del amortiguador
Este archivo nos permite simular el sistema fsico propuesto en clase, formado
por un muelle, un amortiguador y una masa unida a amgos, usando el modelo
Simulink en el archivo amortiguador simulink.mdl.
En el modelo simulink, para poder usar tanto se
nales de entrada constantes
como sinusoidales se ha puesto tanto una se
nal constante como una sinusoidal
y un interruptor para elegir cual se quiere usar. Dicho interruptor se utiliza con
nal es sinusoidal, si on off < 0 la se
nal es
la variable on off, si on off > 0 la se
continua. Para controlar la se
nal de entrada continua se usa la variable F dc
expresada en Newton. Para la se
nal de fuerza sinusoidal la variable F amp
establece la amplitud de la se
nal, en newton, y F frec la frecuencia en rad/s.
11
La posici
on de la masa m viene dada por la variable y1 y su derivada por la
variable y2.
% Guardo una imagen del modelo simulink
saveas(get_param(amortiguador_simulink,Handle),amortiguador_simulink.pdf);
1
s
y2 = dy1
1
s
y1
simout
k
c*y2
k*y1
c*y2 + k*y1
F c*y2 k*y1
F
Switch
F_dc
on_off
clear
% Par
ametros del modelo
m = 2.5; % kg
c = 0.6; % N*s/m
k = 0.4; % N/m
Apartado A
t_max = 50; dt = t_max/2000; t = 0:dt:t_max;
%Caracter
sticas de la fuerza aplicada
on_off = -1; % selecciono la fuente de continua
F_dc = 1; % Amplitud de la fuente de continua
F_amp = 0; % No hace falta, pues no estoy usando la fuente de alterna.
F_frec = 1;
sim(amortiguador_simulink, t );
y1 = simout(:, 2);
y2 = simout(:, 1);
figure
subplot(2,1,1)
plot( y1(1), y2(1), *r, y1, y2, b )
title(Diagrama de Fases, con Simulink, apartado A)
xlabel(y1)
ylabel(y2)
subplot(2,1,2)
plot( t, y1, b, t, y2, k)
title(Variaci
on temporal, con Simulink, apartado A)
xlabel(tiempo t)
legend(y1, y2,Location, best)
12
y2
0.5
0.5
0.5
1.5
2
2.5
y1
Variacin temporal, con Simulink, apartado A
3.5
4
3
2
y1
y2
1
0
1
10
20
30
40
50
tiempo t
Apartado B
t_max = 200; dt = t_max/2000; t = 0:dt:t_max;
% Caracter
sticas de la fuerza aplicada
on_off = 1; % selecciono la fuente sinusoidal
F_dc = 0; % nivel de continua de la fuerza
F_amp = 1; % amplitud de la fuerza
F_frec = 0.1; % frecuencia de la fuerza
sim(amortiguador_simulink, t );
y1 = simout(:, 2); % Posici
on de la masa m.
F = squeeze(F); % La fuerza est
a en un array de tres dimensiones y lo quiero
% dejar como una sola dimensi
on, pues las otras dos est
an
% vac
as.
figure
plot( t, y1, b, t, F, k)
title(Variaci
on temporal de la posici
on con la F_{in}, con Simulink, apartado B)
xlabel(tiempo t), ylabel(se~
nales)
legend(y, F_{in})
13
seales
50
100
tiempo t
150
200
Apartado C
t_max = 100; dt = t_max/2000; t = 0:dt:t_max;
% Caracter
sticas de la fuerza aplicada
on_off = 1; % selecciono la fuente sinusoidal
F_dc = 0; % nivel de continua de la fuerza
F_amp = 1; % amplitud de la fuerza
F_frec = 0.4; % frecuencia de la fuerza
sim(amortiguador_simulink, t );
y1 = simout(:, 2); % Posici
on de la masa m.
F = squeeze(F); % La fuerza est
a en un array de tres dimensiones y lo quiero
% dejar como una sola dimensi
on, pues las otras dos est
an
% vac
as.
figure
plot( t, y1, b, t, F, k)
title(Variaci
on temporal de la posici
on con la F_{in}, con Simulink, apartado C)
xlabel(tiempo t), ylabel(se~
nales)
legend(y, F_{in},Location, NorthWest)
Variacin temporal de la posicin con la Fin, con Simulink, apartado C
5
y
Fin
4
3
2
seales
1
0
1
2
3
4
5
20
40
60
tiempo t
14
80
100
Apartado D
t_max = 50; dt = t_max/2000; t = 0:dt:t_max;
% Caracter
sticas de la fuerza aplicada
on_off = 1; % selecciono la fuente sinusoidal
F_dc = 0; % nivel de continua de la fuerza
F_amp = 1; % amplitud de la fuerza
F_frec = 1; % frecuencia de la fuerza
sim(amortiguador_simulink, t );
y1 = simout(:, 2); % Posici
on de la masa m.
F = squeeze(F);
figure
plot( t, y1, b, t, F, k)
axis([0 t_max min([min(F) min(y1)]) max([max(F) max(y1)]) ])
title(Variaci
on temporal de la posici
on con la F_{in}, con Simulink, apartado D)
xlabel(tiempo t)
legend(y, F_{in})
Variacin temporal de la posicin con la F , con Simulink, apartado D
in
y
F
in
0.8
0.6
seales
0.4
0.2
0
0.2
0.4
0.6
0.8
0
10
20
30
tiempo t
15
40
50