2.4.4 Matrices de Leslie.

download 2.4.4 Matrices de Leslie.

of 68

Transcript of 2.4.4 Matrices de Leslie.

Simulacin y Anlisis de Modelos Poblacionales Matriciales o aFAMAF, Universidad Nacional de Crdoba o R. J. Corin 1 Director: Dr. Oscar H. Bustos

1 Correo

Electrnico: [email protected] o

ResumenLos modelos poblacionales matriciales son herramientas poderosas y utiles para el estudio de dinmicas a poblacionales, con aplicaciones en la ecolog epidemiolog y demograf En el presente trabajo se a, a a. disear e implementar un software que permita el estudio de modelos poblacionales matriciales permin a a tiendo su construccin, anlisis e interpretacin. Este trabajo est dividido en tres partes: primero se o a o a explican los modelos poblacionales matriciales en forma terica; qu son, cmo se denen, qu tipo de o e o e anlisis permiten. Luego se explica el diseo de un lenguaje de programacin (llamado PML) desarrollado a n o para permitir la simulacin y el anlisis de los modelos antes explicados; se dar su sintaxis y semntica. o a a a Finalmente, contando con una implementacin funcional de este lenguaje, se analizarn diferentes casos o a poblacionales, utilizando simulacin y rutinas numricas. Esta implementacin permitir interpretar los o e o a resultados obtenidos por medio de grcos de l a neas, barras e imgenes de sensibilidad. a

Contents1 Introduccin o 1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Los modelos matriciales 2.1 Grafos de ciclo de vida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Modelo de Leslie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 2.4 2.5 Modicaciones al modelo de Leslie bsico: Estocstico y Densodependiente . . . . . . . . . a a Modelos matriciales clasicados por etapas . . . . . . . . . . . Resultados Anal ticos . . . . . . . . . . . . . . . . . . . . . . . 2.5.1 Solucin de la ecuacin de proyeccin n(t + 1) = An(t) o o o 2.5.2 Propiedades de las matrices de proyeccin . . . . . . . . o 2.5.3 El teorema Strong-Ergodic . . . . . . . . . . . . . . . 2.5.4 Valor Reproductivo . . . . . . . . . . . . . . . . . . . . . 2.5.5 Damping Ratio . . . . . . . . . . . . . . . . . . . . . . . 2.5.6 Sensibilidad del autovalor 1 . . . . . . . . . . . . . . . 2.5.7 Elasticidad del autovalor 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4 5 5 6 7 7 8 8 9 9 10 10 10 10 11 11 12 12 13 13 14 15 18 18 18 19

3 El Lenguaje PML 3.1 Denicin EBNF de PML . . . . . o 3.1.1 Deniciones bsicas . . . . a 3.1.2 Identicadores . . . . . . . 3.1.3 Funciones y Procedimientos 3.2 Semntica de PML . . . . . . . . . a 3.2.1 Sintaxis Abstracta . . . . . 3.2.2 Semntica . . . . . . . . . . a 3.3 Implementacin de PML . . . . . . o 3.3.1 Rol de la semntica . . . . a 3.3.2 Parser y Gramtica . . . . a 3.3.3

Portabilidad y extensibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1

4 Implementaciones de los modelos en PML 4.1 Simulaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Modelo Constante . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.2 Estados Iniciales . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.3 Sensibilidad mediante proyeccin . . . . . . . . . . . . . . . . . . o 4.1.4 Modelo Estocstico . . . . . . . . . . . . . . . . . . . . . . . . . . a 4.1.5 Modelo Densodependiente . . . . . . . . . . . . . . . . . . . . . . 4.1.6 Estados Iniciales y Ergodicidad . . . . . . . . . . . . . . . . . . . 4.1.7 Sensibilidad del parmetro R, en g(N ) = RebN . . . . . . . . . a 4.2 Clculos Anal a ticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Caso de estudio: Poblacin humana estadounidense del a o 1966 o n 4.2.2 Caso de estudio: Poblacin tortuga desrtica . . . . . . . . . . . o e 4.2.3 Caso de estudio: Poblacin cardencha . . . . . . . . . . . . . . . o 5 Conclusiones

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - USA66 . . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

20 20 20 22 25 28 37 39 44 46 47 52 58 65

2

Chapter 1

Introduccin oLos modelos poblacionales matriciales son herramientas poderosas y utiles para el estudio de dinmicas a poblacionales, con aplicaciones en la ecolog epidemiolog y demograf [1][2]. a, a a Consideramos poblaciones estructuradas (por edad, sexo, status reproductivo, espacio, etc.) cuyos parmetros son conocidos mediante trabajo de campo. Estas poblaciones pueden ser fcilmente analizadas a a utilizando modelos poblacionales matriciales. En el presente trabajo se dise ar e implementar un software que permita el estudio de modelos n a a poblacionales matriciales permitiendo su construccin, anlisis e interpretacin. o a o Existen paquetes diseados para facilitar la tarea de simular modelos poblacionales matriciales. Una n solucin ampliamente utilizada es la familia de programas RAMAS1 . Otro paquete es ULM ([3][5]). En o ULM, el usuario describe el modelo a estudiar en un archivo que luego es interpretado y, si est bien a formado, se presenta una serie de comandos disponibles para el anlisis y la simulacin del modelo. a o Si bien estos paquetes facilitan la construccin y anlisis de los modelos, esta simplicacin lleva un o a o precio. Muchos anlisis poblacionales requieren tener en cuenta detalles unicos, que dif a cilmente pueden ser anticipados por un paquete que ofrece nitas opciones en su men. En el otro extremo, se pueden u encontrar ambientes de propsito general, como ser Matlab2 . o En ULM se opta por describir el modelo a estudiar utilizando un lenguaje espec co reducido, pero solamente se utiliza este lenguaje para la descripcin de este, quedando la simulacin y anlisis para o o a una etapa posterior. En este trabajo, en cambio, se pretende desarrollar un lenguaje de programacin o (llamado PML) como motor primario, permitiendo al usuario un total control, desde la descripcin y o denicin del modelo hasta la simulacin y anlisis de los resultados. o o a Teniendo una implementacin de PML se podrn desarrollar librer que al ser includas proveern al o a as, a usuario con ejemplos de funciones que implementan modelos o facilitan en gran medida su construccin, o adems de incluir otras rutinas de uso frecuente. Esto otorga no slo transparencia sino tambin la a o e posibilidad de modicar o crear nuevas implementaciones desde el principio.1 Applied 2 The

Biomathematics, 100 North Country Rd., Setauket, New York, 11733, U.S.A.; http://www.ramas.com MathWorks, Inc., 3 Apple Hill Drive, Natick MA, 01760, U.S.A.; http://www.mathworks.com

3

El desarrollo de este software ser una herramienta poderosa y novedosa, ya que se permitir la a a modelacin de dinmicas poblacionales de manera precisa, y gracias a la existencia del lenguaje de o a programacin como medio para describir los modelos se provee mxima exibilidad y potencia, aunque o a siempre manteniendo el foco en los modelos matriciales poblacionales.

1.1

Objetivos

