Introducedilhaão a dynamics
===========================

O pacote adicional dynamics inclui muitas funcedilhaões para criar várias representacedilhaões gráficas de sistemas dinâmicos discretos e fractais, e uma implementacedilhaão deo método numérico de Runge-Kutta de quarta ordem para a resolucedilhaão de sistemas de equacedilhaões diferenciais.

Para usar as funcedilhaões nesse pacote você deve primeiramente torná-lo disponível para uso com load("dynamics").

Modificacedilhaões introduzidas no Maxima 5.12

Iniciando no Maxima 5.12, o pacote dynamics agora utiliza a funcedilhaão plot2d para monar os gráficos. Os comandos que produzem gráficos (com excecedilhaão de julia e de mandelbrot) agora aceitam qualquer opcedilhaão de plot2d, incluindo a opcedilhaão que modificam o montante das várias interfaces gráficas, usando diferentes estilos de montagem de gráfico e cores, e representando um ou ambos os eixos em uma escala logarítmica. As antigas opcedilhaões DOMAIN, POINTSIZE, XCENTER, XRADIUS, YCENTER, YRADIUS, XAXISLABEL e YAXISLABEL não são aceitas nessa nova versão.

Todos os programas irão agora aceitar quaisquer nomes de variáveis, e não apenas X e Y como nas antigas versões. Dois parâmetros requeridos tiveram modificacedilhaões em dois desses programas: evolution2d agora requer uma lista nomeando explicitamente as duas variáveis independentes, e o intervalo horizontal para orbits não mais requer um tamanho de passo; o intervalo pode somente espcificar o nome da variável, e o menor e o maior valores; o número de passos pode agora ser modificado com a opcedilhaão NTICKS.

