@c Language: Brazilian Portuguese, Encoding: iso-8859-1
@c /plotdf.texi/1.7/Sat Jun  2 00:13:30 2007//
@menu
* Introdu@value{cedilha}@~{a}o a plotdf::
* Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para plotdf::
@end menu

@node Introdu@value{cedilha}@~{a}o a plotdf, Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para plotdf, plotdf, plotdf
@section Introdu@value{cedilha}@~{a}o a plotdf

A fun@value{cedilha}@~{a}o @code{plotdf} cria um gr@'{a}fico do campo de dire@value{cedilha}@~{a}o de uma
Equa@value{cedilha}@~{a}o Diferencial Ordin@'{a}ria (EDO) de primeira ordem ou um sistema de duas
EDO's de primeira ordem aut@^{o}nomas.

Uma vez que esse @'{e} um apcote adicional, com o objetivo de us@'{a}-lo voc@^{e} deve primeiramente
cham@'{a}-lo com @code{load("plotdf")}. Voc@^{e} tamb@'{e}m precisa do Xmaxima
instalado, mesmo que voc@^{e} execute o Maxima usando uma interface diferente.

Para montar um gr@'{a}fico do campo de dire@value{cedilha}@~{a}o de uma EDO simples, a EDO deve ser escrita na
forma:
@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}@~{a}o @var{F} pode ser dada como um argumento para
@code{plotdf}. A vari@'{a}vel independente est@'{a} sempre identificada como @var{x},
e a vari@'{a}vel dependente como @var{y}. Essas duas vari@'{a}veis podem n@~{a}o
ter quaisquer valores atribu@'{i}dos a elas.

Para montar o gr@'{a}fico do campo de dire@value{cedilha}@~{a}o de um conjunto de duas EDO's aut@^{o}nomas, elas devem
ser escritas na forma
@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 @code{plotdf} pode ser uma lista com as duas
fun@value{cedilha}@~{o}es @var{F} e @var{G}, em qualquer ordem.

Se somente uma EDO for fornecida, @code{plotdf} ir@'{a} admitir implicitamente
@code{x=t}, e @code{G(x,y)=1}, transformando a equa@value{cedilha}@~{a}o n@~{a}o
aut@^{o}noma em um sistema de duas equa@value{cedilha}@~{o}es aut@^{o}nomas.

@node Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para plotdf,  , Introdu@value{cedilha}@~{a}o a plotdf, plotdf
@section Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para plotdf

@deffn {Fun@value{cedilha}@~{a}o} plotdf (@var{dydx},...op@value{cedilha}@~{o}es...)
@deffnx {Fun@value{cedilha}@~{a}o} plotdf (@code{[}@var{dxdt},@var{dydt}@code{]},...op@value{cedilha}@~{o}es...)

Mostra um campo de dire@value{cedilha}@~{a}o em duas dimens@~{o}es @var{x} e @var{y}.

@var{dydx}, @var{dxdt} e @var{dydt} s@~{a}o express@~{o}es que dependem
de @var{x} e @var{y}. Adicionalmente para essas duas vari@'{a}veis, as
express@~{o}es podem tamb@'{e}m depender de um conjunto de par@^{a}metros, com valores
num@'{e}ricos fornecidos com os @code{par@^{a}metros} op@value{cedilha}@~{a}o (a sintaxe de op@value{cedilha}@~{a}o @'{e}
fornecida abaixo), ou com um intervalo de valores permitidos especificados por meio de uma
op@value{cedilha}@~{a}o @var{sliders}.

