Next: , Previous: , Up: Top   [Contents][Index]

42 Пакет contrib_ode


Next: , Previous: , 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 возвращает список решений. Решение может иметь несколько различных форм:

%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: , Previous: , Up: Пакет contrib_ode   [Contents][Index]

42.2 Функции и переменные пакета contrib_ode

Функция: contrib_ode (eqn, y, x)

Возвращает список решение ОДУ eqn с независимой переменной x и зависимой переменной y.

Функция: odelin (eqn, y, x)

Функция 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

Функция: ode_check (eqn, soln)

Возвращает значение ОДУ 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

Переменной method присваивается название метода успешного решения ОДУ.

Переменная: %c

%c – константа интегрирования для ОДУ первого порядка.

Переменная: %k1

%k1 – первая константа интегрирования для ОЛУ второго порядка.

Переменная: %k2

%k2 – вторая константа интегрирования для ОЛУ второго порядка.

Функция: gauss_a (a, b, c, x)

Функции 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_b (a, b, c, x)

См. gauss_a.

Функция: dgauss_a (a, b, c, x)

Производная gauss_a(a, b, c, x) по x.

Функция: dgauss_b (a, b, c, x)

Производная gauss_b(a, b, c, x) по x.

Функция: kummer_m (a, b, x)

M-функция Куммера, как она определена в Abramowitz и Stegun, Handbook of Mathematical Functions, Section 13.1.2.

Эта функция используются только в решениях ОДУ, возвращаемых odelin и contrib_ode. Определение и использование этой функции может измениться в последующих релизах Maxima.

См. также kummer_u, dkummer_m и dkummer_u.

Функция: kummer_u (a, b, x)

U-функция Куммера, как она определена в Abramowitz и Stegun, Handbook of Mathematical Functions, Section 13.1.3.

См. kummer_m.

Функция: dkummer_m (a, b, x)

Производная kummer_m(a, b, x) по x.

Функция: dkummer_u (a, b, x)

Производная kummer_u(a, b, x) по x.


Next: , Previous: , Up: Пакет contrib_ode   [Contents][Index]

42.3 Возможные улучшения пакета contrib_ode

Данные процедуры находятся в процессе разработки. Необходимо:


Next: , Previous: , Up: Пакет contrib_ode   [Contents][Index]

42.4 Тесты пакета contrib_ode

Процедуры были протестированы на приблизительно одной тысяче примеров из книг Murphy, Kamke, Zwillinger и других. Эти тесты включены в директорию tests.


Previous: , Up: Пакет contrib_ode   [Contents][Index]

42.5 Ссылки для пакета contrib_ode

  1. E. Kamke, Differentialgleichungen Losungsmethoden und Losungen, Vol 1, Geest & Portig, Leipzig, 1961
  2. G. M. Murphy, Ordinary Differential Equations and Their Solutions, Van Nostrand, New York, 1960
  3. D. Zwillinger, Handbook of Differential Equations, 3rd edition, Academic Press, 1998
  4. F. Schwarz, Symmetry Analysis of Abel’s Equation, Studies in Applied Mathematics, 100:269-294 (1998)
  5. F. Schwarz, Algorithmic Solution of Abel’s Equation, Computing 61, 39-49 (1998)
  6. E. S. Cheb-Terrab, A. D. Roche, Symmetries and First Order ODE Patterns, Computer Physics Communications 113 (1998), p 239. (http://lie.uwaterloo.ca/papers/ode_vii.pdf)
  7. E. S. Cheb-Terrab, T. Koloknikov, First Order ODEs, Symmetries and Linear Transformations, European Journal of Applied Mathematics, Vol. 14, No. 2, pp. 231-246 (2003). (http://arxiv.org/abs/math-ph/0007023, http://lie.uwaterloo.ca/papers/ode_iv.pdf)
  8. G. W. Bluman, S. C. Anco, Symmetry and Integration Methods for Differential Equations, Springer, (2002)
  9. M. Bronstein, S. Lafaille, Solutions of linear ordinary differential equations in terms of special functions, Proceedings of ISSAC 2002, Lille, ACM Press, 23-28. (http://www-sop.inria.fr/cafe/Manuel.Bronstein/publications/issac2002.pdf)

Previous: , Up: Пакет contrib_ode   [Contents][Index]