Funcedilhaões e Variáveis Definidas para dynamics
=================================================

 -- Funcedilhaão: chaosgame ([[X1, Y1]...[XM, YM]], [X0, Y0], B, N, ...opcedilhaões...);

     Implementa o então chamado jogo do caos: o ponto inicial (X0, Y0) é colocado no gráfico e então um dos M pontos [X1, Y1]...[XM, YM] será selecionado de forma aleatória. O próximo ponto colocado no gráfico será sobre o segmento que vai do ponto anteriormente colocado no gráfico ao ponto escolhido aleatóriamente, à distância do ponto aleatório que será B vezes o comprimento daquele segmento. o procedimento é repetido N vezes.

 -- Funcedilhaão: evolution (F, Y0, N, ..., opcedilhaões, ...);

     Desenha N+1 pontos em gráfico bidimensional, onde as coordenadas horizontais dos pontos são os inteiros 0, 1, 2, ..., N, e as coordenadas verticais são os valores correspondentes Y(N) da seqüência definida pela relacedilhaão de recorrência

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

     com valor inicial Y(0) igual a Y0. F deve ser uma expressão que depende somente de uma variável (no exemplo, essa variável dependente de Y, mas qualquer outra variável pode ser usada em lugar de Y), Y0 deve ser um número real e N deve ser um inteiro positivo.

 -- Funcedilhaão: evolution2d ([F, G], [U, V], [U0, Y0], N, ..., opcedilhaões, ...);

     Mostra, em um gráfico bidimensional, os primeiros N+1 pontos na seqüência de pontos definida por meio do sistema dinâmico discreto bidimensional com relacedilhaões de recorrência

                  u(n+1) = F(u(n), v(n))    v(n+1) = G(u(n), v(n))

     Com valores iniciais U0 e V0. F e G devem ser duas expressões que dependem somente de duas variáveis U e V, que devem ser nomeadas explicitamente em uma lista.

 -- Funcedilhaão: ifs ([R1, ..., RM], [A1, ..., AM], [[X1, Y1], ..., [XM, YM]], [X0, Y0], N, ..., opcedilhaões, ...);

     Implemanta o método de Sistemas de Funcedilhaões iteradas. Esse método é similar ao método descrito na funcedilhaão chaosgame, mas em lugar de encolher o segmento do ponto corrente ao ponto escolhido aleatóriamente, as duas componentes daquele segmento irão ser multiplicadas pela matrix 2 por 2 AI que corresponde ao ponto escolhido aleatóriamente.

     A escolha aleatória de um dos M pontos de atracedilhaão pode ser feita com uma distribuicedilhaão de probabilidade não uniforme definida por meio dos pesos R1,...,RM. Esses pesos são fornecidos de forma cumulativa; por exemplo se existem 3 pontos com probabilidades 0.2, 0.5 e 0.3, os pesos R1, R2 e R3 podem ser 2, 7 e 10.

 -- Funcedilhaão: julia (X, Y, ...OPCEDILHAÕES...)

     Cria um arquívo gráfico com a representacedilhaão do conjunto de Julia para o número complexo (X + i Y). Os parâmetros X e Y devem ser reais. o arquivo é criado no diretório corrente ou no diretório do do usuário, usando o formato gráfico XPM. O programa pode demorar muitos segundos para executar e concluir após isso, uma mensagem será mostrada com o nome do arquivo criado.

     Os pontos que não pertencem ao conjunto de Julia recebem diferentes cores, conforme o número de iteracedilhaões a funcedilhaão julia toma a seqüência iniciando naquele ponto para fora do círculo de convergência de raio 2. O número mácimo de iteracedilhaões é escolhido com a opcedilhaão LEVELS; após aquele número de iteracedilhaões, se a seqüência estiver ainda dentro do círculo de convergência, o ponto será desenhado com a cor definica pela opcedilhaão COLOR.

     Todas as cores usadas para os pontos que não pertencem ao conjunto de Julia irão ter a mesma SATURACEDILHAÃO e o mesmo VALUE, mas com diferentes ângulos de matizes distribuídos uniformemente entre HUE e (HUE + HUERANGE) (hue - valor de matiz, huerange - valor do intervalo de matiz).

     OPCEDILHAÕES é uma seqüência facultativa de opcedilhaões. A lista de opcedilhaões aceitas é fornecida em uma secedilhaão adiante.

 -- Funcedilhaão: mandelbrot (OPCEDILHAÕES)

     Cria um arquivo gráfico com a representacedilhaão do conjunto de Mandelbrot. O arquivo é criado no diretório atual ou no diretório do usuário, usando o formato gráfico XPM. O programa pode demorar muitos segundos para executar e concluir após isso, uma mensagem será mostrada com o nome do arquivo criado.

     Os pontos que não pertencem ao conjunto de Mandelbrot recebem diferentes cores, conforme o número de iteracedilhaões a funcedilhaão mandelbrot toma a seqüência iniciando naquele ponto para fora do círculo de convergência de raio 2. O número máximo de iteracedilhaões é escolhido com a opcedilhaão LEVELS; após aquele número de iteracedilhaões, se a seqüência estiver ainda dentro do círculo de convergência, o ponto será desenhado com a cor definida pela opcedilhaão COLOR.

     Todas as cores usadas para os pontos que não pertencem ao conjunto de Julia irão ter a mesma SATURATION e o mesmo VALUE, mas com diferentes ângulos de matizes distribuídos uniformemente entre HUE e (HUE + HUERANGE).

     OPCEDILHAÕES é uma seqüência facultativa de opcedilhaões. A lista de opcedilhaões aceitas é fornecida em uma secedilhaão adiante.

 -- Funcedilhaão: orbits (F, Y0, N1, N2, [X, X0, XF, XSTEP], ...opcedilhaões...);

     Desenha o diagrama de órbitas para uma família de sistemas dinâmicos discretos unidimensionais, com um parâmetro X; esse tipo de diagrama é usado para estudar as bifurcacedilhaões de um sistema discreto unidimensional.

     A funcedilhaão F(Y) define uma seqüência com um valor inicial de Y0, como no caso da funcedilhaão evolution, mas nesse caso a funcedilhaão F(Y) irá também depender de um parâmetro X que receberá valores no intervalo de X0 a XF com incrementos de XSTEP. Cada valor usado para o parâmetro X é mostrado sobre o eixo horizontal. O eixo vertical irá mostrar os valores  de N2 da seqüência Y(N1+1),..., Y(N1+N2+1) obtida após permitir que a seqüência produza N1 iteracões.

 -- Funcedilhaão: rk (EDO, var, inicio, domain)
 -- Funcedilhaão: rk ([EDO1,...,EDOm], [v1,...,vm], [inic1,...,inicm], domain)

     A primeira forma resolve numericamente uma equacedilhaão diferencial  de primeira ordem, e a segunda formaresolve um sistema de m dessas equacedilhaões, usando o método de Runge-Kutta de quarta ordem. var representa a variável dependente. EDO deve ser uma expressão que dependa somente da variável  independente e da variável dependente e defina a derivada da variável dependente com relacedilhaão à variável independente.

     A variável independente é especificada com domain, que deve ser uma lista dde quatro elementos como, por exemplo:

          [t, 0, 10, 0.1]

     O primeiro elemento da lista identifica a variável independente, o segundo e o terceiro elementos são os valores inicial e final para para aquela variável, e o último elemento escolhe o incremento que pode ser usado dentro daquele intervalo.

     Se M equacedilhaões estão sendo resolvidas, podem existir M variáveis dependentes V1, V2, ..., VM. Os valores iniciais para aquelas variáveis serão INIC1, INIC2, ..., INICM. Ainda pode ser apenas uma variável independente definida por domain, como no caso anterior. EDO1, ..., EDOM são as expressões que definem as derivadas de cada variável dependente em termos da variável independente. As variáveis que podem aparecer naquelas expressões são a variável independente e quaisquer outras variáveis dependentes. É importante fornecer as derivadas EDO1, ..., EDOM na lista exatamente na mesma ordem usada para variáveis dependentes; por exemplo, o terceiro elemento na lista irá ser interpretado com a derivada da terceira variável dependente.

     O programa tentará integrar as equacedilhaões a partir do valor inicial da variável independente até seu último valor, usando incrementos constantes. Se em algum passo uma das variáveis dependentes recebe um valor absoluto muito grande, a integracedilhaão será interrompida naquele ponto. O resultado será uma lista com tamtos elementos quantos forem o número de iteracedilhaões feitas. Cada elemento na lista de resultado é em si mesmo outra lista comh M+1 elementos: o valor da variável independente, seguido pelos valores das variáveis dependentes correspondentes àquele ponto.

 -- Funcedilhaão: staircase (F, Y0, N, ...opcedilhaões...);

     Desenha um diagrama em escada para a seqüência definida pela relacedilhaão de recorrência

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

     A interpretacedilhaão e os valores permitidos dos parâmetros de entrada são os mesmos que para a funcedilhaão evolution. Um diagrama em escada consiste de um gráfico da funcedilhaão F(Y), juntamente com a linha G(Y) = Y. Um segmento vertical é desenhado a partir das point (Y0, Y0) on that line until the point where it interseccedilhaões com a funcedilhaão F. A partir daquele ponto um segmento horizontal é desenhado até encontrar o ponto (Y1, Y1) sobre a linha, e o procedimento é repetido N vezes até que o ponto (YN, YN) é encontrado.

