Next: Пакет descriptive, Previous: Пакет bode, Up: Top [Contents][Index]
| • Введение в пакет contrib_ode: | ||
| • Функции и переменные пакета contrib_ode: | ||
| • Возможные улучшения пакета contrib_ode: | ||
| • Тесты пакета contrib_ode: | ||
| • Ссылки для пакета contrib_ode: |
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]
Возвращает список решение ОДУ eqn с независимой переменной x и зависимой переменной y.
Функция odelin решает линейные однородные ОДУ первого и второго
порядка с независимой переменной x и зависимой переменной y.
Она возвращает фундаментальный набор решений ОДУ.
Для ОДУ второго порядка odelin использует метод Бронштейна-Лафаля,
который ищет решение в терминах заданных специальных функций.
(%i1) load("contrib_ode");
(%i2) odelin(x*(x+1)*'diff(y,x,2)+(x+5)*'diff(y,x,1)+(-4)*y,y,x);
...trying factor method
...solving 7 equations in 4 variables
...trying the Bessel solver
...solving 1 equations in 2 variables
...trying the F01 solver
...solving 1 equations in 3 variables
...trying the spherodial wave solver
...solving 1 equations in 4 variables
...trying the square root Bessel solver
...solving 1 equations in 2 variables
...trying the 2F1 solver
...solving 9 equations in 5 variables
gauss_a(- 6, - 2, - 3, - x) gauss_b(- 6, - 2, - 3, - x)
(%o2) {---------------------------, ---------------------------}
4 4
x x
Возвращает значение ОДУ eqn после подстановки в него возможного решения soln. Значение эквивалентно нулю, если soln является решением eqn.
(%i1) load("contrib_ode")$
(%i2) eqn:'diff(y,x,2)+(a*x+b)*y;
2
d y
(%o2) --- + (a x + b) y
2
dx
(%i3) ans:[y = bessel_y(1/3,2*(a*x+b)^(3/2)/(3*a))*%k2*sqrt(a*x+b)
+bessel_j(1/3,2*(a*x+b)^(3/2)/(3*a))*%k1*sqrt(a*x+b)];
3/2
1 2 (a x + b)
(%o3) [y = bessel_y(-, --------------) %k2 sqrt(a x + b)
3 3 a
3/2
1 2 (a x + b)
+ bessel_j(-, --------------) %k1 sqrt(a x + b)]
3 3 a
(%i4) ode_check(eqn,ans[1]);
(%o4) 0
Переменной method присваивается название метода успешного решения ОДУ.
%c – константа интегрирования для ОДУ первого порядка.
%k1 – первая константа интегрирования для ОЛУ второго порядка.
%k2 – вторая константа интегрирования для ОЛУ второго порядка.
Функции gauss_a(a,b,c,x) и gauss_b(a,b,c,x) есть 2F1
гипергеометрические функции. Они представляют собой два независимых решения
гипергеометрического уравнения
x(1-x) diff(y,x,2) + [c-(a+b+1)x diff(y,x) - aby = 0 (A&S 15.5.1).
Эти функции используются только в решениях ОДУ, возвращаемых
odelin и contrib_ode. Определение и использование этих
функций может измениться в последующих релизах Maxima.
См. также gauss_b, dgauss_a и gauss_b.
См. gauss_a.
Производная gauss_a(a, b, c, x) по x.
Производная gauss_b(a, b, c, x) по x.
M-функция Куммера, как она определена в Abramowitz и Stegun, Handbook of Mathematical Functions, Section 13.1.2.
Эта функция используются только в решениях ОДУ, возвращаемых
odelin и contrib_ode. Определение и использование этой
функции может измениться в последующих релизах Maxima.
См. также kummer_u, dkummer_m и dkummer_u.
U-функция Куммера, как она определена в Abramowitz и Stegun, Handbook of Mathematical Functions, Section 13.1.3.
См. kummer_m.
Производная kummer_m(a, b, x) по x.
Производная kummer_u(a, b, x) по x.
Next: Тесты пакета contrib_ode, Previous: Функции и переменные пакета contrib_ode, Up: Пакет contrib_ode [Contents][Index]
Данные процедуры находятся в процессе разработки. Необходимо:
ode1_factor для работы с множественными корнями.
ode1_factor для решения с множителями
высокого порядка. В настоящий момент метод пытается решить только линейные множители.
ode1_lagrange для преимущественного
использования вещественных корней по отношению с комплексными.
ode1_lie.
С этой процедурой имеется довольно много проблем:
некоторые части не реализованы, некоторые тесты зацикливаются,
некотрые тесты завершаются ошибкой, другие тесты дают слишком сложные
"решения". Данная процедура еще не готова для практического
использования.
Next: Ссылки для пакета contrib_ode, Previous: Возможные улучшения пакета contrib_ode, Up: Пакет contrib_ode [Contents][Index]
Процедуры были протестированы на приблизительно одной тысяче примеров из книг Murphy, Kamke, Zwillinger и других. Эти тесты включены в директорию tests.
ode1_clairault находит все известные решения,
включая особые решения уравнения Клеро из книг Murphy и Kamke.
ode1_lie, излишне сложны и их невозможно
проверить.
Previous: Тесты пакета contrib_ode, Up: Пакет contrib_ode [Contents][Index]
Previous: Тесты пакета contrib_ode, Up: Пакет contrib_ode [Contents][Index]