Maxima Manual: Введение в пакет contrib_ode

Next: Функции и переменные пакета contrib_ode, Previous: Пакет contrib_ode, Up: Пакет contrib_ode [Contents][Index]

### 42.1 Введение в пакет contrib_ode

Стандартная процедура Maxima для решения обычных дифференциальных уравнений (ОДУ) `ode2` решает элементарные линейные ОДУ первого и второго порядка. Функция `contrib_ode` расширяет `ode2` дополнительными методами для линейных и нелинейных ОДУ первого порядка и линейных однородных ОДУ второго порядка. Даная программа находится в состоянии развития и форма вызова функций может измениться в последующих релизах. После стабилизации код может быть перемещен из директории contrib и интегрирован в ядро Maxima.

Для использования пакет должен быть загружен с помощью команды `load("contrib_ode")`.

Функция `contrib_ode` вызывается также, как `ode2`. Она имеет три аргумента: ОДУ (если правая часть уравнения равна 0, то достаточно задать только левые части уравнений), зависимая переменная и независимая переменная. В случае успеха возвращается список решений.

Представление решений отличается от такового для `ode2`. Т.к. нелинейные уравнения могут иметь множественные решения., то `contrib_ode` возвращает список решений. Решение может иметь несколько различных форм:

- явное решение для зависимой переменной,
- неявное решение для зависимой переменной,
- параметрическое решение с параметром `%t`
- преобразование в другое ОДУ для зависимой переменной `%u`.

`%c` представляет константу интегрирования для уравнений первого порядка. `%k1` и `%k2` – константы интегрирования для уравнений второго порядка. Если `contrib_ode` не может получить решение, то возвращается `false`, возможно, после печати сообщения об ошибке.

Необходимо возвращать список решений, т.к. нелинейные ОДУ первого порядка могут иметь множественные решения. Например:

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

Нелинейные ОДУ могут иметь особые решения, не имеющие констант интегрирования, как второе решение в следующем примере:

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

Следующее ОДУ имеет два параметрических решение в терминах переменной `%t`. Из этих параметрических решений можно получить явные решения.

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

Следующий пример (Камке 1.112) демонстрирует неявное решение.

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

Следующее уравнение Рикатти преобразуется в линейное ОДУ второго порядка для переменной `%u`. Maxima не может решить новое уравнение, и оно возвращается нерешенным.

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

Для ОДУ первого порядка `contrib_ode` вызывает `ode2`. Затем применяются методы: факторизации, Клеро, Лагранжа, Рикатти, Абеля и метод симметрий Ли. Метод Ли не применяется к уравнениям Абеля, если метод Абеля не дает результата, но применяется если метод Рикатти возвращает нерешенное ОДУ второго порядка.

Для ОДУ второго порядка `contrib_ode` вызывает `ode2`, а затем `odelin`.

Если выполнена команда `put('contrib_ode,true,'verbose)`, то печатается подробная отладочная информация.

Next: Функции и переменные пакета contrib_ode, Previous: Пакет contrib_ode, Up: Пакет contrib_ode [Contents][Index]