opcedilhaões

Cada opcedilhaão é uma lista de dois ou mais itens. O primeiro item é o nome da opcedilhaão, e os restantes compreendem os argumentos para a opcedilhaão.

As opcedilhaões aceitas pelas funcedilhaões evolution, evolution2d, staircase, orbits, ifs e chaosgame são as mesmas opcedilhaões para plot2d. Adicionalmente para aquelas opcedilhaões, orbits aceita a opcedilhaão extra PIXELS que escolhe o número máximo de pontos diferentes que irão ser representados na direcedilhaão vertical.

As seguintes opcedilhaões são aceitas pelas fucedilhaões julia e mandelbrot:

  * size recebe um ou dois argumentos. Se somente um argumento é fornecido, a largura e a altura do arquivo gráfico criado serão iguais a esse valor, em pixels. Se dois argumentos forem fornecidos, eles irão definir a largura e a altura. O valor padrão é 400 pixels para ambos a largura e altura. Se os dois valores não forem iguais, o conjunto aparecerá distorcido.

  * levels define o número máximo de iteracedilhaões, que também igual ao número de cores usados para pontos que não pertencem ao conjunto. O valor padrão é 12; grandes valoes significam maior quantidade de vezes de processamento.

  * huerange define o intervalo de ângulos de matiz usados para a matiz dos pontos não pertencentes ao conjunto. O valor padrão é 360, que significa que as cores expandir-se-ão em todo o intervalo de matizes. Valores maiores que 360, significarão intervalos repetidos de matizes, e valores negativos podem ser usados para fazer o ângulo de matiz decrescer como o número de iteracedilhaões também decresce.

  * hue conjuntos de matizes, em graus, da primeira cor usada para o ponto que não pertence ao conjunto. Seu valor padrão é 300 graus, que corresponde ao magenta; os valores para outras cores padrão são 0 para vermelho, 45 para laranja, 60 para amarelo, 120 para verde, 180 para ciano e 240 para o azul. Veja também a opcedilhaão HUERANGE.

  * saturation escolhe o valor da saturacedilhaão usada para pontos não pertencentes ao conjunto. A saturation deve estar entre 0 e 1. o valor padrão é 0.46.

  * value escolhe o valor das cores usadas para pontos não pertencentes ao conjunto. VALUE deve estar entre 0 e 1; Valores maiores, acarretam que as cores sejam mais brilhantes. O valor padrão é 0.96

  * color deve ser seguido por três parâmetros que definem o matiz, a saturacedilhaão e o valor, para a cor usada para representar os pontos do conjunto. O valor padrão é 0 para três parâmetos, que correspondem ao preto. Para uma explanacedilhaão do intervalo de valores permitidos, veja opcedilhaões HUE, SATURATION e VALUE.

  * center deve ser seguida por dois parâmetros reais, que fornecem as coordenadas, sobre o plano complexo, do ponto no centro da região mostrada. O valor padrão é 0 para ambas as coordenadas (a orígem).

  * radius escolhe o raio do maior círculo dentro da região quadrado que será mostrado. O valor padrão é 2.

  * filename fornece o nome do arquivo onde o gráfico resultante será gravado. A extensão .xpm será adicionada à aquele nome. Se o arquivo já existir, ele será substituído pelo arquivo gerado pela funcedilhaão. Os valores padrão são julia para o conjunto de Julia, e mandelbrot para o conjunto de Mandelbrot.

