File: plotdf.texi

package info (click to toggle)
maxima 5.21.1-2squeeze
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 94,928 kB
  • ctags: 43,849
  • sloc: lisp: 298,974; fortran: 14,666; perl: 14,325; tcl: 10,494; sh: 4,052; makefile: 2,975; ansic: 471; awk: 24; sed: 7
file content (333 lines) | stat: -rw-r--r-- 12,871 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
@c english version 1.4
@menu
* Introdu@value{cedilha}@~ao a plotdf::
* Defini@value{cedilha}@~oes para plotdf::
@end menu

@node Introdu@value{cedilha}@~ao a plotdf, Defini@value{cedilha}@~oes para plotdf, plotdf, plotdf
@section Introdu@value{cedilha}@~ao a plotdf

A fun@value{cedilha}@~ao @code{plotdf} cria um gr@'afico do campo de
direc@value{cedilha}@~oes para uma Equa@value{cedilha}@~ao Diferencial
Ordin@'aria (EDO) de primeira ordem, ou para um sistema de duas EDO's
aut@'onomas, de primeira ordem.

Por tratar-se de um pacote adicional, para poder us@'a-lo dever@'a
primeiro carreg@'a-lo com o comando @code{load("plotdf")}. Tamb@'em @'e
necess@'ario que Xmaxima esteja instalado, inclusivamente se executar o
Maxima desde outra interface diferente.

Para desenhar o campo de direc@value{cedilha}@~oes de uma @'unica EDO,
essa equa@value{cedilha}@~ao dever@'a escrever-se na forma seguinte:
@ifnottex
@example
       dy
       -- = F(x,y)
       dx
@end example
@end ifnottex
@tex
$${{dy}\over{dx}} = F(x,y)$$
@end tex

e a fun@value{cedilha}@~ao @var{F} ser@'a dada como argumento para o
comando @code{plotdf}. A vari@'avel independente tem que ser sempre
@var{x} e a vari@'avel dependente @var{y}. A essas duas vari@'aveis
n@~ao poder@'a estar associado nenhum valor num@'erico.

Para desenhar o campo de direc@value{cedilha}@~oes de um sistema
aut@'onomo de duas EDO's, as duas equa@value{cedilha}@~oes devem ser
escritas na forma seguinte
@ifnottex
@example
       dx             dy
       -- = G(x,y)    -- = F(x,y) 
       dt             dt
@end example
@end ifnottex
@tex
$${{dx}\over{dt}} = G(x,y) \qquad {{dy}\over{dt}} = F(x,y)$$
@end tex

e o argumento para o comando @code{plotdf} ser@'a uma lista com duas
express@~oes para as fun@value{cedilha}@~oes @var{F} e @var{G}.

Quando se trabalha com uma @'unica equa@value{cedilha}@~ao,
@code{plotdf} assume implicitamente que @code{x=t} e @code{G(x,y)=1},
transformando a equa@value{cedilha}@~ao num sistema aut@'onomo com duas
equa@value{cedilha}@~oes.

@node Defini@value{cedilha}@~oes para plotdf,  , Introdu@value{cedilha}@~ao a plotdf, plotdf
@section Defini@value{cedilha}@~oes para plotdf

@deffn {Function} plotdf (@var{dydx},...op@value{cedilha}@~oes...)
@deffnx {Function} plotdf (@code{[}@var{dxdt},@var{dydt}@code{]},...op@value{cedilha}@~oes...)

Desenha um campo de direc@value{cedilha}@~oes em duas
dimens@~oes @var{x} e @var{y}.

@var{dydx}, @var{dxdt} e @var{dydt} s@~ao express@~oes que dependem de
@var{x} e @var{y}. Para al@'em dessas duas vari@'aveis, as duas
express@~oes podem depender de um conjunto de par@^ametros, com valores
num@'ericos que s@~ao dados por meio da op@value{cedilha}@~ao
@code{parameters} (a sintaxe dessa op@value{cedilha}@~ao explica-se mais
para a frente), ou com um intervalo de poss@'{@dotless{i}}veis valores
definidos com a op@value{cedilha}@~ao @var{sliders}.

