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]