Задачи высшей математики с Maxima
3.8.4 Операторный метод решения
Для решения систем обыкновенных линейных дифференциальных уравнений в Maxima имеется функция . Работа функции основана на преобразовании Лапласа заданных дифференциальных уравнений.
Пусть задана функция действительного переменного , которая удовлетворяет следующим условиям:
- однозначна и непрерывна вместе со своими производными -го порядка для всех , кроме тех, где она и ее производные имеют разрывы 1-го рода. При этом в каждом конечном интервале изменения имеется конечное число точек разрыва;
- для всех ;
- возрастает медленнее некоторой экспоненциальной функции , где и — некоторые положительные величины, т.е. всегда можно указать такие и , чтобы при любом соблюдалось неравенство .
Рассматриваемой функции ставится в соответствие новая функция, определяемая равенством
где — положительное действительное число или комплексное число с положительной действительной частью.Функция при этом называется оригиналом, а — изображением функции по Лапласу. Переход от оригинала к изображению называется преобразованием Лапласа. Соответственно, обратный переход от изображения к оригиналу называется обратным преобразованием Лапласа.
Для преобразования Лапласа выполняется теорема единственности: если две непрерывные функции и имеют одно и то же изображение по Лапласу , то они тождественно равны.
С помощью операционного исчисления можно сравнительно просто решать различные задачи, сводящиеся к интегрированию линейных дифференциальных уравнений. Переход от исходных функций к их изображениям позволяет заменить решение системы дифференциальных уравнений решением системы алгебраических уравнений (но при этом обратное преобразование Лапласа может быть достаточно сложной задачей).
При вычислении преобразования Лапласа производные заменяются алгебраическими выражениями следующего вида:
и т.д., поэтому использование преобразования Лапласа для решения систем ОДУ требует задания начальных условий.Использование ограничивается одним из свойств преобразования Лапласа: если , то . Поэтому предполагает, что решается система ОДУ с постоянными коэффициентами.
Синтаксис вызова , где — список решаемых дифференциальных уравнений, — список искомых функций. При использовании необходимо явно задавать функциональные зависимости (вместо использовать запись ).
Примеры использования :
Система ОДУ первого порядка:
(%i1) de1:diff(f(x),x)=diff(g(x),x)+sin(x);
(%i2) de2:diff(g(x),x,2)=diff(f(x),x) - cos(x);
(%i3) desolve([de1,de2],[f(x),g(x)]);
Единичное дифференциальное уравнение второго порядка:
(%i1) de3:diff(f(x),x,2)+f(x) = 2*x;
(%i2) desolve(de3,f(x));
Для указания начальных условий используется функция .
Синтаксис вызова: a
Функция присваивает значение c выражению в точке . Выражение — функция или производной Здесь — порядок дифференцирования по переменной .
Пример использования и :
(%i1) de1:diff(f(x),x)=diff(g(x),x)+sin(x);
(%i2) de2:diff(g(x),x,2)=diff(f(x),x) - cos(x);
(%i3) atvalue(f(x),x=0,1);
(%i4) atvalue(g(x),x=0,2);
(%i5) atvalue(diff(g(x),x),x=0,3);
(%i6) desolve([de1,de2],[f(x),g(x)]);
Управление начальными условиями осуществляется при помощи функций и . Функция (синтаксис вызова — ) печатает свойства переменной (атома ), а функция печатает информацию о заданном свойстве переменной. Кроме того, функция вычисляет значение выражения в заданной точке с учетом свойства .
Синтаксис вызова :
Данная функция позволяет просмотреть свойства атома (или группы атомов Lisp, указанных в списке), определённые индикатором .
Отмена установок, произведённых , осуществляется функцией (удаление свойства у атомов осуществляется вызовом remove(a1,p1,... ,an,pn); удаление списка свойств — вызовом ).
Пример синтаксиса и использования рассмотренных функций:
(%i1) eq1:'diff(f(x),x)='diff(g(x),x)+sin(x);
(%i2) eq2:'diff(g(x),x,2)='diff(f(x),x)-cos(x);
(%i3) atvalue('diff(g(x),x),x=0,a);
(%i4) atvalue(f(x),x=0,1);
(%i5) properties(f);
(%i6) printprops(f,atvalue);
(%i7) desolve([eq1,eq2],[f(x),g(x)]);
(%i8) at(%,[x=1]);
Ещё один пример анализа свойств:
(%i9) atvalue (f(x,y), [x = 0, y = 1], a^2);
(%i10) atvalue ('diff (f(x,y), x), x = 0, 1 + y);
(%i11) printprops (all, atvalue);