[ < ] [ > ]   [ << ] [ 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:

%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:


[ < ] [ > ]   [ << ] [ 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.


[ < ] [ > ]   [ << ] [ 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 Robert Dodier on Dezembro, 22 2007 using texi2html 1.76.