Issuu on Google+

Las ecuaciones de Lotka-Volterra Daniela Guadalupe Franco Garc´ıa 7 de diciembre 2010

1

Resumen

Las ecuaciones de Lotka-Volterra, tambi´en conocidas como las ecuaciones de depredador-presa, son un par de primer orden, no lineales, son de uso frecuente para describir la din´ amica de los sistemas biol´ogicos en los que dos especies interact´ uan, un depredador y una de sus presa. Que evolucionan en el tiempo y el espacio dependiendo de las condiciones iniciales que se les de. La velocidad con la que varia la poblaci´ on de las presas es proporcional al tiempo y la velocidad con la que varia la poblacion de presas es proporcional al n´ umero de encuentros con depredadores. Recientemente se ha intentado aplicar este juego de ecuaciones a modelaci´on econ´ omica o turismo sostenible.

2

Introducci´ on

Las ecuaciones diferenciales de primer orden fueron propuestas en 1925 por el italiano Vito Volterra, su objetivo fue describir las variaciones observadas en las poblaciones de peces en el mar Adr´atico; y descubri´o que la especie depredadora se alimentaba exclusivamente de la especie presa, mientras que ´esta se alimentaba de un recurso que se encontraba en el h´abitat en grandes cantidades, el cual solo interven´ıa as´ı. Tambi´en que ambas poblaciones eran homog´eneas, es decir, no intervenian factores como la edad o el sexo y que los encuentros de la especie depredadora con las especie presa eran igualmente probables. Siendo as´ı, se encontr´ o con que solo exist´ıan dos variables: la magnitud poblacional de la especie depredadora y y la de la especie presa. As´ı mismo, supuso que aambas magnitudes poblacionales depend´ıan exclusivamente del tiempo y no de alguna otra variable especial. Despu´es en 1926 Alfred Lotka trabaj´o sobre el mismo sistema de ecuaciones pero con el fin de describir una reacci´on qu´ımica en la cual las concentraciones oscilan.

3

Caracteristicas de las ecuaciones de Lotka-Volterra y sus soluciones

Las ecuaciones de Lotka-Volterra se usan frecuentemente para describir la din´amica de los sistemas biol´ ogicos en los que dos especies interact´ uan, un depredador y una de sus presa. Que evolucionan en el tiempo de acuerdo con el par de ecuaciones 1


[

dx = x(α − βy) dt

(1)

dy = −y(γ − δx) (2) dt donde y es el n´ umero de depredadores, por ejemplo zorros, donde x es el n´ umero de presas, por ejemplo conejos, y t es el tiempo α, β, γ, δsonparametrosquerepresentanlasinteracionesentrelo [

4

Metodolog´ıa para resolver las ecuaciones de Lotka-Volterra

Las ecuaciones representan lo siguiente: dx = xα − βxy dt

(3)

La presa se supone que tienen un suministro ilimitado de alimentos, y se reproducen exponencialmente a menos sujetos a la depredaci´on; este crecimiento exponencial es representado en la ecuaci´on anterior por el plazo. Si cualquiera de x o y es cero, entonces no puede haber una depredaci´on. Con estos dos t´erminos la ecuaci´on anterior se puede interpretar como: el cambio en los n´ umeros de la presa est´a dada por su propio crecimiento, menos la velocidad a la que es presa. dy = δxy − γy dt

(4)

En esta ecuaci´ on, xy representa el crecimiento de la poblaci´on de depredadores. (Si nos fijamos en la similitud con la tasa de depredaci´on, sin embargo, otra constante se utiliza como el ritmo al que crece la poblaci´on de depredadores no es necesariamente igual a la velocidad a la que consume la presa). Y y representa la tasa de p´erdida de los depredadores ya sea debido a la muerte natural o la emigraci´ on, sino que conduce a una disminuci´on exponencial en ausencia de presas. Por lo tanto la ecuaci´ on expresa el cambio en la poblaci´on de depredadores como el crecimiento impulsado por el suministro de alimentos, menos la muerte natural.

5

Resultados y discusi´ on, incluyendo gr´ aficas

Usando el recurso de pyton conseguimos integrar el sistema de ecuaciones diferenciales de Lotka-Volterra, evaluando la matriz jacobiana en un programa y encontrando los eigenvalores y eigenvectores, pudimos presentar gracias a la terminal y alos pasos que vienen involucrados en la pagina de fisica computacional las graficas que vienen involucradas en la siguiente p´agina, que viene siendo el espacio fase del sistema de las ecuaciones que resolvimos.

2


Figure 1: Espacio fase de Las ecuaciones de Lotka-Volterra

6

Bibliograf´ıa

Recuperado de http://html.rincondelvago.com/modelo-matematico-de-lotka-volterra.html el dia 7 de diciembre de 2010 Recuperado de http://en.wikipedia.org/wiki/LotkaV olterrae quationeldia7dedici //en.wikipedia.org/wiki/LotkaV olterrae quationSolutionst ot hee quationseldia7dediciembrede2010

7

Ap´ endice (C´ odigo del programa e instruciones para elaborar gr´ aficas)

###

Definicion de las ecuaciones

###

from numpy import * import pylab as p # definicion de parametros a = 1. b = 0.1 c = 1.5 d = 0.75 def dX_dt(X, t=0): """ Devuelve el ~ Andice de crecimiento de las poblaciones de zorros y conejos.. """ return array([ a*X[0] b*X[0]*X[1] ,

3


Figure 2: Espacio fase de Las ecuaciones de Lotka-Volterra

-c*X[1] + d*b*X[0]*X[1] ]) ###

