Next: Функции и переменные пакета contrib_ode, Previous: Пакет contrib_ode, Up: Пакет contrib_ode [Contents][Index]
Стандартная процедура 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]