Vous êtes sur la page 1sur 15

Simulaci

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

El modelo de Volterra-Lotka esta formado por dos ecuaciones diferenciales


no lineales de primer orden que describen la evolucion de dos poblaciones,
depredador y presa, que interact
uan entre s. Las ecuaciones del modelo son:
dx
= x(a by)
dt

(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

Caso 1: a=b=c=d=1 & x0 =y0 =10

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

Diagrama de Fase, ====1


20

15

15

x2

x2

Diagrama de Fase, ====1


20

10
5

5
0

5
x1

10

10
x1

15

20

Evolucin Temporal de los Estados


20

15

15

10
5
0

10
5

0.5

1
tiempo

1.3

Evolucin Temporal de los Estados


20

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

axis([0 t_max 0 max(x(:,2)) ])


title(Evoluci
on Temporal del n
umero de Depredadores, ausencia de presas)
xlabel(tiempo), ylabel(x_2 depredadores)
legend(\gamma = 1, \gamma = 2, Location, best)
clear
x0 = [1; 0]; t_max = 1;
[t, x] = ode45(@(t,x) volterra_ec(t, x, 1, 1, 1, 1), [0 t_max], x0);
subplot(2,1,2)
plot(t, x(:,1))
hold on
[t, x] = ode45(@(t,x) volterra_ec(t, x, 2, 1, 1, 1), [0 t_max], x0);
plot(t, x(:,1), r)
hold off
axis([0 t_max 0 max(x(:,1)) ])
title(Evoluci
on Temporal del n
umero de Presas, ausencia de depredadores)
xlabel(tiempo), ylabel(x_1 presas)
legend(\alpha = 1, \alpha = 2, Location, northwest)
Evolucin Temporal del Nmero de Depredadores, ausencia de presas
x2 depredadores

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

Caso 3: a=b=d=1 & c=8/3 & x0 =y0 =1

En este caso uso como poblaciones iniciales la unidad y como parametros de


interacci
on a = b = d = 1 y c = 8/3.
Aqu el efecto del descenso del n
umero de depredadores y presas no es tan
acusado, la poblaci
on no se acerca tanto a 0, como en el caso 1. Dicho efecto
lo podemos comprobar tanto en la evolucion temporal como en el diagrama de
fase. El aumento de la poblacion de presas tiene como efecto, no inmediato, hay
un desfase en el tiempo, un aumento de los depredadores. Ademas tambien se
vuelve a observar como la curva que vemos en la grafica es periodica, con un
perodo algo menor a 5 unidades de tiempo.
clear
x0 = [1; 1]; t_max = 15;
[t, x] = ode45(@(t,x) volterra_ec(t, x, 1, 1, 8/3, 1), [0 t_max], x0);
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

Este script ejecuta y representa el modelo Simulink creado para la simulacion


del modelo de Volterra-Lotka para distintas poblaciones iniciales. Podemos usar
este modelo Simulink del sistema para obtener los mismos resultados obtenidos
mediante la simulaci
on de Matlab.
En este script recreo algunas de las simulaciones hechas anteriormente en
Matlab.
% Guardo el diagrama de bloques de simulink en pdf para mostrarlo en latex
% sin que pierda calidad la imagen.
saveas(get_param(volterra_simulink,Handle),volterra_simulink.pdf);

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

y(x*dc) = y(c x*d) = dy

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)

Diagrama de Fases con Simulink, ====1


20

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)

Diagrama de Fases con Simulink, ===1 & =8/3


4

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)

function ydot = amortiguador_ec( t, y, F, m, c, k )


% Ecuaciones del modelo de masa-muelle-amortiguador para su posterior
% resoluci
on con el comando ode45.
Fz = F(t);
ydot(1, 1) = y(2);
ydot(2, 1) = (Fz - c*y(2) - k*y(1) )/m;
Script de la simulaci
on:
clear
% Par
ametros del modelo, estos par
ametros son constantes para los 4 casos a
% estudiar.
m = 2.5; % kg
c = 0.6; % N*s/m
k = 0.4; % N/m
y0 = [0 0]; % Soluci
on inicial
8

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

1/m*(F c*y2 k*y1) = dy2


c

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

Diagrama de Fases, con Simulink, apartado A


1

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

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

Vous aimerez peut-être aussi