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
|