Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алфавит и синтаксис Maple.doc
Скачиваний:
26
Добавлен:
27.04.2019
Размер:
848.38 Кб
Скачать

4.11. Решение дифференциальных уравнений

Для решения обыкновенных дифференциальных уравнений и систем используется функция вида

dsolve(deqns, vars) или dsolve(deqns, vars, eqns) .

Здесь deqns – обыкновенное дифференциальное уравнение или система уравнений и начальных условий;

vars – переменная или набор переменных, относительно которых необходимо решить уравнения;

eqns – этот параметр может принимать значения: type=exact, type=series, type=numeric, explicit=true, explicit=false, method=laplace, type=series, output=basis, type=numeric.

Функция dsolve способна найти решения в замкнутом виде для многих дифференциальных уравнений. Если задан параметр type=exact (по умолчанию), то система пытается найти точное аналитическое решение. Решение возвращается в виде уравнения y(x) или в параметрической форме вида x=f(_T), y(x)=g(_T), где _T – параметр. Константы, входящие в общее решение, представляются в виде _C1, _C2, ..., _Cn.

Если задан параметр explicit=true, то решение, по возможности, будет возвращено в явном виде. По умолчанию считается explicit=false.

Значение method=laplace задаёт способ решения с использования преобразования Лапласа. Одно из преимуществ этого метода – то, что в этом случае уравнения могут содержать функции с особенностями, например Дирака или Хевисайда.

Значение type=series задаёт метод решения в рядах. Порядок решения определяется значением переменной среды Order. Напомним, что формальные производные можно задавать с помощью оператора D. Например, вторая производная функции y в точке 0 может быть записана как D(D(y))(0) или (D@@2)(y)(0).

По значению output=basis система возвращает список, содержащий множество функций, входящих в общее решение однородного уравнения. Для неоднородных уравнений этот список содержит ещё и частные решения.

Значение type=numeric определяет, что решение будет находиться численно. Если используется это значение, то после него может быть указан метод решения – одно из значений:

method=rkf45 – метод Рунге-Кутта 4,5-го порядка, используется по умолчанию;

method=dverk78 – метод Рунге-Кутта 7,8-го порядка;

method=classical – некоторые классические методы типа метода Эйлера второго порядка. Используется фиксированный шаг, что не подходит для высоких точностей вычислений;

method=gear, method=mgear – одношаговый и многошаговый методы Геарса;

method=lsode – метод Левермора решения жестких задач для ОДУ.

Для каждого из методов решения имеется набор дополнительных режимов. Более подробную информацию по каждому из методов можно посмотреть командами ?dsolve[numeric], ?dsolve[rkf45], ?dsolve[dverk78], ?dsolve[classical], ?dsolve[gear], ?dsolve[mgear], ?dsolve[lsode].

Кроме этой команды в системе имеется дополнительная библиотека Detools, предназначенная для решения и визуализации обыкновенных дифференциальных уравнений и уравнений в частных производных.

Примеры:

> eqn:=diff(y(x),x$2)-y(x)=0;

> dsolve(eqn,y(x));

y(x) = _C1 exp(x) + _C2 exp(-x)

Сделаем проверку:

> simplify(subs(%,eqn));

0 = 0

> dsolve({diff(v(t),t)+2*t=0, v(1)=5}, v(t));

2

v(t) = -t + 6

> dsolve(diff(y(x),x) - a*y(x) = 0, y(x), explicit=true);

y(x) = exp(a x) _C1

> dsolve({diff(y(t),t$2)+5*diff(y(t),t)+6*y(t)=0,y(0)=0, D(y)(0)=1}, y(t));

y(t) = exp(-2 t) - exp(-3 t)

>eqn1:=diff(y(t),t)=z(t),diff(z(t),t)=y(t);

> eqn2:=y(0)=0, z(0)=1;

eqn2 := y(0) = 0, z(0) = 1

> dsolve({eqn1,eqn2},{y(t),z(t)});

{z(t) = 1/2 exp(-t) + 1/2 exp(t), y(t) = 1/2 exp(t) - 1/2 exp(-t)}