Implementar un programa que sirva para la modelacin de dinmicas poblacionales, permitiendo o a su construccin, anlisis (simulacin y obtencin de resultados tanto grcos como numricos) e o a o o a e interpretacin. Para llegar nalmente a este programa, antes se deber: o a Disear un lenguaje de programacin que sirva para la correcta descripcin de modelos poblan o o cionales matriciales. Denir su sintaxis y semntica. a Brindar una implementacin del lenguaje mencionado, implementando un parser para la sino taxis propuesta y un intrprete correspondiente. e Contando con una implementacin funcional del lenguaje PML, construir, analizar e interpretar o diferentes programas de modelos para diferentes casos poblacionales.

4

Chapter 2

Los modelos matriciales2.1 Grafos de ciclo de vida

Los grafos de ciclo de vida proveen una forma simple y grca de representar el ciclo de vida de una a poblacin. La construccin de dicho grafo es sencilla. Se deben seguir los siguientes pasos: o o 1. Elegir un conjuntos de etapas. Estas etapas representarn el camino que recorrer cada individuo a a a lo largo de su existencia. 2. Elegir un intervalo de tiempo, que ser el paso de tiempo que ocurre entre (t, t + 1). (la variable t a de tiempo ser discreta en nuestros modelos) a 3. Crear un nodo por cada etapa. Numerar los nodos de 1 a k. (nos referiremos al nodo i como Ni ) 4. Crear una arista dirigida del nodo Ni a Nj si un individuo en la etapa i en el tiempo t puede contribuir con individuos (por desarrollo o reproduccin) a la etapa j en el tiempo t + 1. Cada o arista recibe un coeciente aij en el arco de Nj a Ni dando el n mero de individuos en la etapa i u en el tiempo t + 1 por cada individuo en la etapa j en el tiempo t. Entonces se tiene: ni (t + 1) =k X

aij nj (t)

(1)

j=1

Cuando se construye el grafo, se debe pensar tambin cul ser la variable que determinar las etapas. e a a a Por ejemplo, si consideramos la variable edad, tendremos t picamente etapas como ser recin nacido, e joven, adulto, etc. Otras variables posibles pueden ser el tama o (o desarrollo) o la ubicacin. n o Supongamos que consideramos k etapas, y pensaremos en etapas clasicadas por la variable edad. Un grafo posible es el dado por la gura 2.1. Estos grafos pueden ser vistos tambin como matrices k k, simplemente tomando cada aij (los e coecientes de las aristas) como elementos de la matriz, y dejando las restantes entradas en 0. La matriz asociada al grafo de la gura 2.1 es como sigue: 1 k1 k p1 0 0 0 0 ... 0 0 0 0 pk1 0 5

De esta manera arribamos al modelo denido por Leslie en 1945 [6].

Figure 2.1: Grafo de Ciclo de Vida

2.2

Modelo de Leslie

Leslie deni en 1945 un modelo clasicado por edad, de la siguiente manera: Si tenemos k clases de edad, o un individuo que comienza en la clase de edad i (i = 1..k), producir i hijos (esta cantidad es llamada a f ertilidad) durante el intervalo de tiempo considerado, y tendr una probabilidad pi de sobrevivir a la a siguiente clase de edad (0 pi 1). La poblacin en cuestin puede ser vista como un vector n(t), con ni (t) la cantidad de individuos de o o edad i en el tiempo t. De esta manera la dinmica de la poblacin se puede determinar iterativamente por la siguiente a o ecuacin matricial (llamada ecuacin de proyeccin): o o o n(t + 1) = An(t) para t = 0, 1, ... donde A es de la forma: 1 p1 A = 0 0 0 .. . 0 k1 0 0 pk1 k 0 0 0 (2)

(3)

(A es llamada matriz de proyeccin poblacional). o

La ecuacin (2) puede ser vista como la versin matricial de (1). o o En las siguientes modicaciones al modelo bsico de Leslie, si bien var la forma de los modelos, a a notar que siempre se mantiene (2).

6

2.3

Modicaciones al modelo de Leslie bsico: Estocstico y a a Densodependiente

Consideramos casos en que la matriz A no es constante. Por ejemplo, las fertilidades i pueden variar con respecto al tiempo. En este caso tendremos una nueva matriz At de la forma: h1 (t) p1 0 At = .. 0 . 0 0 hk1 (t) hk (t) 0 0 0 0 0 pk1

a a o Luego tendremos una matriz At estocstica, que var en relacin al tiempo t. Las funciones hi (t) (i = 1..k) sern procesos estocsticos. a a Otro cambio posible ser que las fertilidades i dependan de la densidad de poblacin. Similarmente a o tendr amos una matriz An de la forma: g1 (n1 , ..., nk ) 0 p1 An = .. . 0 0 0 gk1 (n1 , ..., nk ) 0 0 pk1 gk (n1 , ..., nk ) 0 0 0

Donde la matriz An es dependiente de la densidad. Si queremos que las fertilidades i declinen exponencialmente con la densidad, podemos denir: gi (n1 , ..., nk ) = ebN , para i = 1..k donde N = Pki=1

ni , y b determina la fuerza de la dependencia de las fertilidades con N .

2.4

Modelos matriciales clasicados por etapas

En algunos casos, es ms apropiado tener en cuenta una variable que no sea la edad. En algunas a especies, a veces el tama o o el desarrollo conviene mas que la edad. Un modelo ampliamente usado n de clasicacin por etapas es el llamado standard size-classied model. Este modelo ha sido usado para o modelar poblaciones de rboles, corales, tortugas desrticas y peces[1]. La matriz As es: a e g1 p1 As = 0 0 2 g2 .. . 0 0 .. . pk1 k 0 0 gk

7

Los elementos de la diagonal gi son las probabilidades de sobrevivir y quedarse en la etapa i, mientras que los elementos de la subdiagonal pi representan las probabilidades de sobrevivir y crecer a la etapa i + 1. A continuacin damos el grafo de ciclo de vida correspondiente a un modelo clasicado por etapas: o

Figure 2.2: Grafo de Ciclo de Vida para modelos clasicados por etapas

2.5

Resultados Anal ticos

En la seccin anterior, se puede simular fcilmente el desarrollo de la poblacin utilizando (1). En esta o a o seccin se darn mtodos para analizar la matriz de proyeccin y obtener informacin directamente de o a e o o ella.

2.5.1

Solucin de la ecuacin de proyeccin n(t + 1) = An(t) o o o

Sea A una matriz de proyeccin. Usaremos los autovalores i , los autovectores derechos wi y los izquierdos o vi , que satisfacen: Awi = i wi vi A

(4)

= i wi

donde vi es la transpuesta conjugada compleja de v (en el caso de ser real, v = vT ). Supongamos n0 la poblacin inicial. Gracias a propiedades de las matrices de proyeccin (que veremos ms adelante), o o a a los autovalores de A son distintos entre s lo que nos dice que los autovectores wi sern linealmente , independientes. Luego, como los wi son l.i., podemos escribir:

n0 = c1 w1 + c2 w2 + ... + ck wk para algunos coecientes ci . Ahora premultiplicamos por A para obtener n(1), usando (2), (4) y (5): X X n(1) = An0 = ci Awi = ci i wii i

(5)

Si multiplicamos nuevamente, obtenemos n(2): X X n(2) = An(1) = ci i Awi = c i 2 wi ii i

8

Continuando de esta manera, llegamos a la solucin: o X c i t wi n(t) = ii

(6)

De esta manera podemos ver que el comportamiento de n(t) depende de los autovalores i , que a medida que t crece sern elevados a ms altas potencias. a a

2.5.2

Propiedades de las matrices de proyeccin o

