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

# 49. dynamics

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

## 49.1 El paquete dynamics

El paquete adicional `dynamics` incluye funciones para visualización 3D, animaciones, análisis gráfico de ecuaciones diferenciales y ecuaciones de diferencias y para resolución numérica de ecuaciones diferenciales. Las funciones para ecuaciones diferenciales se describen en la sección sobre `Métodos numéricos` y las funciones para representar las gráficas de los conjuntos de Mandelbrot y de Julia se describen en la sección sobre `Gráficos`.

Todas las funciones en este paquete se cargan automáticamente la primera vez que se usan.

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

## 49.2 Análisis gráfico de sistemas dinámicos discretos

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. Este programa acepta las mismas opciones de `plot2d`.

  Ejemplo. Gráfico del triángulo de Sierpinsky:

      (%i1) chaosgame([[0, 0], [1, 0], [0.5, sqrt(3)/2]], [0.1, 0.1], 1/2,
                       30000, [style, dots]);

Función: evolution 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. Esta función acepta las mismas opciones que `plot2d`.

  Ejemplo.

      (%i1) evolution(cos(y), 2, 11);

Función: evolution2d ([F, G], [u, v], [u0, 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. Esta función acepta las mismas opciones que `plot2d`.

  Ejemplo. Evolución de un sistema dinámico discreto en dos dimensiones:

      (%i1) f: 0.6*x*(1+2*x)+0.8*y*(x-1)-y^2-0.9$
      (%i2) g: 0.1*x*(1-6*x+4*y)+0.1*y*(1+9*y)-0.4$
      (%i3) evolution2d([f,g], [x,y], [-0.5,0], 50000, [style,dots]);

  Y un acercamiento de una pequeña región en ese fractal:

      (%i9) evolution2d([f,g], [x,y], [-0.5,0], 300000, [x,-0.8,-0.6],
                        [y,-0.4,-0.2], [style, dots]);

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. Esta función acepta las mismas opciones que `plot2d`.

  Ejemplo. El helecho de Barnsley, creado con 4 matrices y 4 puntos:

      (%i1) a1: matrix([0.85,0.04],[-0.04,0.85])$
      (%i2) a2: matrix([0.2,-0.26],[0.23,0.22])$
      (%i3) a3: matrix([-0.15,0.28],[0.26,0.24])$
      (%i4) a4: matrix([0,0],[0,0.16])$
      (%i5) p1: [0,1.6]$
      (%i6) p2: [0,1.6]$
      (%i7) p3: [0,0.44]$
      (%i8) p4: [0,0]$
      (%i9) w: [85,92,99,100]$
      (%i10) ifs(w, [a1,a2,a3,a4], [p1,p2,p3,p4], [5,0], 50000, [style,dots]);

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.

  Ejemplo. Diagrama de órbitas para el mapa cuadrático

      (%i1) orbits(x^2+a, 0, 50, 200, [a, -2, 0.25], [style, dots]);

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

      (%i2) orbits(x^2+a, 0, 100, 400, [a,-1,-1.53], [x,-1.6,-0.8],
                   [nticks, 400], [style,dots]);

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). Esta función acepta las mismas opciones que `plot2d`.

  Ejemplo.

      (%i1) staircase(cos(y), 1, 11, [y, 0, 1.2]);

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

## 49.3 Visualización usando VTK

La función scene crea imágenes tridimensionales y animaciones usando el software Visualization ToolKit (VTK). Para poder usar esa función es necesario tener Xmaxima y VTK instalados en el sistema (incluyendo la biblioteca para usar VTK desde TCL que en algunos sistemas viene en un paquete separado).

Función: scene (objetos, …, opciones, …);

  Acepta una lista vacía o una lista de varios `objetos` y `opciones`. El programa ejecuta Xmaxima, que abre una ventana donde se representan los objetos dados, en un espacio tridimensional y aplicando las opciones dadas. Cada objeto debe pertenecer una de las 4 clases: sphere, cube, cylinder o cone (ver `Objetos de scene`). Los objetos se identifican dando el nombre de su clase, o una lista en que el primer elemento es el nombre de la clase y los restantes elementos son opciones para ese objeto.

  Ejemplo. Una pirámide hexagonal con fondo azul:

      (%i1) scene(cone, [background,"#9980e5"])$

  Presionando el botón izquierdo del ratón mientras se mueve dentro de la ventana gráfica, se puede rotar la cámara, mostrando diferentes vistas de la pirámide. Las dos opciones `elevation` y `azimuth` se pueden usar también para cambiar la orientación de la cámara. La cámara se puede mover presionando el botón del medio y moviendo el ratón y el botón del lado derecho se usa para aumentar o disminuir el zoom, moviendo el ratón para arriba y para bajo.

  Cada opción de un objeto deberá ser una lista comenzando con el nombre de la opción, seguido por su valor. La lista de posibles opciones se encuentra en la sección `Opciones de objetos de scene`.

  Ejemplo. Este ejemplo mostrará una esfera cayendo para el piso y rebotando sin perder energía. Para comenzar o poner en pausa la animación se debe oprimir el botón de play/pausa.

      (%i1) p: makelist ([0,0,2.1- 9.8*t^2/2], t, 0, 0.64, 0.01)$

      (%i2) p: append (p, reverse(p))$

      (%i3) bola: [sphere, [radius,0.1], [thetaresolution,20],
        [phiresolution,20], [position,0,0,2.1], [color,red],
        [animate,position,p]]$

      (%i4) piso: [cube, [xlength,2], [ylength,2], [zlength,0.2],
        [position,0,0,-0.1],[color,violet]]$

      (%i5) scene (bola, piso, restart)$

  La opción restart fue usada para hacer que la animación recomienze cada vez que se llega al último punto en la lista. Los valores permitidos para los colores son los mismo que para la opción `color` de plot2d.

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

### 49.3.1 Opciones de scene

Opción de scene: azimuth [azimuth, ángulo]

  Valor predefinido: `135`

  La rotación de la cámara en el plano horizontal (x, y). ángulo debe ser un número real; un ángulo de 0 significa que la cámara apunta en la dirección del eje y, haciendo que el eje x aparezca a la derecha.

Opción de scene: background [background, color]

  Valor predefinido: `black`

  El color del fondo de la ventana gráfica. Acepta nombres de colores o secuencias de caracteres hexadecimales para rojo-verde-azul (ver la opción `color` de plot2d).

Opción de scene: elevation [elevation, ángulo]

  Valor predefinido: `30`

  La rotación vertical de la cámara. El ángulo debe ser un número real; un ángulo de 0 significa que la cámara apunta en la horizontal y el valor predefinido de 30 significa que la cámara apunta 30 grados para abajo de la horizontal.

Opción de scene: height [height, pixels]

  Valor predefinido: `500`

  La altura, en pixels, de la ventana gráfica. pixels debe ser un número entero positivo.

Opción de scene: restart [restart, valor]

  Valor predefinido: `false`

  Un valor 'true' significa que la animación recomenzará automáticamente cuando llegue al final. Escribir simplemente "restart" es equivalente a escribir [restart, true].

Opción de scene: tstep [tstep, tiempo]

  Valor predefinido: `10`

  El intervalo de tiempo, en milisegundos, entre iteraciones consecutivas de las partes de una animación. tiempo debe ser un número real.

Opción de scene: width [width, pixels]

  Valor predefinido: `500`

  El ancho, en pixels, de la ventana gráfica. pixels deberá ser un número entero positivo.

Opción de scene: windowname [windowtitle, nombre]

  Valor predefinido: `.scene`

  nombre deberá ser una secuencia de caracteres que pueda ser usada para el nombre de una ventana de Tk, creada por Xmaxima para los gráficos de `scene`. El valor predefinido `.scene` implica que será creada una nueva ventana.

Opción de scene: windowtitle [windowtitle, nombre]

  Valor predefinido: `Xmaxima: scene`

  nombre debe ser una secuencia de caracteres que serán escritos en el encabezado de la ventana creada por `scene`.

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

### 49.3.2 Objetos de scene

Objeto de scene: cone [cone, opciones]

  Crea una pirámide regular con altura 1 unidad y base hexagonal con vértices a 0.5 unidades del eje. Las opciones `height` y `radius` se pueden usar para alterar esos valores predefinidos y la opción `resolution` se usa para alterar el número de aristas de la base; valores mayores harán que la pirámide parezca un cono. Por omisión, el eje estará a lo largo del eje x, el punto medio de la altura estará en el origen y el vértice en el lado positivo del eje x; las opciones `orientation` y `center` permiten alterar eso.

  Ejemplo. El siguiente comando muestra una pirámide que comienza a dar vueltas cuando se oprime el botón de animación.

      (%i1) scene([cone, [orientation,0,30,0], [tstep,100],
         [animate,orientation,makelist([0,30,i],i,5,360,5)]], restart)$

Objeto de scene: cube [cube, opciones]

  Un cubo con aristas de 1 unidad y caras paralelas al los planos xy, xz y yz. Las longitudes de las 3 aristas se pueden modificar con las opciones `xlength`, `ylength` y `zlength`, convirtiéndolo en un paralelepípedo y las caras se pueden hacer rotar con la opción `orientation`.

Objeto de scene: cylinder [cylinder, opciones]

  Crea un prisma regular con altura de 1 unidad y base hexagonal con los vértices a 0.5 unidades del eje. Las opciones `height` y `radius` permiten modificar esos valores predefinidos y la opción `resolution` se puede usar para modificar el número de aristas de la base; valores mayores tornan el prisma más parecido a un cilindro. La altura predefinida se puede alterar con la opción `height`. Por omisión el eje estará orientado a lo largo del eje x, y el punto medio de la altura estará en el origen; se pueden cambiar esas propiedades con las opciones `orientation` y `center`.

Objeto de scene: sphere [sphere, opciones]

  Una esfera de radio igual a 0.5 unidades y centro en el origen.

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

### 49.3.3 Opciones de objetos de scene

Opción de objeto: animation [animation, propiedad, posiciones]

  propiedad deberá ser una de las 4 siguientes propiedades del objeto: `origin`, `scale`, `position` o `orientation` y posiciones deberá ser una lista de puntos. Cuando se oprime el botón "play", esa propiedad tomará sucesivamente los valores en la lista, en intervalos regulares de tiempo definidos por la opción `tstep`. El botón de volver al comienzo puede usarse para recomenzar desde el principio de la lista, haciendo que la animación comience nuevamente cuando se presione otra vez el botón de play.

  Consulte también `track`.

Opción de objeto: capping [capping, número]

  Valor predefinido: `1`

  En un objeto "cone" o "cylinder", determina si la base (o bases) se muestran o no. Un valor de 1 para número torna la base visible y un valor de 0 la hace invisible.

Opción de objeto: center [center, punto]

  Valor predefinido: `[0, 0, 0]`

  Coordenadas del centro geométrico del objeto, en relación a su posición (`position`); punto puede ser una lista de 3 números reales o 3 números separados por comas. En objetos de clase "cylinder","cone" o "cube" estará localizado en el punto medio de la altura y en objetos de clase "sphere" estará en su centro.

Opción de objeto: color [color, nombre]

  Valor predefinido: `white`

  El color del objeto. Acepta nombres de colores conocidos o secuencias de 6 dígitos (rojo-verde-azul) precedidos por # (ver la opción `color` de plot2d).

Opción de objeto: endphi [endphi, ángulo]

  Valor predefinido: `180`

  En una esfera, phi es el ángulo en el plano vertical que pasa por el eje z, medido a partir de la parte positiva del eje z. ángulo debe ser un múmero entre 0 y 180 que determina el valor final de phi hasta donde se mostrará la superficie. Valores menores que 180 eliminan una parte de la superficie.

  Consulte también `startphi` y `phiresolution`.

Opción de objeto: endtheta [endtheta, ángulo]

  Valor predefinido: `360`

  En una esfera, theta es el ángulo en el plano horizontal (longitud), medido desde la parte positiva del eje x. ángulo debe ser un número entre 0 y 360 que determina el valor final donde la superficie terminará. Valores menores que 360 hacen que se elimine una parte de la superficie de la esfera.

  Consulte también `starttheta` y `thetaresolution`.

Opción de objeto: height [height, valor]

  Valor predefinido: `1`

  valor debe ser un número positivo que define la altura de un cono o cilindro.

Opción de objeto: linewidth [linewidth, valor]

  Valor predefinido: `1`

  El ancho de las líneas cuando se usa la opción `wireframe`. valor debe ser un número positivo.

Opción de objeto: opacity [opacity, valor]

  Valor predefinido: `1`

  valor debe se un número entre 0 y 1. Cuanto menor sea el número, mas transparente será el objeto. El valor predefinido de 1 implica un objeto completamente opaco.

Opción de objeto: orientation [orientation, ángulos]

  Valor predefinido: `[0, 0, 0]`

  Tres ángulos que de rotaciones que serán realizadas en el objeto, alrededor de los tres ejes.ángulos puede ser una lista con tres números reales o tres números separados por comas. Ejemplo: `[0, 0, 90]` rota el eje x del objeto hasta el eje y del sistema de referencia.

Opción de objeto: origin [origin, punto]

  Valor predefinido: `[0, 0, 0]`

  Coordenadas del origen del objeto, en relación al cual las otras dimensiones serán definidas. punto pueden ser tres números separados por comas, o una lista de tres números.

Opción de objeto: phiresolution [phiresolution, num]

  Valor predefinido: ``

  Número de sub-intervalos en que se divide el intervalo de valores del ángulo phi, que comienza en `startphi` y termina en `endphi`. num debe ser un número entero positivo.

  Consulte también `startphi` y `endphi`.

Opción de objeto: points [points]

  Esta opción hace que en vez de que se muestre la superficie, se muestren únicamente los vértices en la triangulación usada para construir la superficie. Ejemplo: `[sphere, [points]]`

  Consulte también `surface` y `wireframe`.

Opción de objeto: pointsize [pointsize, valor]

  Valor predefinido: `1`

  Tamaño de los puntos, cuando se usa la opción `points`. valor debe ser un número positivo.

Opción de objeto: position [position, punto]

  Valor predefinido: `[0, 0, 0]`

  Coordenadas de la posición del objeto. punto puede ser tres números separados por comas o una lista de tres números.

Opción de objeto: radius [radius, valor]

  Valor predefinido: `0.5`

  El radio de una esfera o la distancia desde el eje hasta los vértices de la base en cilindros o conos. valor debe ser un número positivo.

Opción de objeto: resolution [resolution, número]

  Valor predefinido: `6`

  número debe ser un número entero mayor que 2, que define el número de aristas de la base en objetos de clase "cone" o "cylinder".

Opción de objeto: scale [scale, factores]

  Valor predefinido: `[1, 1, 1]`

  Tres factores de escala en que serán deformadas las dimensiones del objeto en relación a los tres ejes. factors pueden ser tres número separados por comas o una lista con tres números. Ejemplo: `[2, 0.5, 1]` estira el objeto suplicando sus dimensiones paralelas la eje x, reduce a mitad las dimensiones paralelas al eje y, dejando iguales las dimensiones paralelas al eje z.

Opción de objeto: startphi [startphi, ángulo]

  Valor predefinido: `0`

  En una esfera, phi es el ángulo en el plano vertical que pasa por el eje z, medido a partir de la parte positiva del eje z. ángulo debe ser un múmero entre 0 y 180 que determina el valor inicial de phi desde donde se mostrará la superficie. Valores superiores a 0 eliminan una parte de la superficie.

  Consulte también `endphi` y `phiresolution`.

Opción de objeto: starttheta [starttheta, ángulo]

  Valor predefinido: `0`

  En una esfera, theta es el ángulo en el plano horizontal (longitud), medido desde la parte positiva del eje x. ángulo debe ser un número entre 0 y 360 que determina el valor inicial donde la superficie comienza. Valores mayores que 0 hacen que se elimine una parte de la superficie de la esfera.

  Consulte también `endtheta` y `thetaresolution`.

Opción de objeto: surface [surface]

  Hace que se muestre la superficie del objeto y no los las líneas ni los vértices de la triangulación usada para construirlo. Ese es el comportamiento habitual que se puede alterar con las opciones `points` o `wireframe`.

Opción de objeto: thetaresolution [thetaresolution, num]

  Valor predefinido: ``

  Número de sub-intervalos en que se divide el intervalo de valores del ángulo theta, que comienza en `starttheta` y termina en `endtheta`. num debe ser un número entero positivo. Consulte también `starttheta` y `endtheta`.

Opción de objeto: track [track, posiciones]

  posiciones deberá ser una lista de puntos. Cuando se oprime el botón de "play", la posición del objeto tomara secuencialmente los valores en la lista, a intervalos regulares de tiempo definidos por la opción `tstep`, dejando un rastro de la trayectoria del objeto. El botón de volver al comienzo puede usarse para recomenzar desde el principio de la lista, haciendo que la animación comience nuevamente cuando se presione otra vez el botón de play.

  Ejemplo. Estos comandos muestran la trayectoria de una bola lanzada con velocidad inicial de 5 m/s, a un ángulo de 45 grados, cuando se puede ignorar la resistencia del aire:

      (%i1) p: makelist ([0,4*t,4*t- 9.8*t^2/2], t, 0, 0.82, 0.01)$

      (%i2) bola: [sphere, [radius,0.1], [color,red], [track,p]]$

      (%i3) piso: [cube, [xlength,2], [ylength,4], [zlength,0.2],
            [position,0,1.5,-0.2],[color,green]]$

      (%i4) scene (bola, piso)$

  Consulte también `animation`.

Opción de objeto: xlength [xlength, altura]

  Valor predefinido: `1`

  Altura de un objeto de clase "cube", en la dirección x. altura debe ser un número positivo. Consulte también `ylength` y `zlength`.

Opción de objeto: ylength [ylength, altura]

  Valor predefinido: `1`

  Altura de un objeto de clase "cube", en la dirección y. altura debe ser un número positivo. Consulte también `xlength` y `zlength`.

Opción de objeto: zlength [zlength, altura]

  Valor predefinido: `1`

  Altura de un objeto de clase "cube", en la dirección z. altura debe ser un número positivo. Consulte también `xlength` y `ylength`.

Opción de objeto: wireframe [wireframe]

  Esta opción hace que en vez de que se muestre la superficie, se muestren únicamente las aristas de la triangulación usada para construir la superficie. Ejemplo: `[cube, [wireframe]]`

  Consulte también `surface` y `points`.

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

This document was generated by Viktor T. Toth on septiembre, 27 2018 using texi2html 1.76.