V@'arias outras op@value{cedilha}@~oes podem incluirem-se dentro do
comando, ou serem seleccionadas no men@'u.  Clicando num ponto do
gr@'afico faz com que seja desenhada a curva integral que passa por esse
ponto; o mesmo pode ser feito dando as coordenadas do ponto com a
op@value{cedilha}@~ao @code{trajectory_at} dentro do comando plotdf. A
direc@value{cedilha}@~ao de integra@value{cedilha}@~ao pode controlar-se
com a op@value{cedilha}@~ao @code{direction}, que aceita valores de
@emph{forward}, @emph{backward} ou @emph{both}. O n@'umero de passos
realizados na integra@value{cedilha}@~ao num@'erica controla-se com a
op@value{cedilha}@~ao @code{nsteps} e o incremento do tempo em cada
passo com a op@value{cedilha}@~ao @code{tstep}. Usa-se o m@'etodo de
Adams Moulton para fazer a integra@value{cedilha}@~ao num@'erica;
tamb@'em @'e poss@'{@dotless{i}}vel mudar para o m@'etodo de Runge-Kutta
de quarta ordem com ajuste de passos.

@b{Men@'u da janela do gr@'afico:}

O men@'u da janela gr@'afica inclui as seguintes op@value{cedilha}@~oes:
@emph{Zoom}, que permite mudar o comportamento do rato, de maneira que
servir@'a para fazer zoom na regi@~ao do gr@'afico clicando com o
bot@~ao esquerdo. Cada clic alarga a imagem mantendo no centro dela o
ponto onde se clicou.  Mantendo carregada a tecla @key{Shift} enquanto
se faz clic, faz diminuir o tamanho. Para continuar a desenhar
traject@'orias com um clic, selecciona-se a op@value{cedilha}@~ao
@emph{Integrate} do men@'u.

A op@value{cedilha}@~ao @emph{Config} do men@'u pode usar-se para mudar
a(s) EDO(S) e fazer alguns outros ajustes. Ap@'os ter feito alguma
altera@value{cedilha}@~ao, dever@'a usar a op@value{cedilha}@~ao
@emph{Replot} para activar as novas configura@value{cedilha}@~oes.  Se
introduzir duas coordenadas no campo @emph{Trajectory at} do men@'u de
di@'alogo do @emph{Config}, e a seguir carregar na tecla @key{Enter},
ser@'a acrescentada mais uma curva integral.  Se seleccionar a
op@value{cedilha}@~ao @emph{Replot}, s@'o ser@'a apresentada a @'ultima
curva integral seleccionada.

Mantendo o bot@~ao direito carregado enquanto se desloca o cursor,
poder@'a arrastar o gr@'afico na horizontal e na vertical.  Outros
par@^ametros, por exemplo, o n@'umero de passos, o valor inicial de
@var{t}, as coordenadas do centro e o raio, podem ser alterados no
sub-men@'u da op@value{cedilha}@~ao @emph{Config}.

Com a op@value{cedilha}@~ao @emph{Save}, pode imprimir-se o
gr@'afico numa impressora Postscript ou gravar uma c@'opia num ficheiro
Postscript. Para optar entre impress@~ao ou grava@value{cedilha}@~ao em
ficheiro, selecciona-se @emph{Print Options} na janela de di@'alogo de
@emph{Config}. Ap@'os ter preenchido os campos da janela de di@'alogo de
@emph{Save}, ser@'a necess@'ario seleccionar a op@value{cedilha}@~ao
@emph{Save} do primeiro men@'u para criar o ficheiro ou imprimir o
gr@'afico.