Una matriz es nonegativa si todos sus elementos son mayor o igual que 0. Una matriz es positiva si todos sus elementos son mayor estricto que 0. Diremos que una matriz no negativa es irreducible sii su grafo de ciclo de vida contiene un camino de cada nodo a cada nodo (esto es, si es conexo). Diremos que una matriz no negativa irreducible es primitiva si se convierte positiva cuando es elevada a valores sucientemente altos. El teorema perron-frobenius [2] asegura que toda matriz no negativa tiene un autovalor mayor o igual a que el resto en magnitud. Este autovalor es llamado el autovalor dominante, 1 . Adems, si nuestra matriz es primitiva, 1 es real y positivo, y mayor estricto que el resto de los autovalores. Dos propiedades importantes que usaremos son: (para desarrollos, ver [2]): La mayor de la matrices de proyeccin son primitivas. a o Las matrices de proyeccin que consideramos en este trabajo (y, en general, en cualquier aplicacin o o demogrca) tiene sus autovalores distintos entre s a .

2.5.3

El teorema Strong-Ergodic

Una poblacin ser llamada ergodica si su eventual comportamiento es independiente de su estado inicial o a (Cohen 1979c). Veremos en esta seccin que nuestros modelos tienen esta propiedad. o Sea A matriz de proyeccin primitiva. o Reescribiendo (6) con los autovalores decreciendo en magnitud: n(t) = c1 t w1 + c2 t w2 + c3 t w3 + 1 2 3 (7)

e Si 1 es estrictamente mayor que los otros autovalores, entonces a medida que t crece el trmino c1 t w1 1 terminar dominando, sin importar la poblacin inicial. La poblacin crecer a una tasa dada por 1 , con a o o a una estructura proporcional a w1 . Para ver esto, dividiendo en (7) por t (1 es positivo) obtenemos: 1 t t n(t) 2 3 w2 + c 3 w3 + t = c 1 w1 + c 2 1 1 1 mite en t , tenemos: si 1 > |i | para i 2, entonces tomando lt

lim

n(t) = c1 w1 t 1

Este importante resultado es conocido como el teorema strong-ergodic. Muestra que, si A es primitiva, o la dinmica a largo plazo de una poblacin es descripta por la tasa de crecimiento 1 y con una distribucin a o estructural estable w1 . Tambin es utilizado un valor llamado tasa intr e nseca de crecimiento, denido como r = ln(1 ). 9

2.5.4

Valor Reproductivo

Imaginamos dos poblaciones iguales, pero que comienzan con estados iniciales diferentes. Una comienza con un individuo en la etapa i, y la otra en la etapa j (i 6= j). Ambas se desarrollarn de la misma a manera, pero tendrn diferentes tama os de poblacin. Estos diferentes tama os estarn dados por los a n o n a diferentes valores reproductivos de cada etapa. Viendo en (5), podemos obtener: c = W1 n0 = Vn0 Eventualmente la poblacin converge a n(t) = c1 t w1 , donde c1 = v1 n0 por lo visto recin. Luego el o e 1 tama o de la poblacin es proporcional a una suma de los estados iniciales, pero estos estan directamente n o inuenciados por los valores de v1 .

2.5.5

Damping Ratio

Uno puede preguntarse cun rpido una poblacin converge a su distribucin estable. Viendo (5), uno a a o o a a puede convencerse de que mientras mas grande es 1 con respecto a los otros autovalores, ms rpido se converger. De aqu se desprende el damping ratio , denido como: a = 1 /|2 |

2.5.6

Sensibilidad del autovalor 1

La sensibilidad del autovalor dominante 1 a cambios en los elementos aij de la matriz de proyeccin o puede obtenerse por medio de la siguiente frmula (Caswell 1978) [2]: o v i wj = aij < w, v >

2.5.7

Elasticidad del autovalor 1

Las entradas pi y i dieren en escala. Una forma de anlisis diferente que soluciona el problema es a el de considerar en cuanta proporcin cambia el autovalor cuando se realizan cambios proporcionales en o los elementos aij . Estos valores se llaman elasticidades (Caswell 1984, Kroon 1986) [2]) y son denidos como sigue: aij eij = aij

10

Chapter 3

El Lenguaje PMLEl lenguaje desarrollado es imperativo, y su sintaxis es parecida a la del lenguaje PASCAL. PML permite la denicin de funciones, procedimientos, estructuras de control (bucles f or y while, y condicionales if ). o El lenguaje tambin permite el llamado recursivo entre funciones y procedimientos, as tambin como el e e pasaje de variables por valor y por referencia (el tipo de llamado es call by value). Los tipos primitivos son entero, real, boolean y string. Se pueden crear arreglos multidimensionales de los tipos primitivos. Adems se proveen tipos espec a cos para manejo de entrada y salida de texto y grcos: textwindow, a linegraphwindow, bargraphwindow y sengraphwindow. Estos tipos permiten al usuario denir variables que representan, en tiempo de ejecucin, ventanas o donde se puede visualizar informacin: o textwindow: Ventana de texto. Esta ventana permite el manejo de texto; el contenido de esta ventana puede ser cargado desde un archivo, o salvado hacia un archivo. linegraphwindow: Ventana de grco de l a neas. Permite la visualizacin de una o ms trayectorias; o a este tipo de ventanas ser usado para simular dinmicas poblacionales a medida que avanza el a a tiempo. bargraphwindow: Ventana de grco de barras. Permite la creacin de grcos de barras. Este a o a tipo de ventanas ser usado para gracar distribuciones estables y valores reproductivos de las a poblaciones. sengraphwindow: Ventana de grco de sensibilidad. Permite la visualizacin de imgenes que a o a representan valores por medio de colores. Este tipo de ventanas ser usado para visualizar las a sensibilidades del autovalor dominante.

3.1

Denicin EBNF de PML o

A continuacin se lista la denicin del lenguaje, en forma BNF extendida; esta denicin se mantiene o o o en estrecha relacin con la denicin estndar de PASCAL ([14]). o o a

11

3.1.1

Deniciones bsicas ahletrai = A|B|C|B|D|E|F|G| H | I | J | K | L | M | N | O | P | Q| R | S | T | U | V | W | X | Y | Z| a | b | c | d | e | f | g | h | i| j | k | l | m | n | o | p | q | r| s | t | u | v | w | x | y | z hdigitoi = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 hstringi = string-char { string-char } hstring-chari = cualquier char excepto | hdigito-seci = [ signo] digito { digito } hsignoi = +| - hnumero-enteroi = digito-sec hnumero-reali = digito-sec. [ digito-sec][ exp] | [ digito-sec][exp] hexpi = (e | E)[signo] digito-sec hnumeroi = numero-entero | numero-real hconstantei = [signo] (identicador | numero)| string

3.1.2

Identicadoreshidenticadori = letra { letra | digito } hlista-identi = ident { , ident }

Expresiones hexpresioni hexpresion-simplei hterminoi hfactori hrelacioni hoperador-sumai hfactor-multi hllamada-funcioni hparlisti Comandos hseccomi hcommi hcomm-simplei hasigi hllamada-proci hcomm-estri hcomm-compi hcomm-buclei hcomm-whilei hcomm-fori = = = = = = = = = = [ comm { ; comm } ] comm-simple | comm-estr asig | llamada-proc identicador := expresion identicador [ parlist ] comm-comp | comm-bucle | comm-cond begin seccomm end comm-while | comm-for while expresion do comm for identicador := expresion (to| dto) expresion do comm 12 = = = = = = = = = expresion-simple [ relacion expresion-simple ] [signo] termino { operador-suma termino } factor { factor-mult factor } identicador | numero | string | llamada-funcion | not factor | ( expresion ) = | | = + | - | or * | / | and identicador [ parlist ] ( expresion { , expresion } )

