@c Language: Brazilian Portuguese, Encoding: iso-8859-1
@c /plotdf.texi/1.7/Sat Jun  2 00:13:30 2007//
@menu
* Introdução a plotdf::
* Funções e Variáveis Definidas para plotdf::
@end menu

@node Introdução a plotdf, Funções e Variáveis Definidas para plotdf, plotdf, plotdf
@section Introdução a plotdf

A função @code{plotdf} cria um gráfico do campo de direção de uma
Equação Diferencial Ordinária (EDO) de primeira ordem ou um sistema de duas
EDO's de primeira ordem autônomas.

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

Para montar um gráfico do campo de direçã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ção @var{F} pode ser dada como um argumento para
@code{plotdf}. A variável independente está sempre identificada como @var{x},
e a variável dependente como @var{y}. Essas duas variáveis podem não
ter quaisquer valores atribuídos a elas.

Para montar o gráfico do campo de direção de um conjunto de duas EDO's autô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ções @var{F} e @var{G}, em qualquer ordem.

Se somente uma EDO for fornecida, @code{plotdf} irá admitir implicitamente
@code{x=t}, e @code{G(x,y)=1}, transformando a equação não
autônoma em um sistema de duas equações autônomas.

@node Funções e Variáveis Definidas para plotdf,  , Introdução a plotdf, plotdf
@section Funções e Variáveis Definidas para plotdf

@deffn {Função} plotdf (@var{dydx},...opções...)
@deffnx {Função} plotdf (@code{[}@var{dxdt},@var{dydt}@code{]},...opções...)

Mostra um campo de direção em duas dimensões @var{x} e @var{y}.

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

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

@b{Menu da janela do gráfico:}

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

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

Mantendo o botão direito do mouse pressionado enquanto o cursor é movido, pode ser
usado para arrastar as laterais do gráfico para cima ou para baixo. Parâmetros
adicionais tais como o nú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ópia do gráfico pode ser impressa para uma impressora Postscript, ou gravada como um
arquivo postscript, usando a opçã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álogo de @emph{Config}. Após as escolhas na
janela de diálogo @emph{Save} serem fornecidas, "Save'' deve ser selecionada no primeiro
menu, para cirar o arquivo ou imprimir o gráfico.

@b{Opções de gráfico:}

O comando @code{plotdf} pode incluir muitos comandos, cada comando é
uma lista de dois ou mais itens.  O primeiro item é o nome da opção,
e o restante compreende o valor ou valores atribuídos à opção.

As opçõesque são reconhecidas por @code{plotdf} são as seguintes:

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

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

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

@item
@dfn{tinitial} define o valor inicial da variável @var{t} usada
para calcular curva integral. Uma vez que equações diferenciais forem
autônomas, aquela esxolha irá aparecer somente no gráfico das curvas como
funções de @var{t}. 
O valor padrão é 0.

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

@item
@dfn{trajectory_at} define as coordenadas @var{xinitial} e
@var{yinitial} para o ponto de partida de uma curva integral.
A opção está vazia por padrão.

@item
@dfn{parameters} define uma lista de parâmetros, e seus
valores numéricos, usados na definição das equações
diferenciais. O nome e valores dos parâmetros devem ser fornecidos em uma
seq@"{u}ência de caracteres com uma seq@"{u}ência de pares  @code{nome=valor} separados por vírgula.

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

@item
@dfn{xfun} define uma seq@"{u}ência de caracteres com uma seq@"{u}ência de funções separadas com
ponto e vírgula @var{x} para serem mostradas, no topo do campo de direção.
Essas funções irão ser passadas pelo Tcl e não pelo Maxima.

@item
@dfn{xradius} é metade do comprimento do intervalo dos valores que
irão ser mostrados na direção x.
O valor padrão é 10.

@item
@dfn{yradius} é metade do comprimento do intervalo dos valores que
irão ser mostrados na direção y.
O valor padrão é 10.

@item
@dfn{xcenter} é a coordenada x do ponto no centro do
gráfico.
O valor padrão é 0.

@item
@dfn{ycenter} é a coordenada y do ponto no centro do
gráfico.
O valor padrão é 0.

@item
@dfn{width} define a largura da janela do gráfico, em pixels.
O valor padrão é 500.

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

@b{Exemplos:}

NOTA: Dependendo da interface usada para executar o Maxima, as funções que
usam @code{openmath}, em particular @code{plotdf}, podem possivelmente disparar um erro se
erminarem com ponto e vírgula e não com um sinal de dólar. Para evitar
problemas, usamos um sinal de dólar em todos os exemplos abaixo.
  
@itemize @bullet
@item
Para mostrar o campo de direção da equação diferencial @math{y' = exp(-x) + y} e a solução que vai em toda a extensã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{@value{figuresfolder}/plotdf1,8cm}
@end ifnotinfo

@item
Para obter o campo de direção para a equação @math{diff(y,x) = x - y^2} e a solução com condiçã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áfico também mostra a função @math{y = sqrt(x)}. 

@ifnotinfo
@image{@value{figuresfolder}/plotdf2,8cm}
@end ifnotinfo

@item
O seguinte exemplo mostra o campo de direção de um oscilador harmônico,
definido pelas duas equaçõ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ão de deslizamento que
irá permitir a você mudar o valor de @math{m} interativamente (@math{k} está
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{@value{figuresfolder}/plotdf3,8cm}
@end ifnotinfo

@item
Para montar o gráfico do campo de direção da equação de Duffing, @math{m*x''+c*x'+k*x+b*x^3 = 0}, introduzimos a variá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{@value{figuresfolder}/plotdf4,8cm}
@end ifnotinfo

@item
O campo de direção para um pêdulo amortecido, incluindo a
solução para as condições iniciais fornecidas, com um botão de deslizamento que
pode ser usado para mudar o valor da massa @math{m}, e com um gráfico das
duas  variáveis de estado como uma funçã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{@value{figuresfolder}/plotdf5,8cm}@image{@value{figuresfolder}/plotdf6,8cm}
@end ifnotinfo

@end itemize

@end deffn