Exemplos

Representacedilhaão gráfica e diagrama em escada para a seqüência: 2, cos(2), cos(cos(2)),...

     (%i1) load("dynamics")$

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

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

Se seu sistema for lento, você deverá reduzir o número de iteracedilhaões nos seguintes exemplos. E se os pontos parecerem muito pequenos no seu monitor, você pode querer tentar um estilo diferente, tal como [STYLE,[POINTS,0.8]].

Diagrama de órbitas para o mapa quadrático, com um parâmetro A.

             x(n+1) = a + x(n)^2

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

Para ampliar a região em torno da bifurcacedilhaão menor perto de x = -1.25 use:

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

Evolucedilhaão de um sistemma bidimensional que leva a um 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], [x,y], [-0.5,0], 50000, [style,dots]);

E uma ampliacedilhaão de uma pequena regial naquele fractal:

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

Um gráfico do triângulo de Sierpinsky, obtido com o jogo do caos:

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

A samambaia de Barnsley, obtida com um Sistema de Funcedilhaões 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, [style,dots]);

Para criar um arquivo chamado dynamics9.xpm com uma representacedilhaão gráfica do conjunto de Mandelbrot, com 12 cores, use:

     mandelbrot([filename,"dynamics9"])$

e o conjunto de Julia para o número (-0.55 + i 0.6) pode ser obtida com:

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

o gráfico será gravado no arquivo dynamics10.xpm e irá mostrar a região de -0.3 a 0.3 na direcedilhaão x, e de 0.3 a 0.9 na direcedilhaão y. 36 cores srão usadas, iniciando com azul e terminando com amarelo.

Para resolver numericamente a equacedilhaão diferencial

               dx/dt = t - x^2

Com valor inicial x(t=0) = 1, no intervalo de t de 0 a 8 e com incrementos de 0.1 para t, use:

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

os resultados serão salvos na lista de resultados.

Para resolver numericamente o sistema:

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

para t entre 0 e 4, e com valores de -1.25 e 0.75 para x e y em 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])$