@c Language=Russian
@c Encoding=CP1251
@c File=Differential.texi
@c OriginalRevision=1.13
@c TranslatedBy: (c) 2007-09-05 Alexey V. Beshenov <al@beshenov.ru>

@menu
* Дифференциальные уравнения в Maxima::  
* Функции и переменные для дифференциальных уравнений::  
@end menu

@node Дифференциальные уравнения в Maxima, Функции и переменные для дифференциальных уравнений, Дифференциальные уравнения, Дифференциальные уравнения

@section Дифференциальные уравнения в Maxima

Этот раздел описывает функции Maxima для аналитического решения некоторых
типов дифференциальных уравнений первого и второго порядка. Для получения
численного решения системы дифференциальных уравнений используйте дополнительный
пакет @code{dynamics}, для графического представления в фазовом пространстве -
пакет @code{plotdf}.

@node Функции и переменные для дифференциальных уравнений,  , Дифференциальные уравнения в Maxima, Дифференциальные уравнения

@section Функции и переменные для дифференциальных уравнений

@deffn {Функция} bc2 (@var{solution}, @var{xval1}, @var{yval1}, @var{xval2}, @var{yval2})

Решает краевую задачу для дифференциального уравнения второго порядка.
Здесь @var{solution} - общее решение уравнения, полученное @code{ode2}; @var{xval1}
задает значение независимой переменной в начальной точке в виде
@code{@var{x} = @var{x1}} и @var{yval1} задает значение зависимой переменной
в этой точке в виде @code{@var{y} = @var{y1}}. Выражения @var{xval2} и @var{yval2}
определяют значения для этих переменных во второй точке, используя ту же запись.

Пример использования см. в @code{ode2}.

@opencatbox
@category{Дифференциальные уравнения}
@closecatbox
@end deffn


@deffn {Функция} desolve (@var{eqn}, @var{x})
@deffnx {Функция} desolve ([@var{eqn_1}, ..., @var{eqn_n}], [@var{x_1}, ..., @var{x_n}])
Функция @code{desolve} решает линейные системы обыкновенных дифференциальных уравнений
при помощи преобразования Лапласа. Здесь @var{eqn} - дифференциальные уравнения со
связанными переменными @var{x_1}, ..., @var{x_n}. Функциональная зависимость между
@var{x_1}, ..., @var{x_n} или от независимой переменной, например, @var{x},
должна явно задаваться в переменных и их производных. Например, следующее определение
двух уравнений неверно:

@example
eqn_1: 'diff(f,x,2) = sin(x) + 'diff(g,x);
eqn_2: 'diff(f,x) + x^2 - f = 2*'diff(g,x,2);
@end example

Правильная запись -

@example
eqn_1: 'diff(f(x),x,2) = sin(x) + 'diff(g(x),x);
eqn_2: 'diff(f(x),x) + x^2 - f(x) = 2*'diff(g(x),x,2);
@end example

Тогда вызов функции @code{desolve} будет иметь вид
@example
desolve([eqn_1, eqn_2], [f(x),g(x)]);
@end example

Если известны начальные условия в @code{x=0}, то при помощи @code{atvalue} их можно
дополнительно определить до вызова @code{desolve}.

