Introducedilhaão a plotdf
=========================

A funcedilhaão plotdf cria um gráfico do campo de direcedilhaão de uma Equacedilhaã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 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 direcedilhaão de uma EDO simples, a EDO deve ser escrita na forma:

            dy
            -- = F(x,y)
            dx

e a funcedilhaão F pode ser dada como um argumento para plotdf. A variável independente está sempre identificada como X, e a variável dependente como Y. Essas duas variáveis podem não ter quaisquer valores atribuídos a elas.

Para montar o gráfico do campo de direcedilhaão de um conjunto de duas EDO's autônomas, elas devem ser escritas na forma

            dx             dy
            -- = G(x,y)    -- = F(x,y)
            dt             dt

e o argumento para plotdf pode ser uma lista com as duas funcedilhaões F e G, em qualquer ordem.

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

Funcedilhaões e Variáveis Definidas para plotdf
===============================================

 -- Funcedilhaão: plotdf (DYDX,...opcedilhaões...)
 -- Funcedilhaão: plotdf ([DXDT,DYDT],...opcedilhaões...)

     Mostra um campo de direcedilhaão em duas dimensões X e Y.

     DYDX, DXDT e DYDT são expressões que dependem de X e 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 parâmetros opcedilhaão (a sintaxe de opcedilhaão é fornecida abaixo), ou com um intervalo de valores permitidos especificados por meio de uma opcedilhaão SLIDERS.

     Muitas outras opcedilhaõ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 opcedilhaão trajectory_at. A direcedilhaão da integracedilhaão pode ser controlada com a opcedilhaão direction, que pode ter valores de forward (adiante), backward(para trás) or both (ambos). O número de passos de integracedilhaão é fornecido por meio de nsteps e o intervalo de tempo entre eles é escolhido com a opcedilhaão tstep. O método de Adams Moulton é usado para a integracedilhaão; é também possível alternar para um método adaptativo de Runge-Kutta de quarta ordem.

     Menu da janela do gráfico:

     O menu na janela do gráfico tem as seguintes opcedilhaões: 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 Shift pressioada enquanto clica, afasta para a ampliacedilhaão anterior. Para continuar calculando trajetórias quando você clica sobre um ponto, selecione Integrate a partir do menu.

     A opcedilhaão Config no menu pode ser usada para mudar a(s) EDO(s) em uso e para várias outras escolhas. Após as mudancedilhaas de configuracedilhaão serem feitas, a opcedilhaão do menu Replot estará selecionada, para ativar as novas escolhas.  Se um par de coordenadas for fornecido em um campo Trajectory at na caixa de diálogo Config do menu, e a tecla enter fo pressionada, uma nova curva integral será mostrada, adicionalmente com as outras já mostradas. Quando 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 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 opcedilhaão Save do menu. Para alternar entre imprimir e gravar para um arquivo Postscript, Print Options pode ser selecionada na janela de diálogo de Config. Após as escolhas na janela de diálogo Save serem fornecidas, "Save'' deve ser selecionada no primeiro menu, para cirar o arquivo ou imprimir o gráfico.

     Opcedilhaões de gráfico:

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

     As opcedilhaõesque são reconhecidas por plotdf são as seguintes:

       * tstep define o comprimento dos incrementos sobre a variável independente T, usado para calcular uma curva integral. Se somente uma expressão DYDX for fornecida a plotdf, a variável X será diretamente proporcional a T. O valor padrão é 0.1.

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

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

       * tinitial define o valor inicial da variável T usada para calcular curva integral. Uma vez que equacedilhaões diferenciais forem autônomas, aquela esxolha irá aparecer somente no gráfico das curvas como funcedilhaões de T. O valor padrão é 0.

       * versus_t é usado para criar uma segunda janela de gráfico, com um gráfico de uma curva integral, como duas funcedilhaões X, Y, da variável independente T. Se para 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.

       * trajectory_at define as coordenadas XINITIAL e YINITIAL para o ponto de partida de uma curva integral. A opcedilhaão está vazia por padrão.

       * parameters define uma lista de parâmetros, e seus valores numéricos, usados na definicedilhaão das equacedilhaões diferenciais. O nome e valores dos parâmetros devem ser fornecidos em uma seqüência de caracteres com uma seqüência de pares  nome=valor separados por vírgula.

       * sliders define uma lista de parâmetros que será modificada interativamente usando botões de deslizamento, e o intervalo de variacedilhaão desses parâmetros. Os nomes e intervalos dos parâmetros devem ser fornecidos in a seqüência de caracteres com uma seqüência de elementos  name=min:max separados por vírgula.

       * xfun define uma seqüência de caracteres com uma seqüência de funcedilhaões separadas com ponto e vírgula X para serem mostradas, no topo do campo de direcedilhaão. Essas funcedilhaões irão ser passadas pelo Tcl e não pelo Maxima.

       * xradius é metade do comprimento do intervalo dos valores que irão ser mostrados na direcedilhaão x. O valor padrão é 10.

       * yradius é metade do comprimento do intervalo dos valores que irão ser mostrados na direcedilhaão y. O valor padrão é 10.

       * xcenter é a coordenada x do ponto no centro do gráfico. O valor padrão é 0.

       * ycenter é a coordenada y do ponto no centro do gráfico. O valor padrão é 0.

       * width define a largura da janela do gráfico, em pixels. O valor padrão é 500.

       * height define a altura da janela do gráfico, em pixels. O valor padrão é 500.

     Exemplos:

     NOTA: Dependendo da interface usada para executar o Maxima, as funcedilhaões que usam openmath, em particular 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.

       * Para mostrar o campo de direcedilhaão da equacedilhaão diferencial y' = exp(-x) + y e a solucedilhaão que vai em toda a extensão do intervalo (2, -0.1):

               (%i1) load("plotdf")$

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

       * Para obter o campo de direcedilhaão para a equacedilhaão diff(y,x) = x - y^2 e a solucedilhaão com condicedilhaão inicial y(-1) = 3, podemos usar o comando:

               (%i3) plotdf(x-y^2,[xfun,"sqrt(x);-sqrt(x)"],
                         [trajectory_at,-1,3], [direction,forward],
                         [yradius,5],[xcenter,6]);

          O gráfico também mostra a funcedilhaão y = sqrt(x).

       * O seguinte exemplo mostra o campo de direcedilhaão de um oscilador harmônico, definido pelas duas equacedilhaões dx/dt = y e dy/dt = -k*x/m, e a curva integral em todo o intervalo (x,y) = (6,0), com um botão de deslizamento que irá permitir a você mudar o valor de m interativamente (k está fixado em 2):

               (%i4) plotdf([y,-k*x/m],[parameters,"m=2,k=2"],
                           [sliders,"m=1:5"], [trajectory_at,6,0]);

       * Para montar o gráfico do campo de direcedilhaão da equacedilhaão de Duffing, m*x''+c*x'+k*x+b*x^3 = 0, introduzimos a variável y=x' e usamos:

               (%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]);

       * O campo de direcedilhaão para um pêdulo amortecido, incluindo a solucedilhaão para as condicedilhaões iniciais fornecidas, com um botão de deslizamento que pode ser usado para mudar o valor da massa m, e com um gráfico das duas  variáveis de estado como uma funcedilhaão do tempo:

               (%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]);