@b{Op@value{cedilha}@~oes gr@'aficas:}

A fun@value{cedilha}@~ao @code{plotdf} admite varias
op@value{cedilha}@~oes, cada uma sendo uma lista de duas ou mais
elementos. O primeiro elemento @'e o nome da op@value{cedilha}@~ao, e o
resto estar@'a formado pelos argumentos para essa op@value{cedilha}@~ao.

A fun@value{cedilha}@~ao @code{plotdf} reconhece as seguintes
op@value{cedilha}@~oes:

@itemize @bullet
@item
@dfn{tstep} estabelece a amplitude dos
incrementos da vari@'avel independente @var{t}, utilizados para calcular
as curvas integrais. Se for dada s@'o uma express@~ao @var{dydx}, a
vari@'avel @var{x} ser@'a directamente proporcional a @var{t}.
O valor por omiss@~ao @'e  0.1.

@item
@dfn{nsteps} estabelece o n@'umero de passos de
comprimento @code{tstep} que se utilizar@~ao na vari@'avel independente
para calcular a curva integral.
O valor por omiss@~ao @'e 100.

@item
@dfn{direction} estabelece a
direc@value{cedilha}@~ao da vari@'avel independente que ser@'a seguida
para calcular uma curva integral.  Os valores poss@'{@dotless{i}} s@~ao:
@code{forward}, para fazer que a vari@'avel independente aumente
@code{nsteps} vezes, com incrementos @code{tstep}; @code{backward}, para
fazer que a vari@'avel independente diminua; @code{both}, para estender
a curva integral @code{nsteps} passos para a frente e @code{nsteps}
passos para atr@'as.  As palavras @code{right} e @code{left} podem serem
usadas como sin@'onimos de @code{forward} e @code{backward}.
O valor por omiss@~ao @'e @code{both}.

@item
@dfn{tinitial} estabelece o valor inicial da
vari@'avel @var{t} utilizado para calcular curvas integrais. J@'a que as
equa@value{cedilha}@~oes diferenciais s@~ao aut@'onomas, esta
op@value{cedilha}@~ao s@'o aparecer@'a nos gr@'aficos das curvas em
fun@value{cedilha}@~ao de @var{t}.
O valor por omiss@~ao @'e 0.

@item
@dfn{versus_t} utiliza-se para criar uma segunda
janela gr@'afica, com o gr@'afico de uma curva integral, como duas
fun@value{cedilha}@~oes @var{x}, @var{y}, de vari@'avel independente
@var{t}. Se for dado a @code{versus_t} qualquer valor diferente de 0,
mostrar-se-@'a a segunda janela gr@'afica, que inclui outro men@'u,
similar ao da janela principal.
O valor por omiss@~ao @'e 0.

@item
@dfn{trajectory_at} estabelece as coordenadas
@var{xinitial} e @var{yinitial} para o ponto inicial da curva integral.
N@~ao tem atribu@'{@dotless{i}}do nenhum valor por omiss@~ao.

@item
@dfn{parameters} estabelece uma lista de
par@^ametros, junto com os seus valores num@'ericos, que s@~ao
utilizados na defini@value{cedilha}@~ao da equa@value{cedilha}@~ao
diferencial. Os nomes dos par@^ametros e os seus valores devem
escrever-se em formato de cadeia de caracteres como uma sequ@^encia de
pares @code{nome=valor} separados por v@'{@dotless{i}}rgulas.

@item
@dfn{sliders} estabelece uma lista de
par@^ametros que poder@~ao ser alterados interactivamente usando barras
com sliders, assim como os intervalos de varia@value{cedilha}@~ao dos
ditos par@^ametros.  Os nomes dos par@^ametros e os seus intervalos
devem escrever-se em formato de cadeia de caracteres como uma
sequ@^encia de pares @code{nome=min:max} separados por
v@'{@dotless{i}}rgulas.

@item
@dfn{xfun} estabelece uma cadeia de caracteres
com fun@value{cedilha}@~oes de @var{x} separadas por ponto e
v@'{@dotless{i}}rgula para ser representadas por cima do campo de
direc@value{cedilha}@~oes. Essas fun@value{cedilha}@~oes ser@~ao
interpretadas por Tcl, e n@~ao por Maxima.

@item
@dfn{xradius} @'e metade do comprimento do
intervalo de valores a representar na direc@value{cedilha}@~ao x.
O valor por omiss@~ao @'e 10.

@item
@dfn{yradius} @'e metade do comprimento do
intervalo de valores a representar na direc@value{cedilha}@~ao y.
O valor por omiss@~ao @'e 10.

@item
@dfn{xcenter} @'e a coordenada x do ponto
situado no centro do gr@'afico.
O valor por omiss@~ao @'e 0.

@item
@dfn{ycenter} @'e a coordenada y do ponto
situado no centro do gr@'afico.
O valor por omiss@~ao @'e 0.

@item
@dfn{width} estabelece a largura da janela gr@'afica em
pixels.
O valor por omiss@~ao @'e 500.

@item
@dfn{height} estabelece a altura da janela gr@'afica em
pixels.
O valor por omiss@~ao @'e 500.

@end itemize

@b{Exemplos:}

NOTA: Em alguns casos, dependendo da interface usada para executar o
Maxima, as fun@value{cedilha}@~oes que usam @code{openmath}, em
particular @code{plotdf}, podem desencadear um bug se terminarem em
ponto e v@'{@dotless{i}}rgula, e n@~ao com o s@'{@dotless{i}}mbolo de
d@'olar. Para evitar problemas, usaremos o s@'{@dotless{i}}mbolo de
d@'ola nos exemplos a seguir.

@itemize @bullet
@item
Para mostrar o campo de direc@value{cedilha}@~oes da
equa@value{cedilha}@~ao diferencial @math{y' = exp(-x) + y} e a
solu@value{cedilha}@~ao que passa por @math{(2, -0.1)}:
@example
(%i1) load("plotdf")$

(%i2) plotdf(exp(-x)+y,[trajectory_at,2,-0.1]);
@end example

@ifnotinfo
@image{../figures/plotdf1,8cm}
@end ifnotinfo

@item
Para mostrar o campo de direc@value{cedilha}@~oes da
equa@value{cedilha}@~ao @math{diff(y,x) = x - y^2} e a
solu@value{cedilha}@~ao com condi@value{cedilha}@~ao inicial @math{y(-1)
= 3}, pode utilizar-se o comando:
@example
(%i3) plotdf(x-y^2,[xfun,"sqrt(x);-sqrt(x)"],
          [trajectory_at,-1,3], [direction,forward],
          [yradius,5],[xcenter,6]);
@end example
O gr@'afico tamb@'em mostra a fun@value{cedilha}@~ao @math{y = sqrt(x)}.

@ifnotinfo
@image{../figures/plotdf2,8cm}
@end ifnotinfo

@item
O exemplo seguinte mostra o campo de direc@value{cedilha}@~oes de um
oscilador harm@'onico, definido pelas equa@value{cedilha}@~oes
@math{dx/dt = y} e @math{dy/dt = -k*x/m}, e a curva integral que passa
por @math{(x,y) = (6,0)}, com uma barra de slider que permitir@'a mudar
o valor de @math{m} interactivamente (@math{k} permanecer@'a fixo em 2):
@example
(%i4) plotdf([y,-k*x/m],[parameters,"m=2,k=2"],
            [sliders,"m=1:5"], [trajectory_at,6,0]);
@end example

@ifnotinfo
@image{../figures/plotdf3,8cm}
@end ifnotinfo

@item
Para representar o campo de direc@value{cedilha}@~oes da
equa@value{cedilha}@~ao de Duffing, @math{m*x''+c*x'+k*x+b*x^3 = 0},
introduz-se a vari@'avel @math{y=x'} e faz-se:
@example
(%i5) plotdf([y,-(k*x + c*y + b*x^3)/m],
              [parameters,"k=-1,m=1.0,c=0,b=1"],
              [sliders,"k=-2:2,m=-1:1"],[tstep,0.1]);
@end example

@ifnotinfo
@image{../figures/plotdf4,8cm}
@end ifnotinfo

@item
O campo de direc@value{cedilha}@~oes dum p@^endulo amortecido, incluindo
a solu@value{cedilha}@~ao para condi@value{cedilha}@~oes iniciales
dadas, com uma barra de slider que pode usar-se para mudar o valor da
masa, @math{m}, e com o gr@'afico das duas vari@'aveis de estado em
fun@value{cedilha}@~ao do tempo:

@example
(%i6) plotdf([y,-g*sin(x)/l - b*y/m/l],
         [parameters,"g=9.8,l=0.5,m=0.3,b=0.05"],
         [trajectory_at,1.05,-9],[tstep,0.01],
         [xradius,6],[yradius,14],
         [xcenter,-4],[direction,forward],[nsteps,300],
         [sliders,"m=0.1:1"], [versus_t,1]);
@end example

@ifnotinfo
@image{../figures/plotdf5,8cm}@image{../figures/plotdf6,8cm}
@end ifnotinfo

@end itemize

@end deffn