[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

# 44. contrib_ode

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

## 44.1 Introdução a contrib_ode

O resolvedor de equações diferenciais ordinárias (EDO) do MAXIMA, o `ode2`, resolve EDO's elementares de primeira e segunda ordem. A função `contrib_ode` extende `ode2` com métodos adicionais para EDO's lineares e EDO's não lineares de primeira ordem e EDO's lineares homogêneas de segunda ordem. O código está ainda em desenvolvimemto e a seqüência de chamada da função pode mudar em futuras versões. Uma vez que o código estiver estabilizado essa função pode ser movida do diretório contrib e integrada dentro do MAXIMA.

Esse pacote deve torna-se disponível para uso com o comando `load('contrib_ode)` em primeiro lugar.

A convenção de chamada para `contrib_ode` é idêntica a `ode2`. Toma três argumentos: uma EDO (somente o lado esquerdo precisa ser fornecido se o lado direito for 0), a variável dependente, e a variável independente. Quando `contrib_ode` obtiver sucesso, retorna uma lista de soluções.

A forma de retorno da lista de solução difere de `ode2`. Como equações não lineares podem ter múltiplas soluções, `contrib_ode` retorna uma lista de soluções. Cada solução pode ter várias formas:

- uma solução explícita para a variável dependente,
- uma solução implícita para a variável dependente,
- uma solução paramétrica em termos de variável %t, ou
- uma transfrmação em outra EDO na variável %u.

`%c` é usado para representar a constante de integração para equações de primeira ordem. `%k1` e `%k2` são constantes para equações de segunda ordem. Se `contrib_ode` não puder obter uma solução por qualquer razão, `false` é retornado, após talvez mostrar uma mensagem de erro.

Isso é necessário para retornar uma lista de soluções, como mesmo EDO's de primeira ordem não lineares podem ter soluções multiplas. Por exemplo:

    (%i1) load('contrib_ode)$

    (%i2) eqn:x*'diff(y,x)^2-(1+x*y)*'diff(y,x)+y=0;

                        dy 2             dy
    (%o2)            x (--)  - (x y + 1) -- + y = 0
                        dx               dx
    (%i3) contrib_ode(eqn,y,x);

                                                 x
    (%o3)             [y = log(x) + %c, y = %c %e ]
    (%i4) method;

    (%o4)                        factor

EDO's não lineares podem ter soluções singulares sem constantes de integração, como na segunda solução do seguinte exemplo:

    (%i1) load('contrib_ode)$

    (%i2) eqn:'diff(y,x)^2+x*'diff(y,x)-y=0;

                           dy 2     dy
    (%o2)                 (--)  + x -- - y = 0
                           dx       dx
    (%i3) contrib_ode(eqn,y,x);

                                               2
                                     2        x
    (%o3)              [y = %c x + %c , y = - --]
                                              4
    (%i4) method;

    (%o4)                       clairault

A seguinte EDO possui duas soluções paramétricas em termos da variável fictícia %t. Nesse caso as soluções paramétricaspodem ser manipuladas para fornecer soluções explícitas.

    (%i1) load('contrib_ode)$

    (%i2) eqn:'diff(y,x)=(x+y)^2;

                              dy          2
    (%o2)                     -- = (y + x)
                              dx
    (%i3) contrib_ode(eqn,y,x);

    (%o3) [[x = %c - atan(sqrt(%t)), y = - x - sqrt(%t)],
                         [x = atan(sqrt(%t)) + %c, y = sqrt(%t) - x]]
    (%i4) method;

    (%o4)                       lagrange

O seguinte exemplo (Kamke 1.112) demonstra uma solução implícita.

    (%i1) load('contrib_ode)$

    (%i2) assume(x>0,y>0);

    (%o2)                    [x > 0, y > 0]
    (%i3) eqn:x*'diff(y,x)-x*sqrt(y^2+x^2)-y;

                         dy           2    2
    (%o3)              x -- - x sqrt(y  + x ) - y
                         dx
    (%i4) contrib_ode(eqn,y,x);

                                      y
    (%o4)                  [x - asinh(-) = %c]
                                      x
    (%i5) method;

    (%o5)                          lie

A seguinte equação de Riccati é transformada em uma EDO linear de segunda ordem na variável %u. MAXIMA não está apto a resolver a nova EDO, de forma que essa nova EDO é retornada sem avaliação.

    (%i1) load('contrib_ode)$

    (%i2) eqn:x^2*'diff(y,x)=a+b*x^n+c*x^2*y^2;

                        2 dy      2  2      n
    (%o2)              x  -- = c x  y  + b x  + a
                          dx
    (%i3) contrib_ode(eqn,y,x);

                   d%u
                   ---                            2
                   dx        2     n - 2   a     d %u
    (%o3)  [[y = - ----, %u c  (b x      + --) + ---- c = 0]]
                   %u c                     2      2
                                           x     dx
    (%i4) method;

    (%o4)                        riccati

Para EDO's de primeira ordem `contrib_ode` chama `ode2`. `ode2` tenta então os seguintes métodos: fatoração, Clairault, Lagrange, Riccati, Abel e os métodos de simetria de Lie. O método de Lie não é tentado sobre equações de Abel se o método de Abel falhar, mas é tendado se o método de Riccati uma EDO de segunda ordem não resolvida.

Para EDO's de segunda ordem `contrib_ode` chama `ode2` e em seguida `odelin`.

Rastros extensivos de depuração mensagens são mostradas se o comando `put('contrib_ode,true,'verbose)` for executado.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

## 44.2 Funções e Variáveis Definidas para contrib_ode

Função: contrib_ode (eqn, y, x)

  Retorna uma lista de soluções da EDO eqn com variável independente x e variável dependente y.

Função: odelin (eqn, y, x)

  `odelin` resolve EDO's lineares homogêneas de primeira e segunda ordem com variável independente x e variável dependente y. `odelin` retorna um conjunto solução fundamental da EDO.

  para EDO's de segunda ordem, `odelin` usa um método, devido a Bronstein e Lafaille, que busca por soluções em termos de funções especiais dadas.

      (%i1) load('contrib_ode);

      (%i2) odelin(x*(x+1)*'diff(y,x,2)+(x+5)*'diff(y,x,1)+(-4)*y,y,x);
      ...trying factor method
      ...solving 7 equations in 4 variables
      ...trying the Bessel solver
      ...solving 1 equations in 2 variables
      ...trying the F01 solver
      ...solving 1 equations in 3 variables
      ...trying the spherodial wave solver
      ...solving 1 equations in 4 variables
      ...trying the square root Bessel solver
      ...solving 1 equations in 2 variables
      ...trying the 2F1 solver
      ...solving 9 equations in 5 variables
             gauss_a(- 6, - 2, - 3, - x)  gauss_b(- 6, - 2, - 3, - x)
      (%o2) {---------------------------, ---------------------------}
                          4                            4
                         x                            x

Função: ode_check (eqn, sol)

  Retorna o valor da EDO eqn após substituir uma possível solução sol. O valor é igual a zero se sol for uma solução of eqn.

      (%i1) load('contrib_ode)$

      (%i2) eqn:'diff(y,x,2)+(a*x+b)*y;

                               2
                              d y
      (%o2)                   --- + (a x + b) y
                                2
                              dx
      (%i3) ans:[y = bessel_y(1/3,2*(a*x+b)^(3/2)/(3*a))*%k2*sqrt(a*x+b)
               +bessel_j(1/3,2*(a*x+b)^(3/2)/(3*a))*%k1*sqrt(a*x+b)];

                                        3/2
                          1  2 (a x + b)
      (%o3) [y = bessel_y(-, --------------) %k2 sqrt(a x + b)
                          3       3 a
                                                3/2
                                  1  2 (a x + b)
                       + bessel_j(-, --------------) %k1 sqrt(a x + b)]
                                  3       3 a
      (%i4) ode_check(eqn,ans[1]);

      (%o4)                           0

Variável global: `method`

  A variável `method` é escolhida para o método que resolver com sucesso uma dada EDO.

Variável: `%c`

  `%c` é a constante de integração para EDO's de primeira ordem.

Variável: `%k1`

  `%k1` é a primeira constante de integração para EDO's de segunda ordem.

Variável: `%k2`

  `%k2` é a segunda constante de integração para EDO's de segunda ordem.

Função: gauss_a (a, b, c, x)

  `gauss_a(a,b,c,x)` e `gauss_b(a,b,c,x)` são funções hipergeométricas 2F1. Elas represetnam quaisquer duas soluções independentes da equação diferencial hipergeométrica `x(1-x) diff(y,x,2) + [c-(a+b+1)x diff(y,x) - aby = 0` (A&S 15.5.1).

  O único uso dessas funções é em soluções de EDO's retornadas por `odelin` e `contrib_ode`. A definição e o uso dessas funções pode mudar em futuras versões do maxima.

  Veja também `gauss_b`, `dgauss_a` e `gauss_b`.

Função: gauss_b (a, b, c, x)

  Veja `gauss_a`.

Função: dgauss_a (a, b, c, x)

  A derivada em relação a x de `gauss_a(a,b,c,x)`.

Função: dgauss_b (a, b, c, x)

  A derivada em relação a x de `gauss_b(a,b,c,x)`.

Função: kummer_m (a, b, x)

  A função M de Kummer, como definida em Abramowitz e Stegun, Handbook of Mathematical Functions, Section 13.1.2.

  O único uso dessas funções é em soluções de EDO's retornadas por `odelin` e `contrib_ode`. A definição e o uso dessas funções pode mudar em futuras versões do maxima.

  Veja também `kummer_u`, `dkummer_m` e `dkummer_u`.

Função: kummer_u (a, b, x)

  A função U de Kummer, como definida em Abramowitz e Stegun, Handbook of Mathematical Functions, Section 13.1.3.

  Veja `kummer_m`.

Função: dkummer_m (a, b, x)

  A derivada com relação a x de `kummer_m(a,b,x)`.

Função: dkummer_u (a, b, x)

  A derivada com relação a x de `kummer_u(a,b,x)`.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

## 44.3 Possibilidades de melhorias em contrib_ode

Essas rotinas aida estão sendo aperfeiçoadas. É necessário ainda:

- Extender o método FACTOR `ode1_factor` para trabalhar com raízes multiplas.
- Extender o método FACTOR `ode1_factor` para tentar resolver fatores de mais alta ordem. Atualmente somente tenta resolver fatores lineares.
- Corrigir a rotina de LAGRANGE `ode1_lagrange` para preferiraízes reais a raízes complexas.
- Aumentar a quantidade de métodos adicionais para equações de Riccati.
- Melhorar a detecção de equações de Abel do segundo tipo. O modelo existente de coincidência é fraco.
- Trabalho sobre a rotina do grupo de simetria de Lie `ode1_lie`. Existem poucos porém grandes problemas com essa rotina: algumas partes precisam de implementação; alguns casos de teste parecem executar indefinidamente; outros casos de teste abortam inesplicavelmente; outros ainda retorna "soluções" muito complexas. Seria surpreendente se estivesse pronto para se liberar uma versão estável.
- Adicionar mais casos de teste.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

## 44.4 Casos de teste para contrib_ode

Asrotinas foram tesadas sobre aproximadamente mil casos de teste por Murphy, Kamke, Zwillinger e outros. Esses testes estão incluídos no subdiretório de testes.

- A rotina de Clairault `ode1_clairault` encontra todas as soluções conhecidas, incluindo soluções singulares, das equações de Clairault em Murphy e Kamke.
- As outras rotinas muitas vezes retornam uma solução simples quando existem multiplas soluções.
- Algumas das "soluções" de `ode1_lie` são extremamente complexas e impossíveis de verificar.
- Existe algumas interrupções inexplicávies de execução.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

## 44.5 Referências bibliográficas para contrib_ode

1. E Kamke, Differentialgleichungen Losungsmethoden und Losungen, Vol 1, Geest & Portig, Leipzig, 1961
2. G M Murphy, Ordinary Differential Equations and Their Solutions, Van Nostrand, New York, 1960
3. D Zwillinger, Handbook of Differential Equations, 3rd edition, Academic Press, 1998
4. F Schwarz, Symmetry Analysis of Abel's Equation, Studies in Applied Mathematics, 100:269-294 (1998)
5. F Schwarz, Algorithmic Solution of Abel's Equation, Computing 61, 39-49 (1998)
6. E. S. Cheb-Terrab, A. D. Roche, Symmetries and First Order EDO Patterns, Computer Physics Communications 113 (1998), p 239. (http://lie.uwaterloo.ca/papers/ode_vii.pdf)
7. E. S. Cheb-Terrab, T. Koloknikov, First Order EDO's, Symmetries and Linear Transformations, European Journal of Applied Mathematics, Vol. 14, No. 2, pp. 231-246 (2003). (http://arxiv.org/abs/math-ph/0007023) (http://lie.uwaterloo.ca/papers/ode_iv.pdf)
8. G W Bluman, S C Anco, Symmetry and Integration Methods for Differential Equations, Springer, (2002)
9. M Bronstein, S Lafaille, Solutions of linear ordinary equações diferenciais in terms of special functions, Proceedings of ISSAC 2002, Lille, ACM Press, 23-28. (http://www-sop.inria.fr/cafe/Manuel.Bronstein/publications/issac2002.pdf)

[ << ] | [ >> ] |  |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

This document was generated by Viktor T. Toth on Outubro, 3 2017 using texi2html 1.76.