hcomm-condi = comm-if hcomm-ifi = if expresion

then comm [ else

comm ]

3.1.3

Funciones y Procedimientoshproc-enci hfunc-enci hresultadoi hdeclisti hdecli hvardecli hvaldecli htipoi = = = = = = = = procedure identicador [ declist ] function identicador [ declist ]: resultado tipo ( decl { ; decl } ) vardecl | valdecl var identicador : tipo identicador : tipo integer | bool | real | string | textwindow | graphwindow

Programas y Bloques hprogramai hencabezadoi hbloquei hdeclaracionesi hvariablesi hvariables si hproc y funci hproc-decli hfun-decli hbloque simplei hdeclaraciones si hprogi = = = = = = = = = = = = encabezado bloque. program identicador ; declaraciones prog [variables] [proc y func] global valdecl ; {valdecl} var valdecl ; {valdecl} { (proc-decl | fun-decl) }; proc-enc ; bloque simple fun-enc ; bloque simple declaraciones s prog [variables s] begin seccom end

3.2

Semntica de PML a

En esta seccin deniremos la semntica de PML. Hacemos un desarrollo anlogo al realizado en [13] para o a a el caso del lenguaje Algol; una diferencia es la existencia de declaraciones en nuestro lenguaje. Adems a se usarn continuaciones pues el lenguaje permite saltos utilizando los comandos exit y break. Se a dar solamente la semntica denotacional de PML, dejando de lado la operacional. a a A continuacin listamos los tipos del lenguaje: o ::= bool | int | string | textwindow | linegraphwindow | bargraphwindow | sengraphwindow (tipos de datos) ::= exp[ ] | var[ ] | comm | exp[ ] | var[ ] ::= | prog | decl (frases tipo) Las ultimas dos producciones de nos permitirn armar las funciones y procedimientos; la distincin a o entre var y exp se utilizar para el pasaje por valor y por referencia. Hay que tener en cuenta el hecho a

13

de que en el cuerpo de una funcin en PASCAL (y, por lo tanto en PML) el identicador correspondiente o a esa funcin puede ser visto tanto como una variable (que ser el resultado de la funcin) o como una o a o llamada recursiva. Esto introduce algunas complicaciones tcnicas que preferimos evitar considerando e slo procedimientos, que permiten emular funciones. Por simplicidad y sin prdida de generalidad o e pensaremos que los procedimientos toman slo dos parmetros, el primero por valor y el segundo por o a referencia.

3.2.1

Sintaxis Abstracta

Daremos aqu una descripcin abstracta de la sintaxis (utilizando el estilo de [13]), como paso previo a la o denicin de la semntica. En esta descripcin, un contexto es una funcin que mapea identicadores o a o o en frases tipo .

Declaraciones

` : : decl ( | p 7 exp[1 ] var[2 ] comm | 1 7 var[1 ] | 2 7 var[2 ]) ` q : prog ` proc p (1 : 1 , var 2 : 2 ); q : decl Sea ` d : decl, denimos , d contexto de la siguiente manera: , : = ( | 7 var[ ]) , proc p (1 : 1 , var 2 : 2 ); q = ( |p 7 exp[1 ] var[2 ] comm)

Programas ` d1 : decl , d1 ` d2 : decl ... , d1 , ..., dm1 ` dm : decl , d1 , ..., dm ` c1 , ..., cn : comm ` d1 ; ...; dm ; begin c1 ; ...; cn end : prog

14

Comandos

` skip, exit, break : comm ` c1 , ..., cn : comm ` begin c1 ; ...; cn end : comm ` b : exp[bool] ` c1 , c2 : comm ` if b then c1 else c2 : comm ` b : exp[bool] ` c: comm ` while b do c : comm ` e : exp[ ] () = var[ ] ` := e : comm ` e1 , e2 : exp[int] ( | 7 exp[int]) ` c : comm () = var[int] ` for := e1 to e2 do c : comm ` e1 : exp[1 ] (2 ) = var[2 ] , (p) = exp[1 ] var[2 ] comm ` p(e1 , 2 ) : comm

3.2.2

Semntica a

La semntica de los tipos de datos son los esperados, es decir: a [[bool]] = {true, f alse} (valores de verdad) [[int]] = Z (n meros enteros) u [[real]] = R n meros reales u [[string]] = secuencias de caracteres [[textwindow]] = ventanas de texto [[linegraphwindow]] = ventanas grcas a [[bargraphwindow]] = ventanas grcas a [[sengraphwindow]] = ventanas grcas a 15

No describiremos aqu las ventanas. Asumiremos que, al igual que los nmeros enteros, los booleanos u y las secuencias de caracteres, las ventanas pueden denirse matemticamente. Dicha denicin no tiene a o relevancia aqu . Vemos ahora la semntica de las frases tipo. Primero denimos Loc como el conjunto de lugares de a memoria, que utilizaremos junto con la funcin new : Env S Loc, que dado un ambiente y un estado o nos devuelve un nuevo lugar de memoria. Para esto, deniremos S: S = Loc (V + {used, unused}). Los valores used y unused nos servirn para marcar los lugares de memoria como reservados o libres a en el estado (y de esta manera evitar conictos en la asignacin de lugares de memoria a identicadores). o

[[exp[ ] ]] = [[ ]] [[]] [[var[ ] ]] = Loc [[]] [[var[ ]]] = Loc [[exp[ ]]] = S [[ ]] [[decl]] = S (Env, S) [[prog]] = (S * O) (S * O) Pensaremos en O como el conjunto de posibles outputs. [[comm]] = (S * O) (S * O) [[]] = { | (exit) S * O, (break) (S * O) + {nobreak}, , tq () = y ()[[]] } Estas deniciones nos permiten dar el tipo de la funcin semntica: o a si ` c : , [[c]] : [[]] [[]] Daremos las deniciones de esta funcin a continuacin para cada caso de y de la sintaxis abstracta. o o Semntica de las declaraciones a [[ : ]]decl s = ( ( | 7 new..s), (s | new..s 7 used))

16

[[proc p(1 : 1 ; var 2 : 2 ); q]]decl s = (0 , s) donde 00 =(0 | 1 7 l | 2 7 x) s00 =(s0 | l 7 v) 0 =( | p 7 v.x.k.s0 . [[q]]prog 00 (release.l.k) s00 )

l =new.0 .s0 release l k =s. k(s | l 7 unused) El caso de las expresiones es similar al dado por Tennent [13], por lo tanto es dejado. Notamos que las semnticas de expresiones no toman continuaciones y siempre terminan, ya que en este a desarrollo no son tenidas en cuenta las funciones.

Semntica de los comandos a [[skip]]comm k = k

