Introducción a contrib_ode (Manual de Maxima 5.44.0)

Siguiente: Funciones y variables para contrib_ode, Anterior: contrib_ode, Subir: contrib_ode [Índice general][Índice]

### 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)`.

Siguiente: Funciones y variables para contrib_ode, Anterior: contrib_ode, Subir: contrib_ode [Índice general][Índice]