[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

# 43. contrib_ode

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 43.1 Introducción a contrib_ode

La función `ode2` de Maxima resuelve ecuaciones diferenciales ordinarias (EDO) simples de primer y segundo orden. La función `contrib_ode` extiende las posibilidades de `ode2` con métodos adicionales para ODEs lineales y no lineales de primer orden y homogéneas lineales de segundo orden. El código se encuentra en estado de desarrollo y la syntaxis puede cambiar en futuras versiones. Una vez el código se haya estabilizado podrá pasar a integrarse dentro de Maxima.

El paquete debe cargarse con la instrucción `load('contrib_ode)` antes de utilizarlo.

La sintaxis de `contrib_ode` es similar a la de `ode2`. Necesita tres argumentos: una EDO (sólo se necesita el miembro izquierdo si el derecho es igual cero), la variable dependiente y la independiente. Si encuentra la solución, devolverá una lista de resultados.

La forma de los resultados devueltos es diferente de la utilizada por `ode2`. Puesto que las ecuaciones no lineales pueden tener múltiples soluciones, `contrib_ode` devuelve una lista de soluciones. Las soluciones pueden tener diferentes formatos:

- una función explícita para la variable dependiente,
- una función implícita para la variable dependiente,
- una solución paramétrica en términos de la variable `%t` o
- una transformación en otra EDO de variable `%u`.

`%c` hace referencia a la constante de integración en las ecuaciones de primer orden. `%k1` y `%k2` son las constantes para las ecuaciones de segundo orden. Si por cualquier razón contrib_ode no pudiese encontrar una solución, devolverá `false`, quizás después de mostrar un mensaje de error.

Ejemplos:

En ocasiones es necesario devolver una lista de soluciones, pues algunas EDOs pueden tener múltiples soluciones:

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

Las EDOs no lineales pueden tener soluciones singulares sin constantes de integración, como en la segunda solución del ejemplo siguiente:

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

La siguiente ODE tiene dos soluciones paramétricas en términos de la variable `%t`. En este caso, las soluciones paramétricas se pueden manipular para dar soluciones 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

En el siguiente ejemplo (Kamke 1.112) se obtiene una solución 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

La siguiente ecuación de Riccati se transforma en una EDO lineal de segundo orden de variable `%u`. Maxima es incapaz de resolver la nueva EDO, por lo que la devuelve si resolver:

    (%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 EDOs de primer orden, `contrib_ode` llama a `ode2`. Entonces trata de aplicar los siguientes métodos: factorización, Clairault, Lagrange, Riccati, Abel y Lie. El método de Lie no se intenta aplicar a las ecuaciones de Abel si el propio método de Abel no obtiene solución, pero sí se utiliza si el método de Riccati devuelve una EDO de segundo orden sin resolver.

Para EDOs de segundo orden, `contrib_ode` llama a `ode2` y luego a `odelin`.

Se mostrarán mensajes de depurado si se ejecuta la sentencia `put('contrib_ode,true,'verbose)`.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 43.2 Funciones y variables para contrib_ode

Función: contrib_ode (eqn, y, x)

  Devuelve la lista de soluciones de la ecuación diferencia ordinaria (EDO) eqn de variable independiente x y variable dependiente y.

Función: odelin (eqn, y, x)

  La función `odelin` resulve EDOs homogéneas lineales de primer y segundo orden con variable independiente x y variable dependiente y. Devuelve un conjunto fundamental de soluciones de la EDO.

  Para EDOs de segundo orden, `odelin` utiliza un método desarrollado por Bronstein y Lafaille, que busca las soluciones en términos de funciones especiales 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

Función: ode_check (eqn, soln)

  Devuelve el valor de la ecuación diferencia ordinaria (EDO) eqn después de sustituir una posible solución soln. El valor es cero si soln es una solución de 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

Variable opcional: `method`

  A la variable `method` se le asigna el método aplicado.

Variable: `%c`

  `%c` es la constante de integración para EDOs de primer orden.

Variable: `%k1`

  `%k1` es la primera constante de integración para EDOs de segundo orden.

Variable: `%k2`

  `%k2` es la segunda constante de integración para EDOs de segundo orden.

Función: gauss_a (a, b, c, x)

  `gauss_a(a,b,c,x)` y `gauss_b(a,b,c,x)` son funciones geométricas 2F1 . Representan dos soluciones independientes cualesquiera de la ecuación 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).

  El único uso que se hace de estas funciones es en las soluciones de EDOs que devuelven `odelin` y `contrib_ode`. La definición y utilización de estas funciones puede cambiar en futuras distribuciones de Maxima.

  Véanse también `gauss_b`, `dgauss_a` y `gauss_b`.

Función: gauss_b (a, b, c, x)

  Véase también `gauss_a`.

Función: dgauss_a (a, b, c, x)

  The derivative with respect to x of `gauss_a(a,b,c,x)`.

Función: dgauss_b (a, b, c, x)

  Derivada de `gauss_b(a,b,c,x)` respecto de x.

Función: kummer_m (a, b, x)

  Función M de Kummer, tal como la definen Abramowitz y Stegun, Handbook of Mathematical Functions, Sección 13.1.2.

  El único uso que se hace de esta función es en las soluciones de EDOs que devuelven `odelin` y `contrib_ode`. La definición y utilización de estas funciones puede cambiar en futuras distribuciones de Maxima.

  Véanse también `kummer_u`, `dkummer_m` y `dkummer_u`.

Función: kummer_u (a, b, x)

  Función U de Kummer, tal como la definen Abramowitz y Stegun, Handbook of Mathematical Functions, Sección 13.1.3.

  Véase también `kummer_m`.

Función: dkummer_m (a, b, x)

  Derivada de `kummer_m(a,b,x)` respecto de x.

Función: dkummer_u (a, b, x)

  Derivada de `kummer_u(a,b,x)` respecto de x.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 43.3 Posibles mejoras a contrib_ode

Este paquete aún se encuentra en fase de desarrollo. Aspectos pendientes:

- Extender el método FACTOR `ode1_factor` para que trabaje con raíces múltiples.
- Extender el método FACTOR `ode1_factor` para que intente resolver factores de orden superior. En este momento sólo intenta resolver factores lineales.
- Modificar la rutina LAGRANGE `ode1_lagrange` para que prefiera raíces reales a las complejas.
- Añadir más métodos para las ecuaciones de RIccati.
- Mejorar la identificación de las ecuaciones de Abel de segunda especie. El procedimiento actual no es muy bueno.
- Trabajar la rutina del grupo simétrico de Lie `ode1_lie`. Existen algunos problemas: algunas partes no están implementadas, algunos ejemplos no terminan de ejecutarse, otros producen errors, otros devuelven respuestas muy complejas.
- Hacer más pruebas.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 43.4 Pruebas realizadas con contrib_ode

Los procedimientos fueron probados con cerca de mil ecuaciones tomadas de Murphy, Kamke, Zwillinger y otros. Éstas se encuentran en el directorio de pruebas.

- La rutina de Clairault `ode1_clairault` encuentra todas las soluciones conocidas, incluídas las singulares, de las ecuaciones de Clairault en Murphy y Kamke.
- Las otras rutinas a veces devuelven una sola solución cuando existen más.
- Algunas de las soluciones devueltas por `ode1_lie` son demasiado complejas e imposibles de interpretar.
- A veces se producen detenciones imprevistas del procedimiento.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 43.5 Referencias 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 ODE Patterns, Computer Physics Communications 113 (1998), p 239. (http://lie.uwaterloo.ca/papers/ode_vii.pdf)
7. E. S. Cheb-Terrab, T. Kolokolnikov, First Order ODEs, 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 differential equations 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] | [Index] | [ ? ]

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