Fix bug #1848: taytorat leaks internal gensyms from multivar expansions
[maxima.git] / doc / info / pt / plotdf.texi
blob62f402b0df1bf5b2154e31c04b502b61b15f1335
1 @c english version 1.4
2 @menu
3 * Introdução a plotdf::
4 * Definições para plotdf::
5 @end menu
7 @node Introdução a plotdf, Definições para plotdf, plotdf, plotdf
8 @section Introdução a plotdf
10 A função @code{plotdf} cria um gráfico do campo de
11 direcções para uma Equação Diferencial
12 Ordinária (EDO) de primeira ordem, ou para um sistema de duas EDO's
13 autónomas, de primeira ordem.
15 Por tratar-se de um pacote adicional, para poder usá-lo deverá
16 primeiro carregá-lo com o comando @code{load("plotdf")}. Também é
17 necessário que Xmaxima esteja instalado, inclusivamente se executar o
18 Maxima desde outra interface diferente.
20 Para desenhar o campo de direcções de uma única EDO,
21 essa equação deverá escrever-se na forma seguinte:
22 @ifnottex
23 @example
24        dy
25        -- = F(x,y)
26        dx
27 @end example
28 @end ifnottex
29 @tex
30 $${{dy}\over{dx}} = F(x,y)$$
31 @end tex
33 e a função @var{F} será dada como argumento para o
34 comando @code{plotdf}. A variável independente tem que ser sempre
35 @var{x} e a variável dependente @var{y}. A essas duas variáveis
36 não poderá estar associado nenhum valor numérico.
38 Para desenhar o campo de direcções de um sistema
39 autónomo de duas EDO's, as duas equações devem ser
40 escritas na forma seguinte
41 @ifnottex
42 @example
43        dx             dy
44        -- = G(x,y)    -- = F(x,y) 
45        dt             dt
46 @end example
47 @end ifnottex
48 @tex
49 $${{dx}\over{dt}} = G(x,y) \qquad {{dy}\over{dt}} = F(x,y)$$
50 @end tex
52 e o argumento para o comando @code{plotdf} será uma lista com duas
53 expressões para as funções @var{F} e @var{G}.
55 Quando se trabalha com uma única equação,
56 @code{plotdf} assume implicitamente que @code{x=t} e @code{G(x,y)=1},
57 transformando a equação num sistema autónomo com duas
58 equações.
60 @node Definições para plotdf,  , Introdução a plotdf, plotdf
61 @section Definições para plotdf
63 @deffn {Function} plotdf (@var{dydx},...opções...)
64 @deffnx {Function} plotdf (@code{[}@var{dxdt},@var{dydt}@code{]},...opções...)
66 Desenha um campo de direcções em duas
67 dimensões @var{x} e @var{y}.
69 @var{dydx}, @var{dxdt} e @var{dydt} são expressões que dependem de
70 @var{x} e @var{y}. Para além dessas duas variáveis, as duas
71 expressões podem depender de um conjunto de parâmetros, com valores
72 numéricos que são dados por meio da opção
73 @code{parameters} (a sintaxe dessa opção explica-se mais
74 para a frente), ou com um intervalo de possíveis valores
75 definidos com a opção @var{sliders}.
77 Várias outras opções podem incluirem-se dentro do
78 comando, ou serem seleccionadas no menú.  Clicando num ponto do
79 gráfico faz com que seja desenhada a curva integral que passa por esse
80 ponto; o mesmo pode ser feito dando as coordenadas do ponto com a
81 opção @code{trajectory_at} dentro do comando plotdf. A
82 direcção de integração pode controlar-se
83 com a opção @code{direction}, que aceita valores de
84 @emph{forward}, @emph{backward} ou @emph{both}. O número de passos
85 realizados na integração numérica controla-se com a
86 opção @code{nsteps} e o incremento do tempo em cada
87 passo com a opção @code{tstep}. Usa-se o método de
88 Adams Moulton para fazer a integração numérica;
89 também é possível mudar para o método de Runge-Kutta
90 de quarta ordem com ajuste de passos.
92 @b{Menú da janela do gráfico:}
94 O menú da janela gráfica inclui as seguintes opções:
95 @emph{Zoom}, que permite mudar o comportamento do rato, de maneira que
96 servirá para fazer zoom na região do gráfico clicando com o
97 botão esquerdo. Cada clic alarga a imagem mantendo no centro dela o
98 ponto onde se clicou.  Mantendo carregada a tecla @key{Shift} enquanto
99 se faz clic, faz diminuir o tamanho. Para continuar a desenhar
100 trajectórias com um clic, selecciona-se a opção
101 @emph{Integrate} do menú.
103 A opção @emph{Config} do menú pode usar-se para mudar
104 a(s) EDO(S) e fazer alguns outros ajustes. Após ter feito alguma
105 alteração, deverá usar a opção
106 @emph{Replot} para activar as novas configurações.  Se
107 introduzir duas coordenadas no campo @emph{Trajectory at} do menú de
108 diálogo do @emph{Config}, e a seguir carregar na tecla @key{Enter},
109 será acrescentada mais uma curva integral.  Se seleccionar a
110 opção @emph{Replot}, só será apresentada a última
111 curva integral seleccionada.
113 Mantendo o botão direito carregado enquanto se desloca o cursor,
114 poderá arrastar o gráfico na horizontal e na vertical.  Outros
115 parâmetros, por exemplo, o número de passos, o valor inicial de
116 @var{t}, as coordenadas do centro e o raio, podem ser alterados no
117 sub-menú da opção @emph{Config}.
119 Com a opção @emph{Save}, pode imprimir-se o
120 gráfico numa impressora Postscript ou gravar uma cópia num ficheiro
121 Postscript. Para optar entre impressão ou gravação em
122 ficheiro, selecciona-se @emph{Print Options} na janela de diálogo de
123 @emph{Config}. Após ter preenchido os campos da janela de diálogo de
124 @emph{Save}, será necessário seleccionar a opção
125 @emph{Save} do primeiro menú para criar o ficheiro ou imprimir o
126 gráfico.
128 @b{Opções gráficas:}
130 A função @code{plotdf} admite varias
131 opções, cada uma sendo uma lista de duas ou mais
132 elementos. O primeiro elemento é o nome da opção, e o
133 resto estará formado pelos argumentos para essa opção.
135 A função @code{plotdf} reconhece as seguintes
136 opções:
138 @itemize @bullet
139 @item
140 @dfn{tstep} estabelece a amplitude dos
141 incrementos da variável independente @var{t}, utilizados para calcular
142 as curvas integrais. Se for dada só uma expressão @var{dydx}, a
143 variável @var{x} será directamente proporcional a @var{t}.
144 O valor por omissão é  0.1.
146 @item
147 @dfn{nsteps} estabelece o número de passos de
148 comprimento @code{tstep} que se utilizarão na variável independente
149 para calcular a curva integral.
150 O valor por omissão é 100.
152 @item
153 @dfn{direction} estabelece a
154 direcção da variável independente que será seguida
155 para calcular uma curva integral.  Os valores possí são:
156 @code{forward}, para fazer que a variável independente aumente
157 @code{nsteps} vezes, com incrementos @code{tstep}; @code{backward}, para
158 fazer que a variável independente diminua; @code{both}, para estender
159 a curva integral @code{nsteps} passos para a frente e @code{nsteps}
160 passos para atrás.  As palavras @code{right} e @code{left} podem serem
161 usadas como sinónimos de @code{forward} e @code{backward}.
162 O valor por omissão é @code{both}.
164 @item
165 @dfn{tinitial} estabelece o valor inicial da
166 variável @var{t} utilizado para calcular curvas integrais. Já que as
167 equações diferenciais são autónomas, esta
168 opção só aparecerá nos gráficos das curvas em
169 função de @var{t}.
170 O valor por omissão é 0.
172 @item
173 @dfn{versus_t} utiliza-se para criar uma segunda
174 janela gráfica, com o gráfico de uma curva integral, como duas
175 funções @var{x}, @var{y}, de variável independente
176 @var{t}. Se for dado a @code{versus_t} qualquer valor diferente de 0,
177 mostrar-se-á a segunda janela gráfica, que inclui outro menú,
178 similar ao da janela principal.
179 O valor por omissão é 0.
181 @item
182 @dfn{trajectory_at} estabelece as coordenadas
183 @var{xinitial} e @var{yinitial} para o ponto inicial da curva integral.
184 Não tem atribuído nenhum valor por omissão.
186 @item
187 @dfn{parameters} estabelece uma lista de
188 parâmetros, junto com os seus valores numéricos, que são
189 utilizados na definição da equação
190 diferencial. Os nomes dos parâmetros e os seus valores devem
191 escrever-se em formato de cadeia de caracteres como uma sequência de
192 pares @code{nome=valor} separados por vírgulas.
194 @item
195 @dfn{sliders} estabelece uma lista de
196 parâmetros que poderão ser alterados interactivamente usando barras
197 com sliders, assim como os intervalos de variação dos
198 ditos parâmetros.  Os nomes dos parâmetros e os seus intervalos
199 devem escrever-se em formato de cadeia de caracteres como uma
200 sequência de pares @code{nome=min:max} separados por
201 vírgulas.
203 @item
204 @dfn{xfun} estabelece uma cadeia de caracteres
205 com funções de @var{x} separadas por ponto e
206 vírgula para ser representadas por cima do campo de
207 direcções. Essas funções serão
208 interpretadas por Tcl, e não por Maxima.
210 @item
211 @dfn{xradius} é metade do comprimento do
212 intervalo de valores a representar na direcção x.
213 O valor por omissão é 10.
215 @item
216 @dfn{yradius} é metade do comprimento do
217 intervalo de valores a representar na direcção y.
218 O valor por omissão é 10.
220 @item
221 @dfn{xcenter} é a coordenada x do ponto
222 situado no centro do gráfico.
223 O valor por omissão é 0.
225 @item
226 @dfn{ycenter} é a coordenada y do ponto
227 situado no centro do gráfico.
228 O valor por omissão é 0.
230 @item
231 @dfn{width} estabelece a largura da janela gráfica em
232 pixels.
233 O valor por omissão é 500.
235 @item
236 @dfn{height} estabelece a altura da janela gráfica em
237 pixels.
238 O valor por omissão é 500.
240 @end itemize
242 @b{Exemplos:}
244 NOTA: Em alguns casos, dependendo da interface usada para executar o
245 Maxima, as funções que usam @code{openmath}, em
246 particular @code{plotdf}, podem desencadear um bug se terminarem em
247 ponto e vírgula, e não com o símbolo de
248 dólar. Para evitar problemas, usaremos o símbolo de
249 dóla nos exemplos a seguir.
251 @itemize @bullet
252 @item
253 Para mostrar o campo de direcções da
254 equação diferencial @math{y' = exp(-x) + y} e a
255 solução que passa por @math{(2, -0.1)}:
256 @example
257 (%i1) load("plotdf")$
259 (%i2) plotdf(exp(-x)+y,[trajectory_at,2,-0.1]);
260 @end example
262 @ifnotinfo
263 @figure{plotdf1}
264 @end ifnotinfo
266 @item
267 Para mostrar o campo de direcções da
268 equação @math{diff(y,x) = x - y^2} e a
269 solução com condição inicial @math{y(-1)
270 = 3}, pode utilizar-se o comando:
271 @example
272 (%i3) plotdf(x-y^2,[xfun,"sqrt(x);-sqrt(x)"],
273           [trajectory_at,-1,3], [direction,forward],
274           [yradius,5],[xcenter,6]);
275 @end example
276 O gráfico também mostra a função @math{y = sqrt(x)}.
278 @ifnotinfo
279 @figure{plotdf2}
280 @end ifnotinfo
282 @item
283 O exemplo seguinte mostra o campo de direcções de um
284 oscilador harmónico, definido pelas equações
285 @math{dx/dt = y} e @math{dy/dt = -k*x/m}, e a curva integral que passa
286 por @math{(x,y) = (6,0)}, com uma barra de slider que permitirá mudar
287 o valor de @math{m} interactivamente (@math{k} permanecerá fixo em 2):
288 @example
289 (%i4) plotdf([y,-k*x/m],[parameters,"m=2,k=2"],
290             [sliders,"m=1:5"], [trajectory_at,6,0]);
291 @end example
293 @ifnotinfo
294 @figure{plotdf3}
295 @end ifnotinfo
297 @item
298 Para representar o campo de direcções da
299 equação de Duffing, @math{m*x''+c*x'+k*x+b*x^3 = 0},
300 introduz-se a variável @math{y=x'} e faz-se:
301 @example
302 (%i5) plotdf([y,-(k*x + c*y + b*x^3)/m],
303               [parameters,"k=-1,m=1.0,c=0,b=1"],
304               [sliders,"k=-2:2,m=-1:1"],[tstep,0.1]);
305 @end example
307 @ifnotinfo
308 @figure{plotdf4}
309 @end ifnotinfo
311 @item
312 O campo de direcções dum pêndulo amortecido, incluindo
313 a solução para condições iniciales
314 dadas, com uma barra de slider que pode usar-se para mudar o valor da
315 masa, @math{m}, e com o gráfico das duas variáveis de estado em
316 função do tempo:
318 @example
319 (%i6) plotdf([y,-g*sin(x)/l - b*y/m/l],
320          [parameters,"g=9.8,l=0.5,m=0.3,b=0.05"],
321          [trajectory_at,1.05,-9],[tstep,0.01],
322          [xradius,6],[yradius,14],
323          [xcenter,-4],[direction,forward],[nsteps,300],
324          [sliders,"m=0.1:1"], [versus_t,1]);
325 @end example
327 @ifnotinfo
328 @figure{plotdf5}
329 @figure{plotdf6}
330 @end ifnotinfo
332 @end itemize
334 @end deffn