Equilibrio Poblacional

###

#Antes de usar SciPy para integrar el sistema de ecuaciones diferenciales veremos la posi #.El equilibrio ocurre cuando la tasa de crecimiento es igual a 0. # Esto da dos puntos fijos.

X_f0 = array([ 0. , 0.]) X_f1 = array([ c/(d*b), a/b]) all(dX_dt(X_f0) == zeros(2) ) and all(dX_dt(X_f1) == zeros(2)) # => True ### estabilidad de los puntos fijos ### # Cerca de estos dos puntos, el sistema puede ser linealizado:dX_dt = A_f*X donde A es la # Jacobiana evaluada en el ´ a1 unto correspondiente. T enemos que def inir la matriz Jacobiana. def d2X_dt2(X, t=0): """ volver a la matriz jacobiana evaluada en return array([[a -b*X[1], -b*X[0] ], [b*d*X[1] , -c +b*d*X[0]] ])

4

X. """


Figure 3: Espacio fase de Las ecuaciones de Lotka-Volterra

# Asi que cerca de X_f0, el cual representa la extincion de ambas especias, tenemos A_f0 = d2X_dt2(X_f0)

# >>> array([[ 1. , -0. ], # [ 0. , -1.5]])

# Cerca de Xf0, el numero de conejos crece y la poblacion de zorros decrece. El origen es # tanto un punto de silla.

# Cerca de X_f1,tenemos: A_f1 = d2X_dt2(X_f1)

# >>> array([[ 0. , -2. ], # [ 0.75, 0. ]]) # valores propios que son +/- sqrt(c*a).j: lam1, lam2 = linalg.eigvals(A_f1) # >>> (1.22474j, -1.22474j) # Son los n~ Ao meros imaginarios. Las poblaciones de zorros y conejos son peri~ A3 dicas como ~ ~ # AnAยกlisis. Su perAodo es igual a: T_f1 = 2*pi/abs(lambda1) # >>> 5.130199

5


###

Integrando la EDO usando scipy.integrate

###

# Ahora usaremos el modulo scipy.integrate para integrar las EDOs. Este modulo ofrece un m # llamado odeint (edoint, en espa~ A±ol), el cual es muy f acil de usar para integrar EDOs :

from scipy import integrate t = linspace(0, 15, 1000) # time X0 = array([10, 5]) # initials conditions: 10 rabbits and 5 foxes X, infodict = integrate.odeint(dX_dt, X0, t, full_output=True) infodict[’message’] # >>> ’Integration successful.’ # Infodict es opcional, y se puede omitir el argumento full_output si no se desea.

# Ahora podemos utilizar Matplotlib para graficar la evolucion de ambas poblaciones. rabbits, foxes = X.T f1 = p.figure() p.plot(t, rabbits, ’r-’, label=’Rabbits’) p.plot(t, foxes , ’b-’, label=’Foxes’) p.grid() p.legend(loc=’best’) p.xlabel(’time’) p.ylabel(’population’) p.title(’Evolution of fox and rabbit populations’) f1.savefig(’rabbits_and_foxes_1.png’)

# Las poblaciones son sin duda periodicas, y su periodo es cercano al valor T_f1 que compu

###

Graficando campos de direcciones y trayectorias en el espacio fase.

###

# Graficaremos algunas trayectorias en el espacio fase para diferentes puntos iniciales en # Usaremos el mapa de colores de Matplotlib para definir colores para las trayectorias. E # colores es muy util para hacer buenas graficas.

## Graficar Trayectorias ##plot trajectories for v, col in zip(values, vcolors): X0 = v * X_f1 # starting point X = integrate.odeint( dX_dt, X0, t) # we don’t need infodict here p.plot( X[:,0], X[:,1], lw=3.5*v, color=col, label=’X0=(%.f, %.f)’ % ( X0[0], X0[1]) # definir una red de c~ A3 mputo y direcciA˜3 n en cada punto ymax = p.ylim(ymin=0)[1] # get axis limits xmax = p.xlim(xmin=0)[1] 6


nb_points

= 20

x = linspace(0, xmax, nb_points) y = linspace(0, ymax, nb_points) X1 , Y1 = meshgrid(x, y) DX1, DY1 = dX_dt([X1, Y1]) M = (hypot(DX1, DY1)) M[ M == 0] = 1. DX1 /= M DY1 /= M

# # # # #

create a grid compute growth rate on the gridt Norm of the growth rate Avoid zero division errors Normalize each arrows

# Drow direction fields, using matplotlib ’s quiver function # I choose to plot normalized arrows and to use colors to give information on # the growth speed###################################################################### p.title(’Trajectories and direction fields’) Q = p.quiver(X1, Y1, DX1, DY1, M, pivot=’mid’, cmap=p.cm.jet) p.xlabel(’Number of rabbits’) p.ylabel(’Number of foxes’) p.legend() p.grid() p.xlim(0, xmax) p.ylim(0, ymax) f2.savefig(’rabbits_and_foxes_2.png’)

### Contadores de grafica ### def IF(X): u, v = X return u**(c/a) * v * exp( -(b/a)*(d*u+v) )

# Verificaremos que IF se mantiene constante para diferentes trayectorias.

for v in values: X0 = v * X_f1 # starting point X = integrate.odeint( dX_dt, X0, t) I = IF(X.T) # compute IF along the trajectory I_mean = I.mean() delta = 100 * (I.max()-I.min())/I_mean print ’X0=(%2.f,%2.f) => I ~ %.1f |delta = %.3G %%’ % (X0[0], X0[1], I_mean, delta) # >>> X0=( 6, # X0=( 9, # X0=(12, # X0=(15, # X0=(18,

3) 4) 6) 8) 9)

=> => => => =>

I I I I I

~ ~ ~ ~ ~

20.8 39.4 55.7 66.8 72.4

|delta |delta |delta |delta |delta

7

= = = = =

6.19E-05 2.67E-05 1.82E-05 1.12E-05 4.68E-06

% % % % %


# Graficando isocontornos de IF puede ser una buena representacion de trayectorias, sin te # plot iso contours nb_points = 80 # grid size x = linspace(0, xmax, nb_points) y = linspace(0, ymax, nb_points) X2 , Y2 = meshgrid(x, y) # create the grid Z2 = IF([X2, Y2]) # compute IF on each point f3 = p.figure() CS = p.contourf(X2, Y2, Z2, cmap=p.cm.Purples_r, alpha=0.5) CS2 = p.contour(X2, Y2, Z2, colors=’black’, linewidths=2. ) p.clabel(CS2, inline=1, fontsize=16, fmt=’%.f’) p.grid() p.xlabel(’Number of rabbits’) p.ylabel(’Number of foxes’) p.ylim(1, ymax) p.xlim(1, xmax) p.title(’IF contours’) f3.savefig(’rabbits_and_foxes_3.png’) p.show() Para elaborar las gr´ aficas ocupamos el programa elaborado que se muestra con nterioridad, con los pasos que vienene en la pagina de f´ısica computacional usando la terminal.: EDITOR=”/usr/bin/emacs” export EDITOR asegurandose que sea la trayectoria a Emacs. Ejecutar: source .profile; echo EDIT OR ˜ listo. y regresar ”/usr/bin/emacs” ya estA¡ ˜ 3 ndelarchivo. Ejecutar ”ipython” y luego llamen la ediciA ˜ todo el programa que ediGuardar y salir (Ctrl-X Ctrl-S) y se ejecutarA¡ taron. ˜ 3 ndeLotka − Enseguida apareceran las 3 graficas que pedia de la ecuaciA V olterra.despu´ esseguardanenarchivopngylisto. Conclusi´ on: Pudimos encontrar el espacio fase del par de ecuaciones diferenciales de Lotka-Volterra con ayuda del python y del editor emacs y la terminal, y gracias tambi´en al programa a la manera de como integr´o las ecuaciones con la ayuda de la matriz jacobiana y a los eigenvalores y eigenvectores.

8


Ecuaciones de Lotka Volterra