@c ===beg===
@c 'diff(f(x),x)='diff(g(x),x)+sin(x);
@c 'diff(g(x),x,2)='diff(f(x),x)-cos(x);
@c atvalue('diff(g(x),x),x=0,a);
@c atvalue(f(x),x=0,1);
@c desolve([%o1,%o2],[f(x),g(x)]);
@c [%o1,%o2],%o5,diff;
@c ===end===
@example
(%i1) @b{@t{'diff(f(x),x)='diff(g(x),x)+sin(x);}}
                 d           d
(%o1)            -- (f(x)) = -- (g(x)) + sin(x)
                 dx          dx
(%i2) @b{@t{'diff(g(x),x,2)='diff(f(x),x)-cos(x);}}
                  2
                 d            d
(%o2)            --- (g(x)) = -- (f(x)) - cos(x)
                   2          dx
                 dx
(%i3) @b{@t{atvalue('diff(g(x),x),x=0,a);}}
(%o3)                           a
(%i4) @b{@t{atvalue(f(x),x=0,1);}}
(%o4)                           1
(%i5) @b{@t{desolve([%o1,%o2],[f(x),g(x)]);}}
                  x
(%o5) [f(x) = a %e  - a + 1, g(x) = 

                                                x
                                   cos(x) + a %e  - a + g(0) - 1]
(%i6) @b{@t{[%o1,%o2],%o5,diff;}}
             x       x      x                x
(%o6)   [a %e  = a %e , a %e  - cos(x) = a %e  - cos(x)]

@end example

Если @code{desolve} не может получить решение, возвращается @code{false}.

@opencatbox
@category{Дифференциальные уравнения} @category{Преобразование Лапласа}
@closecatbox
@end deffn

@deffn {Функция} ic1 (@var{solution}, @var{xval}, @var{yval})

Решает задачи с начальными условиями для дифференциальных уравнений
первого порядка. Здесь @var{solution} - общее решение уравнения, полученное
@code{ode2}; @var{xval} задает начальное значение независимой переменной
в виде @code{@var{x} = @var{x0}}, и @var{yval} задает начальное значение зависимой
переменной в виде @code{@var{y} = @var{y0}}.

Пример использования см. в @code{ode2}.

@opencatbox
@category{Дифференциальные уравнения}
@closecatbox
@end deffn

@deffn {Функция} ic2 (@var{solution}, @var{xval}, @var{yval}, @var{dval})

Решает задачи с начальными условиями для дифференциальных уравнений
второго порядка. Здесь @var{solution} - общее решение уравнения, полученное
@code{ode2}; @var{xval} задает начальное значение независимой переменной
в виде @code{@var{x} = @var{x0}}, @var{yval} задает начальное значение зависимой
переменной в виде @code{@var{y} = @var{y0}}, и @var{dval} задает начальное значение
для первой производной зависимой переменной по независимой в виде
@code{diff(@var{y},@var{x}) = @var{dy0}} (перед @code{diff} не нужно ставить кавычку).

Пример использования см. в @code{ode2}.

@opencatbox
@category{Дифференциальные уравнения}
@closecatbox
@end deffn

@deffn {Функция} ode2 (@var{eqn}, @var{dvar}, @var{ivar})

Функция @code{ode2} решает обыкновенное дифференциальное уравнение (ОДУ)
первого или второго порядка. Она принимает три аргумента: ОДУ @var{eqn},
зависимую переменную @var{dvar} и независимую переменную @var{ivar}.
При удачном результате возвращается явное или неявное решение относительно
зависимой переменной. @code{%c} используется для представления константы
интегрирования в случае уравнений первого порядка; @code{%k1} и @code{%k2} -
константы в решениях уравнений второго порядка. Зависимость зависимой
переменной от независимой не требуется указывать явно, как в случае с
@code{desolve}, но независимая переменная должна всегда указываться в
качестве третьего аргумента.

Если по каким-то причинам @code{ode2} не может получить решение, возвращается
@code{false}, и, возможно, печатается сообщение об ошибке. Методы
решения уравнений первого порядка (в том порядке, в каком Maxima пытается
их применять): линейный, разделение переменных, явный - возможно, используется
интегрирующий множитель, однородное уравнение, уравнение Бернулли и обобщенный
однородный метод.

Типы решаемых уравнений второго порядка:
уравнение с постоянными коэффициентами, явное, линейное однородное с непостоянными
коэффициентами, преобразующимися к постоянным, уравнение Эйлера (или равноразмерное),
уравнения, решаемые методом вариации переменных, а также уравнения без независимой
или зависимой переменной, сводимые для последующего решения к линейным уравнениям
первого порядка.

В ходе решения ОДУ чисто для справки устанавливается несколько переменных:
@code{method} указывает на использованный метод решения (например, @code{linear}),
@code{intfactor} - использованный интегрирующий множитель, @code{odeindex} -
коэффициент, примененный в методе Бернулли или обобщенном однородном методе, а
@code{yp} - частное решение для метода вариации переменных.

Для решения задач с начальными условиями для уравнений первого и второго
порядка доступны функции @code{ic1} и @code{ic2}, а для решения краевых задач
может использоваться функция @code{bc2}.

Пример:

@c ===beg===
@c x^2*'diff(y,x) + 3*y*x = sin(x)/x;
@c ode2(%,y,x);
@c ic1(%o2,x=%pi,y=0);
@c 'diff(y,x,2) + y*'diff(y,x)^3 = 0;
@c ode2(%,y,x);
@c ratsimp(ic2(%o5,x=0,y=0,'diff(y,x)=2));
@c bc2(%o5,x=0,y=1,x=1,y=3);
@c ===end===
@example
(%i1) @b{@t{x^2*'diff(y,x) + 3*y*x = sin(x)/x;}}
                      2 dy           sin(x)
(%o1)                x  -- + 3 x y = ------
                        dx             x
(%i2) @b{@t{ode2(%,y,x);}}
                             %c - cos(x)
(%o2)                    y = -----------
                                  3
                                 x
(%i3) @b{@t{ic1(%o2,x=%pi,y=0);}}
                              cos(x) + 1
(%o3)                   y = - ----------
                                   3
                                  x
(%i4) @b{@t{'diff(y,x,2) + y*'diff(y,x)^3 = 0;}}
                         2
                        d y      dy 3
(%o4)                   --- + y (--)  = 0
                          2      dx
                        dx
(%i5) @b{@t{ode2(%,y,x);}}
                      3
                     y  + 6 %k1 y
(%o5)                ------------ = x + %k2
                          6
(%i6) @b{@t{ratsimp(ic2(%o5,x=0,y=0,'diff(y,x)=2));}}
                             3
                          2 y  - 3 y
(%o6)                   - ---------- = x
                              6
(%i7) @b{@t{bc2(%o5,x=0,y=1,x=1,y=3);}}
                         3
                        y  - 10 y       3
(%o7)                   --------- = x - -
                            6           2

@end example

@opencatbox
@category{Дифференциальные уравнения}
@closecatbox
@end deffn
