Introdução a contrib_ode (Manual do Maxima)

Next: Funções e Variáveis Definidas para contrib_ode, Previous: contrib_ode, Up: contrib_ode [Contents][Index]

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

Next: Funções e Variáveis Definidas para contrib_ode, Previous: contrib_ode, Up: contrib_ode [Contents][Index]