Muitas outras op@value{cedilha}@~{o}es podem ser fornecidas dentro do comando, ou selecionadas no
menu. Curvas integrais podem ser obtidas por meio de um clique no gr@'{a}fico, ou
com a op@value{cedilha}@~{a}o @code{trajectory_at}. A dire@value{cedilha}@~{a}o da integra@value{cedilha}@~{a}o
pode ser controlada com a op@value{cedilha}@~{a}o @code{direction}, que pode ter
valores de @emph{forward} (adiante), @emph{backward}(para tr@'{a}s) or @emph{both} (ambos). O n@'{u}mero de
passos de integra@value{cedilha}@~{a}o @'{e} fornecido por meio de @code{nsteps} e o intervalo de tempo
entre eles @'{e} escolhido com a op@value{cedilha}@~{a}o @code{tstep}. O m@'{e}todo de Adams
Moulton @'{e} usado para a integra@value{cedilha}@~{a}o; @'{e} tamb@'{e}m poss@'{i}vel alternar para um
m@'{e}todo adaptativo de Runge-Kutta de quarta ordem.

@b{Menu da janela do gr@'{a}fico:}

O menu na janela do gr@'{a}fico tem as seguintes op@value{cedilha}@~{o}es: @emph{Zoom}, ir@'{a}
modificar o comportamento do mouse de forma que seja permitido a voc@^{e} aproximar uma
regi@~{a}o do gr@'{a}fico por meio de um clique nessa regi@~{a}o como o bot@~{a}o esquerdo. Cada clique pr@'{o}ximo a um
ponto do gr@'{a}fico amplia esse gr@'{a}fico, mantendo o contro no ponto onde voc@^{e}
clicou. Mantendo a tecla @key{Shift} pressioada enquanto clica, afasta para a
amplia@value{cedilha}@~{a}o anterior. Para continuar calculando trajet@'{o}rias quando voc@^{e} clica
sobre um ponto, selecione @emph{Integrate} a partir do menu.

A op@value{cedilha}@~{a}o @emph{Config} no menu pode ser usada para mudar a(s) EDO(s) em
uso e para v@'{a}rias outras escolhas. Ap@'{o}s as mudan@value{cedilha}as de configura@value{cedilha}@~{a}o serem feitas,
a op@value{cedilha}@~{a}o do menu @emph{Replot} estar@'{a} selecionada, para ativar as novas
escolhas.  Se um par de coordenadas for fornecido em um campo
@emph{Trajectory at} na caixa de di@'{a}logo @emph{Config} do menu, e a
tecla @key{enter} fo pressionada, uma nova curva integral ser@'{a} mostrada,
adicionalmente com as outras j@'{a} mostradas. Quando @emph{Replot} est@'{a} selecionada, somente
a @'{u}ltima curva integral fornecida ser@'{a} mostrada.

Mantendo o bot@~{a}o direito do mouse pressionado enquanto o cursor @'{e} movido, pode ser
usado para arrastar as laterais do gr@'{a}fico para cima ou para baixo. Par@^{a}metros
adicionais tais como o n@'{u}mero de passos, o valor inicial de @var{t}
e os centros de x e y e raios, podem ser escolhidos no menu Config.

Uma c@'{o}pia do gr@'{a}fico pode ser impressa para uma impressora Postscript, ou gravada como um
arquivo postscript, usando a op@value{cedilha}@~{a}o @emph{Save} do menu. Para alternar entre
imprimir e gravar para um arquivo Postscript, @emph{Print Options} pode ser
selecionada na janela de di@'{a}logo de @emph{Config}. Ap@'{o}s as escolhas na
janela de di@'{a}logo @emph{Save} serem fornecidas, "Save'' deve ser selecionada no primeiro
menu, para cirar o arquivo ou imprimir o gr@'{a}fico.

@b{Op@value{cedilha}@~{o}es de gr@'{a}fico:}

O comando @code{plotdf} pode incluir muitos comandos, cada comando @'{e}
uma lista de dois ou mais itens.  O primeiro item @'{e} o nome da op@value{cedilha}@~{a}o,
e o restante compreende o valor ou valores atribu@'{i}dos @`a op@value{cedilha}@~{a}o.

As op@value{cedilha}@~{o}esque s@~{a}o reconhecidas por @code{plotdf} s@~{a}o as seguintes:

@itemize @bullet
@item
@dfn{tstep} define o comprimento dos incrementos sobre a
vari@'{a}vel independente @var{t}, usado para calcular uma curva integral. Se somente
uma express@~{a}o @var{dydx} for fornecida a @code{plotdf}, a vari@'{a}vel
@var{x} ser@'{a} diretamente proporcional a @var{t}.
O valor padr@~{a}o @'{e} 0.1.

@item
@dfn{nsteps} define o n@'{u}mero de passos de comprimento @code{tstep}
que ser@'{a} usando para a vari@'{a}vel independente, para calcular uma curva
integral.
O valor padr@~{a}o @'{e} 100.

@item
@dfn{direction} define a dire@value{cedilha}@~{a}o da vari@'{a}vel
independente que ser@'{a} seguida para calcular uma curva integral. Poss@'{i}veis
valores s@~{a}o @code{forward}, para fazer a vari@'{a}vel independente aumentar
@code{nsteps} vezes, com incrementos de @code{tstep}, @code{backward}, para
fazer a vari@'{a}vel independente diminuir, ou @code{both} que ir@'{a} conduzir a
um curva integral que amplia @code{nsteps} adiante, e @code{nsteps}
para tr@'{a}s. As palavras chave @code{right} e @code{left} podem ser usadas como
sinonimos para @code{forward} e @code{backward}.
O valor padr@~{a}o @'{e} @code{both}.

@item
@dfn{tinitial} define o valor inicial da vari@'{a}vel @var{t} usada
para calcular curva integral. Uma vez que equa@value{cedilha}@~{o}es diferenciais forem
aut@^{o}nomas, aquela esxolha ir@'{a} aparecer somente no gr@'{a}fico das curvas como
fun@value{cedilha}@~{o}es de @var{t}. 
O valor padr@~{a}o @'{e} 0.

@item
@dfn{versus_t} @'{e} usado para criar uma segunda janela de gr@'{a}fico, com um
gr@'{a}fico de uma curva integral, como duas fun@value{cedilha}@~{o}es @var{x}, @var{y}, da
vari@'{a}vel independente @var{t}. Se para @code{versus_t} for atribu@'{i}do qualquer valor
diferente de 0, a segunda janela de gr@'{a}fico ser@'{a} mostrada. A segunda
janela de gr@'{a}fico inclui outro menu, semelhante ao menu da janela de gr@'{a}fico
principal.
O valor padr@~{a}o @'{e} 0.

@item
@dfn{trajectory_at} define as coordenadas @var{xinitial} e
@var{yinitial} para o ponto de partida de uma curva integral.
A op@value{cedilha}@~{a}o est@'{a} vazia por padr@~{a}o.

@item
@dfn{parameters} define uma lista de par@^{a}metros, e seus
valores num@'{e}ricos, usados na defini@value{cedilha}@~{a}o das equa@value{cedilha}@~{o}es
diferenciais. O nome e valores dos par@^{a}metros devem ser fornecidos em uma
seq@"{u}@^{e}ncia de caracteres com uma seq@"{u}@^{e}ncia de pares  @code{nome=valor} separados por v@'{i}rgula.

@item
@dfn{sliders} define uma lista de par@^{a}metros que ser@'{a} modificada
interativamente usando bot@~{o}es de deslizamento, e o intervalo de varia@value{cedilha}@~{a}o desses
par@^{a}metros. Os nomes e intervalos dos par@^{a}metros devem ser fornecidos in a
seq@"{u}@^{e}ncia de caracteres com uma seq@"{u}@^{e}ncia de elementos  @code{name=min:max} separados por v@'{i}rgula.

@item
@dfn{xfun} define uma seq@"{u}@^{e}ncia de caracteres com uma seq@"{u}@^{e}ncia de fun@value{cedilha}@~{o}es separadas com
ponto e v@'{i}rgula @var{x} para serem mostradas, no topo do campo de dire@value{cedilha}@~{a}o.
Essas fun@value{cedilha}@~{o}es ir@~{a}o ser passadas pelo Tcl e n@~{a}o pelo Maxima.

@item
@dfn{xradius} @'{e} metade do comprimento do intervalo dos valores que
ir@~{a}o ser mostrados na dire@value{cedilha}@~{a}o x.
O valor padr@~{a}o @'{e} 10.

@item
@dfn{yradius} @'{e} metade do comprimento do intervalo dos valores que
ir@~{a}o ser mostrados na dire@value{cedilha}@~{a}o y.
O valor padr@~{a}o @'{e} 10.

@item
@dfn{xcenter} @'{e} a coordenada x do ponto no centro do
gr@'{a}fico.
O valor padr@~{a}o @'{e} 0.

@item
@dfn{ycenter} @'{e} a coordenada y do ponto no centro do
gr@'{a}fico.
O valor padr@~{a}o @'{e} 0.

@item
@dfn{width} define a largura da janela do gr@'{a}fico, em pixels.
O valor padr@~{a}o @'{e} 500.

@item
@dfn{height} define a altura da janela do gr@'{a}fico, em pixels.
O valor padr@~{a}o @'{e} 500.
@end itemize

@b{Exemplos:}

NOTA: Dependendo da interface usada para executar o Maxima, as fun@value{cedilha}@~{o}es que
usam @code{openmath}, em particular @code{plotdf}, podem possivelmente disparar um erro se
erminarem com ponto e v@'{i}rgula e n@~{a}o com um sinal de d@'{o}lar. Para evitar
problemas, usamos um sinal de d@'{o}lar em todos os exemplos abaixo.
  
@itemize @bullet
@item
Para mostrar o campo de dire@value{cedilha}@~{a}o da equa@value{cedilha}@~{a}o diferencial @math{y' = exp(-x) + y} e a solu@value{cedilha}@~{a}o que vai em toda a extens@~{a}o do intervalo @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 obter o campo de dire@value{cedilha}@~{a}o para a equa@value{cedilha}@~{a}o @math{diff(y,x) = x - y^2} e a solu@value{cedilha}@~{a}o com condi@value{cedilha}@~{a}o inicial @math{y(-1) = 3}, podemos usar 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@'{a}fico tamb@'{e}m mostra a fun@value{cedilha}@~{a}o @math{y = sqrt(x)}. 

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

@item
O seguinte exemplo mostra o campo de dire@value{cedilha}@~{a}o de um oscilador harm@^{o}nico,
definido pelas duas equa@value{cedilha}@~{o}es @math{dx/dt = y} e @math{dy/dt = -k*x/m},
e a curva integral em todo o intervalo @math{(x,y) = (6,0)}, com um bot@~{a}o de deslizamento que
ir@'{a} permitir a voc@^{e} mudar o valor de @math{m} interativamente (@math{k} est@'{a}
fixado 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 montar o gr@'{a}fico do campo de dire@value{cedilha}@~{a}o da equa@value{cedilha}@~{a}o de Duffing, @math{m*x''+c*x'+k*x+b*x^3 = 0}, introduzimos a vari@'{a}vel @math{y=x'} e usamos:
@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 dire@value{cedilha}@~{a}o para um p@^{e}dulo amortecido, incluindo a
solu@value{cedilha}@~{a}o para as condi@value{cedilha}@~{o}es iniciais fornecidas, com um bot@~{a}o de deslizamento que
pode ser usado para mudar o valor da massa @math{m}, e com um gr@'{a}fico das
duas  vari@'{a}veis de estado como uma fun@value{cedilha}@~{a}o 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

