[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49. dynamics


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.1 Introducción a dynamics

El paquete adicional dynamics incluye varias funciones para crear diversas representaciones gráficas de sistemas dinámicos y fractales, y además una implementación del método numérico de Runge-Kutta de cuarto orden, para resolver sistemas de ecuaciones diferenciales.

Para usar las funciones en este paquete será necesario primero que todo cargarlo con load("dynamics"), y las funciones que crean gráficas necesitan que Xmaxima esté instalado.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.2 Funciones y variables para dynamics

Función: chaosgame ([[x1, y1]...[xm, ym]], [x0, y0], b, n, ...opciones...);

Usa el método llamado juego del caos, para producir fractales: se dibuja un punto inicial (x0, y0) y luego se elije aleatoriamente uno de los m puntos [x1, y1]...[xm, ym]. Después se dibuja un nuevo punto que estará en el segmento entre el último punto dibujado y el punto que se acabó de elegir aleatoriamente, a una distancia del punto elegido que será b veces la longitud del segmento. El proceso se repite n veces.

Función: evolution (F, y0, n,...opciones...);

Dibuja n+1 puntos en una gráfica bidimensional (serie de tiempo), en que las coordenadas horizontales de los puntos son los números enteros 0, 1, 2, ..., n, y las coordenadas verticales son los valores y(n) correspondientes, obtenidos a partir de la relación de recurrencia

        y(n+1) = F(y(n))

Con valor inicial y(0) igual a y0. F deberá ser una expresión que dependa únicamente de la variable y (y no de n), y0 deberá ser un número real y n un número entero positivo.

Función: evolution2d ([F, G], [x0, y0], n, ...opciones...);

Muestra, en una gráfica bidimensional, los primeros n+1 puntos de la sucesión definida a partir del sistema dinámico discreto con relaciones de recurrencia:

        x(n+1) = F(x(n), y(n))    y(n+1) = G(x(n), y(n))

Con valores iniciales x0 y y0. F y G deben ser dos expresiones que dependan únicamente de x y y.

Función: ifs ([r1,...,rm],[A1,...,Am], [[x1,y1]...[xm, ym]], [x0,y0], n, ...opciones...);

Usa el método del Sistema de Funciones Iteradas (IFS, en inglés Iterated Function System). Ese método es semejante al método descrito en la función chaosgame, pero en vez de aproximar el último punto al punto elegido aleatoriamente, las dos coordenadas del último punto se multiplican por una matriz 2 por 2 Ai correspondiente al punto que fue elegido aleatoriamente.

La selección aleatoria de uno de los m puntos atractivos puede ser realizada con una función de probabilidad no uniforme, definida con los pesos r1,...,rm. Esos pesos deben ser dados en forma acumulada; por ejemplo, si se quieren 3 puntos con probabilidades 0.2, 0.5 y 0.3, los pesos r1, r2 y r3 podrían ser 2, 7 y 10, o cualquier otro grupo de números que tengan la misma proporción.

Función: julia (x, y, ...opciones...)

Crea un fichero gráfico con la representación del conjunto de Julia del número complejo (x + i y). Los parámetros x y y deben ser reales. El fichero se crea en el directório actual o en el directório del usuario, usando el formato gráfico XPM. El programa puede demorar varios segundos a ser ejecutado y cuando termina imprime un mensaje con el nombre del fichero creado.

Se asignan diferentes colores a los puntos que no pertenecen al conjunto de Julia, de acuerdo con el número de iteraciones que demore la secuencia, comenzando en ese punto, a salir fuera del círculo de convergencia con radio 2. El número máximo de iteraciones se define con la opción levels; después de ejecutadas ese número de iteraciones, si la secuencia aun está dentro del círculo de convergencia, el punto será coloreado con el color definido por la opción color.

Todos los colores usados para los puntos que no pertenecen al conjunto de Julia tendrán los mismos valores de saturación (saturation) y valor (value), pero con diferentes ángulos de tonalidad, distribuidos uniformemente en el intervalo entre hue y (hue + huerange).

Se puede dar a la función una secuencia de opciones. La lista de posibles opciones aparece en una sección más al frente.

Función: mandelbrot (options)

Crea un fichero gráfico con la representación del conjunto de Mandelbrot. El fichero se crea en el directório actual o en el directório del usuario, usando el formato gráfico XPM. El programa puede demorar varios segundos a ser ejecutado y cuando termina imprime un mensaje con el nombre del fichero creado.

Se asignan diferentes colores a los puntos que no pertenecen al conjunto de Mandelbrot, de acuerdo con el número de iteraciones que demore la secuencia generada por ese punto a salir fuera del círculo de convergencia con radio 2. El número máximo de iteraciones se define con la opción levels; después de ejecutadas ese número de iteraciones, si la secuencia aun está dentro del círculo de convergencia, el punto será coloreado con el color definido por la opción color.

Todos los colores usados para los puntos que no pertenecen al conjunto de Mandelbrot tendrán los mismos valores de saturación (saturation) y valor (value), pero con diferentes ángulos de tonalidad, distribuidos uniformemente en el intervalo entre hue y (hue + huerange).

Se puede dar a la función una secuencia de opciones. La lista de posibles opciones aparece en una sección más al frente.

Función: orbits (F, y0, n1, n2, [x, x0, xf, xstep], ...opciones...);

Dibuja el diagrama de órbitas de una familia de sistemas dinámicos discretos unidimensionales, con un parámetro x; ese tipo de diagrama se usa para mostrar las bifurcaciones de un sistema discreto unidimensional.

La función F(y) define una secuencia que comienza con un valor inicial y0, igual que en el caso de la función evolution, pero en este caso la función también dependerá del parámetro x, el cual tomará valores comprendidos en el intervalo de x0 a xf, con incrementos xstep. Cada valor usado para el parámetro x se muestra en el eje horizontal. En el eje vertical se mostrarán n2 valores de la sucesión y(n1+1),..., y(n1+n2+1), obtenidos después de dejarla evolucionar durante n1 iteraciones iniciales.

Función: staircase (F, y0, n, ...opciones...);

Dibuja un diagrama de escalera (o diagrama de red) para la sucesión definida por la ecuación de recurrencia

        y(n+1) = F(y(n))

La interpretación y valores permitidos de los parámetros de entrada es la misma que para la función evolution. Un diagrama de escalera consiste en una gráfica de la función F(y), junto con la recta G(y) = y. Se comienza por dibujar un segmento vertical desde el punto (y0, y0) en la recta, hasta el punto de intersección con la función F. En seguida, desde ese punto se dibuja un segmento horizontal hasta el punto de intersección con la recta, (y1, y1); el procedimiento se repite n veces hasta alcanzar el punto (yn, yn).

Opciones

Cada opción es una lista con dos o más elementos. El primer elemento en la lista es el nombre de la opción y el resto consiste en los argumentos para esa opción.

Las opciones aceptadas por las funciones evolution, evolution2, staircase, orbits, ifs y chaosgame son las siguientes:

Las opciones aceptadas por los programas julia y mandelbrot son las siguientes:

Ejemplos

Representación gráfica y diagrama de escalera de la secuencia: 2, cos(2), cos(cos(2)),...

(%i1) load("dynamics")$
(%i2) evolution(cos(y), 2, 11, [yaxislabel, "y"], [xaxislabel,"n"]);
(%i3) staircase(cos(y), 1, 11, [domain, 0, 1.2]);

../figures/dynamics1
../figures/dynamics2

Si su procesador es lento, tendrá que reducir el número de iteraciones usado en los ejemplos siguientes. Y el valor de pointsize que da mejores resultados depende del monitor y de la resolución que use. Tendrá que experimentar con diferentes valores.

Diagrama de órbitas para el mapa cuadrático

        y(n+1) = x + y(n)^2
(%i4) orbits(y^2+x, 0, 50, 200, [x, -2, 0.25, 0.01], [pointsize, 0.9]);

../figures/dynamics3

Para ampliar la región alrededor de la bifurcación en la parte de abajo, cerca de x = -1.25, use el comando:

(%i5) orbits(x+y^2, 0, 100, 400, [x,-1,-1.53,-0.001], [pointsize,0.9],
             [ycenter,-1.2], [yradius,0.4]);

../figures/dynamics4

Evolución de un sistema en dos dimensiones, que conduce a un fractal:

(%i6) f: 0.6*x*(1+2*x)+0.8*y*(x-1)-y^2-0.9$
(%i7) g: 0.1*x*(1-6*x+4*y)+0.1*y*(1+9*y)-0.4$
(%i8) evolution2d([f,g],[-0.5,0],50000,[pointsize,0.7]);

../figures/dynamics5

Y una ampliación de una pequeña región en el fractal:

(%i9) evolution2d([f,g],[-0.5,0],300000,[pointsize,0.7], [xcenter,-0.7],
                  [ycenter,-0.3],[xradius,0.1],[yradius,0.1]);

../figures/dynamics6

Una gráfica del triangulo de Sierpinsky, obtenida con el juego del caos:

(%i9) chaosgame([[0, 0], [1, 0], [0.5, sqrt(3)/2]], [0.1, 0.1], 1/2,
                 30000, [pointsize,0.7]);

../figures/dynamics7

El helecho de Barnsley, obtenido con el Sistema de Funciones Iteradas:

(%i10) a1: matrix([0.85,0.04],[-0.04,0.85])$
(%i11) a2: matrix([0.2,-0.26],[0.23,0.22])$
(%i12) a3: matrix([-0.15,0.28],[0.26,0.24])$
(%i13) a4: matrix([0,0],[0,0.16])$
(%i14) p1: [0,1.6]$
(%i15) p2: [0,1.6]$
(%i16) p3: [0,0.44]$
(%i17) p4: [0,0]$
(%i18) w: [85,92,99,100]$
(%i19) ifs(w,[a1,a2,a3,a4],[p1,p2,p3,p4],[5,0],50000,[pointsize,0.9]);

../figures/dynamics8

Para crear un fichero llamado dinamica9.xpm con la representación gráfica del conjunto de Mandelbrot, con 12 colores, use el comando:

mandelbrot([filename,"dinamica9"])$

y el conjunto de Julia del número (-0.55 + i 0.6) puede ser obtenido con:

julia(-0.55, 0.6, [levels, 36], [center, 0, 0.6], [radius, 0.3],
      [hue, 240], [huerange, -180], [filename, "dinamica10"])$

la gráfica se guardará en el fichero dinamica10.xpm y mostrará la región desde -0.3 hasta 0.3 en la dirección x, y desde 0.3 hasta 0.9 en la dirección y. Serán usados 36 colores, comenzando con azul e terminando con amarillo.

Para resolver numéricamente la ecuación diferencial

          dx/dt = t - x^2

Con valor inicial x(t=0) = 1, en el intervalo de t desde 0 hasta 8, y con incrementos de 0.1, se usa:

(%i20) resultados: rk(t-x^2,x,1,[t,0,8,0.1])$

los resultados quedarán guardados en la lista resultados.

Para resolver numéricamente el sistema:

        dx/dt = 4-x^2-4*y^2     dy/dt = y^2-x^2+1

para t entre 0 y 4, con valores iniciales -1.25 y 0.75 para (x, y) en t=0:

(%i21) sol: rk([4-x^2-4*y^2,y^2-x^2+1],[x,y],[-1.25,0.75],[t,0,4,0.02])$

[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Jaime Villate on octubre, 13 2014 using texi2html 1.76.