[[ := e]]comm k s = k(s | () 7 [[e]]s) [[p(e1 , 2 )]]comm k s = (p) ([[e1 ]]s) (2 ) k s [[for := e1 to e2 do c]]comm k s = let v1 = [[e1 ]]s v2 = [[e2 ]]s metaf or n m = if n > m then k else [[c]]comm (| 7 n | break 7 k)(metaf or (n + 1) m) in metaf or v1 v2 s [[while b do c]]comm k = k 0 ( [[c]]comm (|break 7 k)k0 s 0 donde k (s) = k(s) [[exit ]]comm k = (exit) [[break ]]comm k = if (break) 6= nobreak then (break) else k [[if b then c1 else c2 ]]comm k s = ( [[c1 ]]comm k s [[c2 ]]comm k s if [[b]]s = true if [[b]]s = f alse

if [[b]] s = true if [[b]] s = f alse

Semntica de los programas a La siguiente denicin sirve para programas que pueden ser tanto el programa principal como algn o u procedimiento. Para el caso del programa principal, asumiremos la existencia de 0 y k0 , el ambiente 17

inicial y la continuacin inicial. La continuacin inicial k0 genera output trivial y el ambiente inicial o o consta de un solo par, 0 = {(break, nobreak)}. El programa principal ser evaluado inicialmente en este a ambiente y en esta continuacin. o [[d1 ; ...; dm ; begin c1 ; ...; cn end]]prog k s = let (1 , s1 ) = [[d1 ]]decl s, ... ,(m , s0 ) = [[dm ]]decl m1 sm1 0 = (m | exit 7 k) in [[c1 ]]comm 0 ([[c2 ]]comm 0 (...([[cn ]]comm 0 k)...)) s0

3.33.3.1

Implementacin de PML oRol de la semntica a

Si bien la semntica ha sido descripta usando herramientas propias de semntica denotacional, la implea a mentacin es ms directa ya que se utiliza el lenguaje PASCAL que ofrece estructuras de control similares o a a las que se quieren implementar en PML. El rol de la semntica denida cumple entonces dos objetivos: a Proveer una descripcin matemtica del lenguaje PML o a Establecer una base formal que permitir demostrar la correctitud de la implementacin. a o

3.3.2

Parser y Gramtica a

Teniendo la denicin EBNF, se puede desarrollar un parser para PML, utilizando las herramientas lex o & yacc ([9]). Primero denimos el analizador lexicogrco de PML. Las palabras reservadas de PML son a (estas se pueden deducir de la denicin EBNF): o hpalabras-reservadasi = + | | | / | = | | < | | ; | .. | and | array | begin | div | do | dto | else | end | f or | f unction | global | if | mod | not | of | or | | procedure | program | then | to | | var | while >= | ( | ) | [ | ] | := | . | , | : |

Estas palabras sern reconocidas por el analizador como tokens. Adems de estas, debemos agregar a a expresiones regulares para que el analizador reconozca los restantes tokens: Denimos previamente: L = [A Za z], D = [0 9]. Expresin regular para identicadores: o {L}({L} | {D}) Expresin regular para nmeros enteros: o u {D}+ 18

Expresin regular para nmeros reales: o u {D}+ (.{D}+ )?([Ee][+]?{D}+ )? Expresin regular para strings: o Expresin regular para comentarios: o \0 [ \0 \n \0 {[ }\n] }

Expresin regular para secuencias de tabs y new-lines: o [ \t\n] Una vez que tenemos denido el analizador lexicogrco, denimos la gramtica. Esta gramtica est a a a a denida directamente por las producciones (reglas) dadas en la denicin EBNF del lenguaje. o

3.3.3

Portabilidad y extensibilidad

Al proveer la directiva extern en la denicin de funciones y procedimientos, PML soporta la llamada o de funciones y procedimientos externos al lenguaje. Esto permite proveer librer precompiladas con as funciones y procedimientos, que pueden estar compiladas en cualquier otro lenguaje. En la actual implementacin para plataforma Windows, se implement las llamadas a librer de formato DLL. Esta o o as caracter stica tiene las siguientes ventajas: Abstraccin. Mantener librer externas permite a PML abstraer las implementaciones de eno as trada/salida, grcos, funciones de conversin, numricos, que pueden ser mas tarde cambiadas. a o e Portabilidad. El cdigo del lenguaje puede ser mantenido libre de llamadas dependientes de o plataforma, guardando todas las llamadas al sistema en las librer as. Performance. Se pueden proveer librer precompiladas que favorecen en velocidad de ejecucin as o (en la implementacin actual, PML es un intrprete solamente, por lo cual es importante poder o e llamar a funciones y procedimientos precompilados).

19

Chapter 4

Implementaciones de los modelos en PML4.14.1.1

SimulacionesModelo Constante

A continuacin vemos la implementacin de un modelo de leslie de matriz constante, para el caso de una o o matriz A: 0 A = .3 0 1 0 .7 5 0 0

(3)

y estado inicial n:

1 n = 0 0 Listado en PML uses dialogs, sysutils, windows, arithmetic, matrixext; global g:linegraphwindow; var i,j,t:integer; a:matrix [3,3] of real; n:vector [3] of real; r:real; begin

20

scalelog(g, true); a^0 := [0.0, 1.0, 5.0]; a^1 := [0.3, 0.0, 0.0]; a^2 := [0.0, 0.5, 0.0]; n[0]:=1.0; n[1]:=0.0; n[2]:=0.0; t:=strtoint(inputbox(Tiempo t,calcular hasta t=,10)); for i:=0 to t-1 do begin multiplicar(n, a); addrpoints(g, n[0], , 10,0); addrpoints(g, n[1], , 10,1); addrpoints(g, n[2], , 10,2); repaint(g); end; end. Resultado de la simulacin o

Figure 4.1: Leslie Constante

21

Podemos apreciar en el grco las evoluciones de cada clase de edad. Teniendo en cuenta la escala a logar tmica, se puede ver que cada clase de edad luego de uctuar irregularmente al principio, comienza a crecer exponencialmente con un crecimiento similar a medida que avanza el tiempo.

4.1.2

Estados Iniciales

El caso anterior era espec co a la distribucin de edades n(0). Consideramos en este caso varias poblao ciones diferentes, cada una con un estado inicial aleatorio. La matriz es la misma que en el caso anterior (3). Los estados iniciales para este caso son: n1 n2 n3 n4 n5 n6 n7 n8 n9 = = = = = = = = = [ [ [ [ [ [ [ [ [ 2.071531 0.8968879 2.17962 ] 2.620035 1.033543 2.158412 ] 2.274696 3.090863 0.9672987 ] 1.322421 2.160626 3.134101 ] 0.3748354 0.2227502 2.388807 ] 3.029126 0.4063146 0.07311776 ] 1.242075 1.898932 2.589447 ] 0.5306102 1.123725 0.4605948 ] 2.073476 0.4945276 0.07567254 ]

Listado en PML uses dialogs, sysutils, windows, arithmetic, matrixext; global w:textwindow; g:linegraphwindow; var i,j,t:integer; a:matrix [3,3] of real; n1:vector [3] of real; n2:vector [3] of real; n3:vector [3] of real; n4:vector [3] of real; n5:vector [3] of real; n6:vector [3] of real; n7:vector [3] of real; n8:vector [3] of real; n9:vector [3] of real; r:real; begin scalelog(g, true); a^0 := [0.0, 1.0, 5.0]; 22

a^1 := [0.3, 0.0, 0.0]; a^2 := [0.0, 0.5, 0.0]; r:=3.3; for for for for for for for for for i:=0 i:=0 i:=0 i:=0 i:=0 i:=0 i:=0 i:=0 i:=0 to to to to to to to to to 2 2 2 2 2 2 2 2 2 do do do do do do do do do n1[i]:=random*r; n2[i]:=random*r; n3[i]:=random*r; n4[i]:=random*r; n5[i]:=random*r; n6[i]:=random*r; n7[i]:=random*r; n8[i]:=random*r; n9[i]:=random*r;

t:=strtoint(inputbox(Tiempo t,calcular hasta t=,10)); addstr(w, ); addstr(w, calculando hasta tiempo t = +inttostr(t)); for i:=0 to t-1 do begin multiplicar(n1, a); multiplicar(n2, a); multiplicar(n3, a); multiplicar(n4, a); multiplicar(n5, a); multiplicar(n6, a); multiplicar(n7, a); multiplicar(n8, a); multiplicar(n9, a); addrpoints(g, n1[0]+n1[1]+n1[2], , 10,0); addrpoints(g, n2[0]+n2[1]+n2[2], , 10,1); addrpoints(g, n3[0]+n3[1]+n3[2], , 10,2); addrpoints(g, n4[0]+n4[1]+n4[2], , 10,3); addrpoints(g, n5[0]+n5[1]+n5[2], , 10,4); addrpoints(g, n6[0]+n6[1]+n6[2], , 10,5); addrpoints(g, n7[0]+n7[1]+n7[2], , 10,6); addrpoints(g, n8[0]+n8[1]+n8[2], , 10,7); addrpoints(g, n9[0]+n9[1]+n9[2], , 10,8); repaint(g); end; pause (Programa Finalizado. Pulse una tecla para continuar.); end.

23

Resultados

Figure 4.2: Estados Iniciales 1: mismo crecimiento, diferente tamao n

Figure 4.3: Estados Iniciales 2: misma distribucin de clases de edad o

24

Aqu podemos ver como cada una crece con la misma tasa (gura 4.2), y converge a una misma distribucin de edades (gura 4.3). Se puede ver que en lo que dieren es en las cantidades de individuos o (gura 4.2). Es claro que un estado inicial que favorezca a la clase de edad 3 ser superior a uno que a se torne mayor en la 1, ya que los individuos de la clase 3 comienzan a reproducirse inmediatamente, mientras que los de la clase 1 recin lo harn luego de 2 unidades de tiempo, y sujetos a las tasas de e a mortalidad.

4.1.3Listado

Sensibilidad mediante proyeccin o

uses dialogs, sysutils, windows, arithmetic, matrixext; global g:linegraphwindow; var i,j,t:integer; a1:matrix [3,3] of real; a2:matrix [3,3] of real; a3:matrix [3,3] of real; a4:matrix [3,3] of real; a5:matrix [3,3] of real; n1:matrix [3] of real; n2:matrix [3] of real; n3:matrix [3] of real; n4:matrix [3] of real; n5:matrix [3] of real; begin scalelog(g, true); titulo(g, Grfico); a a1^0 := [0.0, 1.0, 5.0]; a1^1 := [0.3, 0.0, 0.0]; a1^2 := [0.0, 0.5, 0.0]; a2^0 := [0.0, 0.9, 5.0]; a2^1 := [0.3, 0.0, 0.0]; a2^2 := [0.0, 0.5, 0.0]; a3^0 := [0.0, 1.0, 4.5]; a3^1 := [0.3, 0.0, 0.0]; a3^2 := [0.0, 0.5, 0.0]; a4^0 := [0.0, 1.0, 5.0]; a4^1 := [0.3, 0.0, 0.0]; a4^2 := [0.0, 0.45, 0.0]; 25

a5^0 := [0.0, 1.0, 5.0]; a5^1 := [0.27, 0.0, 0.0]; a5^2 := [0.0, 0.45, 0.0]; n1[0]:=1.0; n1[1]:=0.0; n1[2]:=0.0; n2[0]:=1.0; n2[1]:=0.0; n2[2]:=0.0; n3[0]:=1.0; n3[1]:=0.0; n3[2]:=0.0; n4[0]:=1.0; n4[1]:=0.0; n4[2]:=0.0; n5[0]:=1.0; n5[1]:=0.0; n5[2]:=0.0; legend(g, true); legends(g, original, 0); legends(g, 10% menos l2, legends(g, 10% menos l3, legends(g, 10% menos p2, legends(g, 10% menos p1,

1); 2); 3); 4);

xlabel(g, tiempo t); ylabel(g, nmero de individuos); u label(g, Grfico de Leslie); a t:=strtoint(inputbox(Tiempo t,calcular hasta t=,10));

for i:=0 to t-1 do begin multiplicar(n1, a1); multiplicar(n2, a2); multiplicar(n3, a3); multiplicar(n4, a4); multiplicar(n5, a5); addrpoints(g, n1[0]+n1[1]+n1[2], , 10,0);

26

addrpoints(g, addrpoints(g, addrpoints(g, addrpoints(g, repaint(g); end;

n2[0]+n2[1]+n2[2], n3[0]+n3[1]+n3[2], n4[0]+n4[1]+n4[2], n5[0]+n5[1]+n5[2],

, , , ,

10,1); 10,2); 10,3); 10,4);

pause (Simulacin Finalizada. Pulse una tecla para continuar.); o end. Resultados

Figure 4.4: Sensibilidad Podemos ver aqu cun sensible es cada entrada de la matriz de proyeccin. Recordamos la matriz A: a o 0 1 5 A = .3 0 0 0 .7 0

o u Si reducimos la entrada a01 , de 1 a 0.9, la poblacin no se ve tan reducida en su desarrollo; incluso contin a a creciendo. Pero si reducimos a10 , de .3 a .27, reducimos drsticamente la posibilidad de crecimiento de la poblacin, quien se extingue rpidamente. Las otras reducciones tienden a extinguir la poblacin, aunque o a o ms lentamente. a

27

4.1.4Listado

Modelo Estocstico a

uses dialogs, sysutils, windows, arithmetic, matrixext; global w:textwindow; g:linegraphwindow; function h(t,i:integer):real; var result:real; begin if randomr then r:=r2; r2:=ln(r); addstr(w, net fertility functions:); copiarmatriz(temp, a); netf(0,10, a, fi); mostrar_n(fi); copiarmatriz(temp, a); addstr(w, ); s:=sumavec(fi); addstr(w, net rep rate: +floattostr(s)) ; addstr(w, ); addstr(w, gen time: +floattostr(ln(s)/ln(r))); addstr(w, Autovalores:); mostrar_n(autovalores); addstr(w, ); mostrar_n(autovalores_im); copiarmatriz(temp, a);

50

addstr(w, Rate of increase:); addstr(w, r=+floattostr(r2)); result:=eigvect(0,10,r,a,autovector); addstr(w, ); addstr(w, autovector de +floattostr(r)); addstr(w, ); mostrar_n(autovector); transp(temp, a); result:=eigvect(0,10,r,a,lautovector); addstr(w, ); addstr(w, autovector izq. de +floattostr(r)); addstr(w, ); mostrar_n(lautovector); copiarmatriz(temp, a); addstr(w, ); addstr(w, escalados); addstr(w, ); escalar(autovector); mostrar_n(autovector); addstr(w, ); escalar(lautovector); mostrar_n(lautovector); r2 := abssegmay(autovalores); dr := absmay(autovalores_im); if dr>r2 then r2:=dr; dr := r / r2; addstr(w, ); addstr(w, Damping ratio:= +floattostr(dr)); for i:=0 to 9 do addrpoint(g1, autovector[i], inttostr(i), 10); repaint(g1); for i:=0 to 9 do addrpoint(g2, lautovector[i], inttostr(i), 10); repaint(g2);

51

inisen(s1, 10, 10); inisen(s2, 10, 10); addstr(w, sensitivity:); for i:=0 to 9 do for j:=0 to 9 do begin s := log10(sensitivity(i,j,lautovector,autovector)); addstr(w, floattostr(s)); brush(s1, trunc(-2.0*s)); pintar(s1, i, j); end; addstr(w, elasticity:+floattostr(a[i,j])); for i:=0 to 9 do for j:=0 to 9 do begin s:=elasticity(i,j,r,a,lautovector,autovector); addstr(w, floattostr(s)); brush(s2, trunc(40000.0*s)); pintar(s2, i, j); end; pause (Programa Finalizado. Pulse una tecla para continuar.); end.

4.2.2

Caso de estudio: Poblacin tortuga desrtica o e

Matriz de proyeccin poblacional o 0.000 0.716 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.567 0.149 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.567 0.149 0.000 0.000 0.000 0.000 0.000 0.000 1.300 1.980 2.570 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.604 0.000 0.000 0.000 0.000 0.235 0.560 0.000 0.000 0.000 0.000 0.225 0.678 0.000 0.000 0.000 0.000 0.249 0.851 0.000 0.000 0.000 0.000 0.016 0.860

52

Distribucin Estructural Estable o

Figure 4.14: Distribucin estable o Vemos aqu que gran parte de la poblacin se mantiene en la etapa pre-reproductiva. Solamente en o la etapa 6 se ve un cierto incremento. Valor Reproductivo

Figure 4.15: Valor Reproductivo Podemos ver que los valores reproductivos van creciendo a medida que se acercan a las etapas reproductivas.

53

Sensibilidad de 1

Figure 4.16: Sensibilidad - Oscuro signica menos sensible a En este grco de sensibilidad podemos observar que 1 es ms sensible en los las probabilidades de a supervivencia y paso a siguiente etapa, y de supervivencia y quedarse en la misma etapa, principalmente en las etapas 2, 3 y 7. Elasticidad de 1

Figure 4.17: Elasticidad - Oscuro signica mas sensible Aqu podemos ver que la probabilidad de sobrevivir y quedarse en la etapa 7 es la elasticidad ms a grande.

54

Listado uses dialogs, sysutils, windows, matrixext, arithmetic; global w:textwindow; g1,g2:bargraphwindow; s1,s2:sengraphwindow; var i,j,t:integer; a:matrix [8,8] of real; temp:matrix [8,8] of real; autovalores:vector [8] of real; autovalores_im:vector [8] of real; autovector:vector [8] of real; lautovector:vector [8] of real; fi:vector [8] of real; r,r2,dr, f,s:real; b:boolean; result:integer; begin titulo(w, Clculo de autovalores y autovectores); a a^0 a^1 a^2 a^3 a^4 a^5 a^6 a^7 := := := := := := := := [0.000, [0.716, [0.000, [0.000, [0.000, [0.000, [0.000, [0.000, 0.000, 0.567, 0.149, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.567, 0.149, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.604, 0.235, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.560, 0.225, 0.000, 0.000, 1.300, 0.000, 0.000, 0.000, 0.000, 0.678, 0.249, 0.000, 1.980, 0.000, 0.000, 0.000, 0.000, 0.000, 0.851, 0.016, 2.570 0.000 0.000 0.000 0.000 0.000 0.000 0.860 ]; ]; ]; ]; ]; ]; ]; ];

addstr(w, Matriz A correspondiente a una poblacin de desert tortoise); o mostrar(a); copiarmatriz(a, temp); result:=eig(0,8,a, autovalores, autovalores_im); r:=absmay(autovalores); r2:=absmay(autovalores_im); if r2>r then r:=r2; r2:=ln(r); addstr(w, net fertility functions:); copiarmatriz(temp, a);

55

netf(0,8, a, fi); mostrar_n(fi); copiarmatriz(temp, a); addstr(w, ); s:=sumavec(fi); addstr(w, net rep rate: +floattostr(s)) ; addstr(w, ); addstr(w, gen time: +floattostr(ln(s)/ln(r))); addstr(w, Autovalores:); mostrar_n(autovalores); addstr(w, ); mostrar_n(autovalores_im); copiarmatriz(temp, a); addstr(w, Rate of increase:); addstr(w, r=+floattostr(r2)); result:=eigvect(0,8,r,a,autovector); addstr(w, ); addstr(w, autovector de +floattostr(r)); addstr(w, ); mostrar_n(autovector); transp(temp, a); result:=eigvect(0,8,r,a,lautovector); addstr(w, ); addstr(w, autovector izq. de +floattostr(r)); addstr(w, ); mostrar_n(lautovector); copiarmatriz(temp, a); addstr(w, ); addstr(w, escalados);

56

addstr(w, ); escalar(autovector); mostrar_n(autovector); addstr(w, ); escalar(lautovector); mostrar_n(lautovector); r2 := abssegmay(autovalores); dr := absmay(autovalores_im); if dr>r2 then r2:=dr; dr := r / r2; addstr(w, ); addstr(w, Damping ratio:= +floattostr(dr)); for i:=0 to 7 do addrpoint(g1, autovector[i], inttostr(i), 6); repaint(g1); for i:=0 to 7 do addrpoint(g2, lautovector[i], inttostr(i), 6); repaint(g2); inisen(s1, 8, 8); inisen(s2, 8, 8); addstr(w, sensitivity:); for i:=0 to 7 do for j:=0 to 7 do begin s := log10(sensitivity(i,j,lautovector,autovector)); addstr(w, floattostr(s)); brush(s1, trunc(-2.0*s)-3); pintar(s1, i, j); end; addstr(w, elasticity:+floattostr(a[i,j])); for i:=0 to 7 do for j:=0 to 7 do begin s:=elasticity(i,j,r,a,lautovector,autovector); addstr(w, floattostr(s)); brush(s2, trunc(40000.0*s)); pintar(s2, i, j); end;

57

end.

4.2.3

Caso de estudio: Poblacin cardencha o 0.000 0.000 0.000 0.000 0.000 322.38 0.966 0.000 0.000 0.000 0.000 0.000 0.013 0.010 0.125 0.000 0.000 3.448 0.007 0.000 0.125 0.238 0.000 30.170 0.001 0.000 0.000 0.245 0.167 0.862 0.000 0.000 0.000 0.023 0.750 0.000

Matriz de proyeccin poblacional o

Grafo de ciclo de vida

Figure 4.18: Grafo de ciclo de vida

58

Distribucin estable de clases o

Figure 4.19: Distribucin estable o En esta distribucin de clases podemos ver que las mayores clases son las 1 y 2, que representan los o estados de semilla durmiente-a o 1 y semilla durmiente-ao 2. n n Valor Reproductivo

Figure 4.20: Valor Reproductivo Se puede ver en el vector de valor reproductivo, como comienza a crecer a medida que se acerca a la etapa correspondiente a planta oreciente.

59

Sensibilidad de 1

Figure 4.21: Sensibilidad - Oscuro signica menos sensible En este grco podemos ver que las mayores sensibilidades ocurren en la esquina inferior izquierda de a la matriz. Esto reeja que la mayor sensibilidad ocurre cuando se colocan aristas desde las etapas de semilla durmiente a planta oreciente. Elasticidad de 1

Figure 4.22: Elasticidad - Oscuro signica mas sensible a Las elasticidades nos reejan que los mayores aportes a 1 estn dados por los lugares que representan las siguientes aristas: a54 : de roseta mediana a roseta (19%) 60

a65 : de roseta a planta oreciente (29%) a64 : de planta oreciente a roseta mediana (23%) Listado uses dialogs, sysutils, windows, matrixext, arithmetic; global w:textwindow; g1,g2:bargraphwindow; s1,s2:sengraphwindow; var i,j,t:integer; a:matrix [6,6] of real; temp:matrix [6,6] of real; autovalores:vector [6] of real; autovalores_im:vector [6] of real; autovector:vector [6] of real; lautovector:vector [6] of real; fi:vector [6] of real; r,r2,dr, f,s:real; b:boolean; result:integer; begin titulo(w, Clculo de autovalores y autovectores); a a^0 a^1 a^2 a^3 a^4 a^5 := := := := := := [ [ [ [ [ [ 0.000, 0.966, 0.013, 0.007, 0.001, 0.000, 0.000, 0.000, 0.010, 0.000, 0.000, 0.000, 0.000, 0.000, 0.125, 0.125, 0.000, 0.000, 0.000, 0.000, 0.000, 0.238, 0.245, 0.000, 0.000, 0.000, 0.000, 0.000, 0.167, 0.023, 322.38 0.000 3.448 30.170 0.862 0.750 ]; ]; ]; ]; ]; ];

addstr(w, Matriz A correspondiente a una poblacin de "teasel"??); o mostrar(a); copiarmatriz(a, temp); result:=eig(0,6,a, autovalores, autovalores_im); r:=absmay(autovalores); r2:=absmay(autovalores_im); if r2>r then r:=r2; r2:=ln(r);

61

addstr(w, net fertility functions:); copiarmatriz(temp, a); netf(0,6, a, fi); mostrar_n(fi); copiarmatriz(temp, a); addstr(w, ); s:=sumavec(fi); addstr(w, net rep rate: +floattostr(s)) ; addstr(w, ); addstr(w, gen time: +floattostr(ln(s)/ln(r))); addstr(w, Autovalores:); mostrar_n(autovalores); addstr(w, ); mostrar_n(autovalores_im); copiarmatriz(temp, a); addstr(w, Rate of increase:); addstr(w, r=+floattostr(r2)); result:=eigvect(0,6,r,a,autovector); addstr(w, ); addstr(w, autovector de +floattostr(r)); addstr(w, ); mostrar_n(autovector); transp(temp, a); result:=eigvect(0,6,r,a,lautovector); addstr(w, ); addstr(w, autovector izq. de +floattostr(r)); addstr(w, ); mostrar_n(lautovector); copiarmatriz(temp, a); addstr(w, );

62

addstr(w, escalados); addstr(w, ); escalar(autovector); mostrar_n(autovector); addstr(w, ); escalar(lautovector); mostrar_n(lautovector); r2 := abssegmay(autovalores); dr := absmay(autovalores_im); if dr>r2 then r2:=dr; dr := r / r2; addstr(w, ); addstr(w, Damping ratio:= +floattostr(dr)); for i:=0 to 5 do addrpoint(g1, autovector[i], inttostr(i), 6); repaint(g1); for i:=0 to 5 do addrpoint(g2, lautovector[i], inttostr(i), 6); repaint(g2); inisen(s1, 6, 6); inisen(s2, 6, 6); addstr(w, sensitivity:); for i:=0 to 5 do for j:=0 to 5 do begin s := log10(sensitivity(i,j,lautovector,autovector)); addstr(w, floattostr(s)); brush(s1, trunc(-2.0*s)-3); pintar(s1, i, j); end; addstr(w, elasticity:+floattostr(a[i,j])); for i:=0 to 5 do for j:=0 to 5 do begin s:=elasticity(i,j,r,a,lautovector,autovector); addstr(w, floattostr(s)); brush(s2, trunc(40000.0*s)); pintar(s2, i, j);

63

end; end.

64

Chapter 5

ConclusionesEl intrprete actual puede ser utilizado como una herramienta util, aunque an le falta mucho desarrollo e u por delante para considerarse estable y completo. El presente trabajo se encuentra incompleto en varios aspectos: Semntica: La semntica puede ser reescrita contemplando los casos de funciones y arreglos. a a Intrprete actual: El intrprete actual es lento e ineciente; falta trabajo de optimizacin. Falta un e e o depurador (debugger) apropiado. Compilador: Un compilador a cdigo ensamblador o PASCAL ser una solucin alternativa a o a o desarrollar. Portabilidad: un intrprete/compilador para otra plataforma, por ejemplo Linux. e Lenguaje PML: el lenguaje puede ser extendido de muchas maneras, por ejemplo PML carece de la denicin de tipos propios (record ). o Implementaciones de los modelos: Actualmente los anlisis llevados a cabo son bsicos; en [2] se a a pueden consultar anlisis mucho ms complicados para implementar en PML. a a Afortunadamente gran parte de este trabajo seguir en desarrollo; el lenguaje aqu desarrollado posia blemente se integre al paquete estad stico InfoStat. Por otra parte, librer pueden ser desarrolladas as independientemente del intrprete gracias a la posibilidad de llamadas a librer externas, permitiendo e as continuar el desarrollo de manera paralela.

65

Bibliography[1] CASWELL, H., Matrix Population Models, Sinauer, Sunderland, MA, 1989. [2] CASWELL, H., Matrix Population Models, 2nd ed., Sinauer, Sunderland, MA, 2000. [3] FERRIERE R., SARRAZIN F., LEGENDRE S., BARON J.P. Matrix population models applied to viability analysis and conservation: Theory and practice with ULM software., Acta OEcologica , no. 17 (1996), pp. 629-656. [4] LEAH EDELSTEIN-KESHET Mathematical Models In Biology, Birkhauser Mathematic Series, 1988. [5] LEGENDRE, S., CLOBERT J.ULM, a software for conservation and evolutionary biologists., Journal of Applied Statistics , no. 22 (1995), pp. 817-834. [6] LESLIE P.H.On the Use of Matrices in Certain Population Mathematics, Biometrika , no. 33 (1945), pp. 183-212. [7] LESLIE P.H.Some Further Notes on the Use of Matrices in Population Mathematics, Biometrika , no. 35 (1948), pp. 213-245. [8] LESLIE P.H.A Stochastic Model for Studying the Properties of Certain Biological Systems by Numerical Methods, Biometrika , no. 45 (1958), pp. 16-31. [9] LEVINE, J.R, MASON, T., BROWN, D. lex & yacc , OReilly & Associates, Inc., 1992. [10] POLLARD J.H., Mathematical Models for the Growth of Human Populations, Cambridge Univ. Press, Cambridge, 1973. [11] POOLE R.W., An Introduction to Quantitative Ecology, McGraw-Hill, 1974. [12] PRATT T.W., ZELKOWITZ, M.V. Programming Languages, Design and Implementation, 3rd edition, Prentice Hall, 1999. [13] TENNENT R.D., Semantics of Programming Languages, Prentice Hall, 1991. [14] WELSH, J., ELDER, J. Introduction to Pascal, 3rd edition, Prentice Hall, 1988. [15] WIRTH, N., Compiler Construction, Addison-Wesley, 1996.

66