Update ChangeLog
[maxima.git] / doc / info / pt / dynamics.texi
blob7665fc35dee44ef9db8e47d3e55ff8fe1b5227f5
1 @c Language: Portuguese
2 @c Source: dynamics.texi (en) 1.10
3 @menu
4 * O pacote dynamics::
5 * Análise gráfica de sistemas dinâmicos discretos::
6 * Visualização usando VTK::
7 @end menu
9 @node O pacote dynamics, Análise gráfica de sistemas dinâmicos discretos, dynamics, dynamics
10 @section O pacote dynamics
12 O pacote adicional @code{dynamics} inclui várias
13 funções para criar diversas
14 representações gráficas de sistemas dinâmicos e
15 fractais, para além duma implementaçõ do método
16 numérico de Runge-Kutta de quarta ordem, para resolver sistemas de
17 equações diferenciais.
19 Para usar as funções neste pacote será necessário
20 primeiro que tudo carregá-lo com @code{load("dynamics")}; as
21 funções que criam gráficos precisam que o Xmaxima
22 esteja instalado.
24 @node Análise gráfica de sistemas dinâmicos discretos, Visualização usando VTK, O pacote dynamics, dynamics
25 @section Análise gráfica de sistemas dinâmicos discretos
27 @deffn {Função} chaosgame (@code{[[}@var{x1}, @var{y1}@code{]}...@code{[}@var{xm}, @var{ym}@code{]]}, @code{[}@var{x0}, @var{y0}@code{]}, @var{b}, @var{n}, ...opções...);
29 Usa o método designado de @emph{jogo do caos}, para produzir fractais:
30 desenha-se um ponto inicial (@var{x0}, @var{y0}) e logo escolhe-se
31 aleatoriamente um dos @var{m} pontos @code{[}@var{x1},
32 @var{y1}@code{]}...@code{[}@var{xm}, @var{ym}@code{]}. A seguir,
33 desenha-se um novo ponto que estará no segmento entre o último ponto
34 desenhado e o ponto que se acabou de seleccionar aleatoriamente, a uma
35 distância do ponto seleccionado que será @var{b} vezes o comprimento
36 do segmento. O processo repete-se @var{n} vezes.
38 @end deffn
40 @deffn {Função} evolution (@var{F}, @var{y0}, @var{n},...opções...);
42 Desenha @var{n+1} pontos num gráfico bidimensional (série de tempo),
43 onde as coordenadas horizontais dos pontos são os números inteiros
44 0, 1, 2, ..., @var{n}, e as coordenadas verticais são os valores
45 @var{y(n)} correspondentes, obtidos a partir da relação
46 de recorrência
47 @ifnottex
48 @example
49         y(n+1) = F(y(n))
50 @end example
51 @end ifnottex
52 @tex
53 $$y_{n+1} = F(y_n)$$
54 @end tex
56 Com valor inicial @var{y(0)} igual a @var{y0}. @var{F} deverá ser uma
57 expressão que dependa unicamente da variável @var{y} (e não de @var{n}),
58 @var{y0} deverá ser um número real e @var{n} um número inteiro positivo.
60 @end deffn
62 @deffn {Função} evolution2d (@code{[}@var{F}, @var{G}@code{]}, @code{[}@var{x0}, @var{y0}@code{]}, @var{n}, ...opções...);
64 Mostra, num gráfico bidimensional, os primeiros @var{n+1} pontos da
65 sucessão definida a partir do sistema dinâmico discreto com
66 relações de recorrência:
67 @ifnottex 
68 @example
69         x(n+1) = F(x(n), y(n))    y(n+1) = G(x(n), y(n))
70 @end example
71 @end ifnottex
72 @tex
73 $$\cases{x_{n+1} = F(x_n, y_n) &\cr y_{n+1} = G(x_n, y_n)}$$
74 @end tex
76 Com valores iniciais @var{x0} e @var{y0}. @var{F} e @var{G} deverão
77 ser duas expressões que dependam unicamente de @var{x} e @var{y}.
79 @end deffn
81 @deffn {Função} ifs (@code{[}@var{r1},...,@var{rm}@code{]},@code{[}@var{A1},...,@var{Am}@code{]}, @code{[[}@var{x1},@var{y1}@code{]}...@code{[}@var{xm}, @var{ym}@code{]]}, @code{[}@var{x0},@var{y0}@code{]},
82 @var{n}, ...opções...);
84 Usa o método do Sistema de Funções Iteradas (IFS, em
85 inglês @emph{Iterated Function System}). Esse método é semelhante
86 ao método descrito na função @code{chaosgame}, mas em
87 vez de aproximar o último ponto para ponto seleccionado
88 aleatoriamente, as duas coordenadas do último ponto multiplicam-se por
89 uma matriz 2 por 2 @var{Ai} correspondente ao ponto que tenha sido
90 escolhido aleatoriamente.
92 A selecção aleatória de um dos @var{m} pontos
93 atractivos pode se realizada com uma função de
94 probabilidade não uniforme, definida com os pesos
95 @var{r1},...,@var{rm}. Pesos esses que deverão ser dados em forma
96 acumulada; por exemplo, se quiser usar 3 pontos com probabilidades
97 0.2, 0.5 e 0.3, os pesos @var{r1}, @var{r2} e @var{r3} poderiam ser 2, 7
98 e 10, ou qualquer outro grupo de números que estejam na mesma
99 proporção.
101 @end deffn
104 @deffn {Função} orbits (@var{F}, @var{y0}, @var{n1}, @var{n2}, [@var{x}, @var{x0}, @var{xf}, @var{xstep}], ...opções...);
106 Desenha o diagrama de órbitas duma família de sistemas
107 dinâmicos discretos unidimensionais, com um parâmetro @var{x}; esse
108 tipo de diagrama usa-se para mostrar as bifurcações dum
109 sistema discreto unidimensional.
111 A função @var{F(y)} define uma sequência que
112 começa com um valor inicial @var{y0}, igual que no caso da
113 função @code{evolution}, mas neste caso a
114 função também dependerá do parâmetro @var{x}, o
115 qual terá valores compreendidos no intervalo de @var{x0} a @var{xf},
116 com incrementos @var{xstep}. Cada valor usado para o parâmetro @var{x}
117 apresenta-se no eixo horizontal. No eixo vertical apresentam-se @var{n2}
118 valores da sucessão @var{y(n1+1)},..., @var{y(n1+n2+1)}, obtidos
119 após deixá-la evoluir durante @var{n1} iterações
120 iniciais.
122 @end deffn
124 @deffn {Função} rk (EDO, var, inicial, dominio)
125 @deffnx {Função} rk ([EDO1,...,EDOm], [v1,...,vm], [inic1,...,inicm], domínio)
127 A primeira forma usa-se para resolver numericamente uma
128 equação diferencial ordinária de primeira ordem (EDO),
129 e a segunda forma resolve numericamente um sistema de @var{m} dessas
130 equações, usando o método de Runge-Kutta de quarta
131 ordem. @var{var} representa a variável dependente.  EDO deverá ser
132 uma expressão que dependa unicamente das variáveis independente e
133 dependente, e define a derivada da variável dependente em
134 função da variável independente.
136 A variável independente representa-se com @var{domínio},
137 que deverá ser uma lista com quatro elementos, como, por exemplo:
138 @example
139 [t, 0, 10, 0.1]
140 @end example
141 o primeiro elemento da lista identifica a variável independente, os
142 segundo e terceiro elementos são os valores inicial e final para essa
143 variável, e o último elemento dá o valor dos incrementos que
144 deverão ser usados dentro desse intervalo.
146 Se se estiverem a resolver @var{m} equações, deverá
147 haver @var{m} variáveis dependentes @var{v1}, @var{v2}, ...,
148 @var{vm}. Os valores iniciais para essas variáveis serão
149 @var{inic1}, @var{inic2}, ..., @var{inicm}. Continuará existindo
150 apenas uma variável independente, definida pela lista @var{domain},
151 tal como no caso anterior. @var{EDO1}, ..., @var{EDOm} são as
152 expressões que definem as derivadas de cada uma das variáveis
153 dependentes, em função da variável independente. As
154 únicas variáveis que podem aparecer em cada uma dessas expressões
155 são a variável independente e qualquer uma das variáveis
156 dependentes. É importante que as derivadas @var{EDO1}, ..., @var{EDOm}
157 sejam colocadas na lista na mesma ordem em que forem agrupadas as
158 variáveis dependentes; por exemplo, o terceiro elemento da lista
159 será interpretado como a derivada da terceira variável dependente.
161 O programa tenta integrar as equações desde o valor
162 inicial da variável independente, até o valor final, usando
163 incrementos fixos. Se em algum passo uma das variáveis dependentes
164 atingir um valor absoluto muito elevado, a integração
165 será interrompida nesse ponto. O resultado será uma lista com um
166 número de elementos igual ao número de iterações
167 realizadas. Cada elemento na lista de resultados é também uma lista
168 com @var{m}+1 elementos: o valor da variável independente, seguido dos
169 valores das variáveis dependentes nesse ponto.
171 @end deffn
173 @deffn {Função} staircase (@var{F}, @var{y0}, @var{n}, ...opções...);
175 Desenha um diagrama de degraus (ou diagrama de teia de aranha) para a
176 sucessão definida pela equação de recorrência
177 @ifnottex
178 @example
179         y(n+1) = F(y(n))
180 @end example
181 @end ifnottex
182 @tex
183 $$y_{n+1} = F(y_n)$$
184 @end tex
186 A interpretação e valores permitidos dos parâmetros de
187 entrada é igual que para a função @code{evolution}. Um
188 diagrama de degraus consiste num gráfico da função
189 @var{F(y)}, junto com a recta @var{G(y)} @code{=}
190 @var{y}. Começa-se por desenhar um segmento vertical desde
191 o ponto (@var{y0}, @var{y0}) na recta, até o ponto de
192 intersecção com a função @var{F}. A
193 seguir, desde esse ponto desenha-se um segmento horizontal até o ponto
194 de intersecção com a recta, (@var{y1}, @var{y1}); o
195 processo repete-se @var{n} vezes até alcançar o ponto
196 (@var{yn}, @var{yn}).
198 @end deffn
200 @b{Opções}
202 Cada opção é uma lista com dois ou mais elementos. O
203 primeiro elemento na lista é o nome da opção e os
204 restantes são os argumentos para essa opção.
206 As opções aceites pelas funções
207 evolution, evolution2, staircase, orbits, ifs e chaosgame são as
208 seguintes:
210 @itemize @bullet
211 @item
212 @dfn{domain} especifica os valores mínimo y máximo da
213 variável independente para o gráfico da função @var{F}
214 representada por @code{staircase}.
216 @item
217 @dfn{pointsize} define o raio de cada ponto desenhado, em unidades de
218 pontos. O valor por omissão é 1.
220 @item
221 @dfn{xaxislabel} é o nome que será dado ao eixo horizontal.
223 @item
224 @dfn{xcenter} é a coordenada x do ponto que deverá aparecer no
225 centro do gráfico. Esta opção não é usada pela
226 função @code{orbits}.
228 @item
229 @dfn{xradius} é metade do comprimento do intervalo de valores de x que
230 serão representados. Esta opção não é usada pela
231 função @code{orbits}.
233 @item
234 @dfn{yaxislabel} é o nome que será dado ao eixo vertical.
236 @item
237 @dfn{ycenter} é a coordenada y do ponto que deverá aparecer no
238 centro do gráfico.
240 @item
241 @dfn{yradius} é metade do comprimento do intervalo de valores de y que
242 serão representados.
244 @end itemize
246 As opções aceites pelos programas juli
247 @b{Exemplos}
249 Representação gráfica e diagrama de degraus da sequência:
250 2, cos(2), cos(cos(2)),...
252 @example
253 (%i1) load("dynamics")$
254 (%i2) evolution(cos(y), 2, 11, [yaxislabel, "y"], [xaxislabel,"n"]);
255 (%i3) staircase(cos(y), 1, 11, [domain, 0, 1.2]);
256 @end example
258 @ifnotinfo
259 @figure{dynamics1}
260 @figure{dynamics2}
261 @end ifnotinfo
263 Se o seu processador for lento, terá que reduzir o número de
264 iterações usado nos exemplos seguintes. E o valor de
265 @var{pointsize} que dá os melhores resultados dependerá do monitor e
266 da resolução usada. Terá que experimentar com
267 diferentes valores.
269 Diagrama de órbitas para o mapa quadrático
270 @ifnottex
271 @example
272         y(n+1) = x + y(n)^2
273 @end example
274 @end ifnottex
275 @tex
276 $$y_{n+1} = x + y_n^2$$
277 @end tex
279 @example
280 (%i4) orbits(y^2+x, 0, 50, 200, [x, -2, 0.25, 0.01], [pointsize, 0.9]);
281 @end example
283 @ifnotinfo
284 @figure{dynamics3}
285 @end ifnotinfo
287 Para ampliar a região à volta da bifurcação na parte de
288 baixo, perto de x @code{=} -1.25, use o comando:
289 @example
290 (%i5) orbits(x+y^2, 0, 100, 400, [x,-1,-1.53,-0.001], [pointsize,0.9],
291              [ycenter,-1.2], [yradius,0.4]);
292 @end example
294 @ifnotinfo
295 @figure{dynamics4}
296 @end ifnotinfo
298 Evolução dum sistema em duas dimensões, que conduz a
299 um fractal:
301 @example
302 (%i6) f: 0.6*x*(1+2*x)+0.8*y*(x-1)-y^2-0.9$
303 (%i7) g: 0.1*x*(1-6*x+4*y)+0.1*y*(1+9*y)-0.4$
304 (%i8) evolution2d([f,g],[-0.5,0],50000,[pointsize,0.7]);
305 @end example
307 @ifnotinfo
308 @figure{dynamics5}
309 @end ifnotinfo
311 E uma ampliação de uma pequena região no fractal:
313 @example
314 (%i9) evolution2d([f,g],[-0.5,0],300000,[pointsize,0.7], [xcenter,-0.7],
315                   [ycenter,-0.3],[xradius,0.1],[yradius,0.1]);
316 @end example
318 @ifnotinfo
319 @figure{dynamics6}
320 @end ifnotinfo
322 Um gráfico do triângulo de Sierpinsky, obtido com o jogo do caos:
324 @example
325 (%i9) chaosgame([[0, 0], [1, 0], [0.5, sqrt(3)/2]], [0.1, 0.1], 1/2,
326                  30000, [pointsize,0.7]);
327 @end example
329 @ifnotinfo
330 @figure{dynamics7}
331 @end ifnotinfo
333 O feto de Barnsley, obtido com o Sistema de Funções
334 Iteradas:
336 @example
337 (%i10) a1: matrix([0.85,0.04],[-0.04,0.85])$
338 (%i11) a2: matrix([0.2,-0.26],[0.23,0.22])$
339 (%i12) a3: matrix([-0.15,0.28],[0.26,0.24])$
340 (%i13) a4: matrix([0,0],[0,0.16])$
341 (%i14) p1: [0,1.6]$
342 (%i15) p2: [0,1.6]$
343 (%i16) p3: [0,0.44]$
344 (%i17) p4: [0,0]$
345 (%i18) w: [85,92,99,100]$
346 (%i19) ifs(w,[a1,a2,a3,a4],[p1,p2,p3,p4],[5,0],50000,[pointsize,0.9]);
347 @end example
349 @ifnotinfo
350 @figure{dynamics8}
351 @end ifnotinfo
353 Para resolver numericamente a equação diferencial
355 @ifnottex
356 @example
357           dx/dt = t - x^2
358 @end example
359 @end ifnottex
360 @tex
361 $${{dx}\over{dt}} = t - x^2$$ 
362 @end tex
364 Com valor inicial x(t=0) = 1, no intervalo de t desde 0 até 8, e
365 com incrementos de 0.1, usa-se:
367 @example
368 (%i20) resultados: rk(t-x^2,x,1,[t,0,8,0.1])$
369 @end example
371 os resultados ficarão armazenados na lista resultados.
373 Para resolver numericamente o sistema:
375 @ifnottex
376 @example
377         dx/dt = 4-x^2-4*y^2     dy/dt = y^2-x^2+1
378 @end example
379 @end ifnottex
380 @tex
381 $$\cases{{\displaystyle{dx}\over\displaystyle{dt}} = 4-x^2-4y^2 &\cr &\cr {\displaystyle{dy}\over\displaystyle{dt}} = y^2-x^2+1}$$
382 @end tex
384 para t entre 0 e 4, com valores iniciais -1.25 e 0.75 para (x, y) em t=0:
386 @example
387 (%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])$
388 @end example
390 @node Visualização usando VTK,  , Análise gráfica de sistemas dinâmicos discretos, dynamics
391 @section Visualização usando VTK
393 A função scene cria imagens a três dimensões e animações, usando o
394 software @emph{Visualization ToolKit} (VTK). Para poder usar essa função
395 é necessário ter Xmaxima e VTK instalados no sistema (incluindo a
396 libraria para utilizar VTK desde TCL, que pode vir num pacote separado
397 em alguns sistemas).