3 * Introdução a plotdf::
4 * Definições para plotdf::
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:
30 $${{dy}\over{dx}} = F(x,y)$$
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
44 -- = G(x,y) -- = F(x,y)
49 $${{dx}\over{dt}} = G(x,y) \qquad {{dy}\over{dt}} = F(x,y)$$
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
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
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
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.
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.
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}.
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
170 O valor por omissão é 0.
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.
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.
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.
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
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.
211 @dfn{xradius} é metade do comprimento do
212 intervalo de valores a representar na direcção x.
213 O valor por omissão é 10.
216 @dfn{yradius} é metade do comprimento do
217 intervalo de valores a representar na direcção y.
218 O valor por omissão é 10.
221 @dfn{xcenter} é a coordenada x do ponto
222 situado no centro do gráfico.
223 O valor por omissão é 0.
226 @dfn{ycenter} é a coordenada y do ponto
227 situado no centro do gráfico.
228 O valor por omissão é 0.
231 @dfn{width} estabelece a largura da janela gráfica em
233 O valor por omissão é 500.
236 @dfn{height} estabelece a altura da janela gráfica em
238 O valor por omissão é 500.
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.
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)}:
257 (%i1) load("plotdf")$
259 (%i2) plotdf(exp(-x)+y,[trajectory_at,2,-0.1]);
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:
272 (%i3) plotdf(x-y^2,[xfun,"sqrt(x);-sqrt(x)"],
273 [trajectory_at,-1,3], [direction,forward],
274 [yradius,5],[xcenter,6]);
276 O gráfico também mostra a função @math{y = sqrt(x)}.
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):
289 (%i4) plotdf([y,-k*x/m],[parameters,"m=2,k=2"],
290 [sliders,"m=1:5"], [trajectory_at,6,0]);
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:
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]);
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
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]);