Кафедра: Информационные Технологии
Лабораторная Работа
На тему: РЕШЕНИЕ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ
Москва, 2008 год
РЕШЕНИЕ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ
Цели работы:
· знать команды, используемые при решении обыкновенных дифференциальных уравнений в системе вычислений Maple;
· уметь применять указанные команды для решения математических задач.
ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Решение обыкновенных дифференциальных уравнений.
С помощью команды dsolve ( ) можно получить аналитическое решение дифференциального уравнения, а можно и сформировать процедуру построения численного решения задачи Коши, если система Maple не сможет найти общее решение в аналитическом виде. Наиболее общий синтаксис вызова команды решения дифференциального уравнения следующий:
dsolve (уравнения, неизвестные, [опции]);
Параметром уравнения задается одно дифференциальное уравнение или система дифференциальных уравнений. В последнем случае все уравнения системы должны быть представлены в виде множества (их список через запятую следует заключить в фигурные скобки). Параметр неизвестные определяет неизвестную функцию дифференциального уравнения или неизвестные функции системы дифференциальных уравнений, которые, как и сами уравнения системы, должны быть представлены в виде множества. Необязательный параметр опции, определяемый в виде ключевое_значение = значение, позволяет задать методы и форму представления решения.
Чтобы задать производную искомой функции в дифференциальном уравнении используют команду diff ( ) или оператор D, причем саму неизвестную функцию следует определять с явным указанием независимой переменной, например у(х). Оператор D определяет операцию дифференцирования и имеет следующий синтаксис:
(D@@n) (функция) (переменная);
В этой записи n представляет целое число, определяющее порядок производной, параметр функция – используемый идентификатор функции, а параметр переменная – независимую переменную функции. Например, производная второго порядка функции f (х) с использованием этого оператора задается так:
(D@@ 2) (f) (x);
Ниже представлены несколько примеров задания дифференциальных уравнений и систем дифференциальных уравнений:
> ex1:=diff(y(x),x$3)+k^2*y(x)=0;
> ex2:=(D@@3)(y)(x)+k^2*y(x)=cos(k1*x);
> sys1:={D(y1)(x)=a[1,1]*y1(x)+a[1,2]*y2(x),
D(y2)(x)=a[2,1]*y1(x)+a[2,2]*y2(x)};
Заметим, что в приведенных примерах и уравнения, и система уравнений сохраняются в переменных Maple. Как отмечалось ранее, это достаточно распространенный прием, позволяющий использовать в дальнейшем заданные уравнения простой ссылкой на обычную переменную.
Решим одно из известных уравнений:
> ex3:=diff(y(x),x$2)+k^2*y(x)=0;
> dsolve(ex3,y(x));
Найдено общее решение дифференциального уравнения, в котором переменные С1 и С2 – это сгенерированные Maple специальные переменные, представляющие произвольные константы общего решения дифференциального уравнения второго порядка. Этот пример показывает, что при отсутствии каких-либо опций система Maple пытается найти точное общее решение в явном виде. Если в явном виде решения не существует, то система попытается найти его в неявном виде, как видно из следующего примера:
> ex4:=diff(y(x),x)=-sqrt(x^2-y(x))+2*x;
> dsolve(ex4,y(x));
> isolate(%,y(x));
Команда isolate ( ) в этом примере выражает заданное вторым параметром выражение (у(х)) из уравнения, определяемого первым параметром (в нашем случае из неявного вида общего решения дифференциального уравнения).
По умолчанию команда dsolve ( ) сначала пытается найти общее решение в явном виде, и если таковое не удается найти, то решение выдается в неявном виде (конечно, при условии его существования). Можно "озадачить" Maple поиском общего решения в явном виде, используя опцию explicit = true (по умолчанию используется explicit = false):
> dsolve(ex4,y(x),explicit=true);
Как видим, в этом случае мы действительно получили сразу же решение в явном виде, но оно представлено через функцию Rootof ( ), так что наш первоначальный подход к решению дифференциального уравнения оказался более продуктивным.
Не для любого дифференциального уравнения удается найти общее решение в явном или неявном виде. В этом случае можно построить приближенное решение в форме ряда Тейлора. Для этого нужно задать опцию
type=series в команде dsolve ( ) (по умолчанию используется type=exact), а также установкой значения системной переменной Order определить, до какого порядка малости относительно независимой переменной функции ищется разложение решения в ряд Тейлора в окрестности нулевой точки:
> Order:=4;
> eqq:=(D@@2)(y)(x)+(a*x^2)*D(y)(x)+y(x)=0;
> dsolve(eqq,y(x),type=series);
Заметим, что в решении дифференциального уравнения второго порядка, представленном рядом Тейлора, в качестве постоянных используются значения искомой функции и ее первой производной в точке х=0: у(0), D(y)(0).
Для решения задачи Коши или краевой задачи необходимо задать первый параметр команды dsoive( ) в виде множества, элементами которого являются само уравнение и все начальные или краевые условия. Решим задачу Коши и краевую задачу для следующего дифференциального уравнения второго порядка:
> eqn1:=diff(y(x),x$2)+k^2*y(x)=0;
Задача Коши для этого дифференциального уравнения второго порядка требует задания в нулевой точке значения неизвестной функции и ее первой производной. Ее решение представлено ниже:
> dsolve({eqn1,y(0)=0,D(y)(0)=1},y(x));
Краевая задача для этого дифференциального уравнения второго порядка требует задания в двух точках, например, х = 0 и х = 1 значения неизвестной функции. Ее решение также получено с помощью команды dsolve ( ):
> dsolve({eqn1,y(0)=0,y(1)=1},y(x));
Начальные или краевые условия задаются в виде уравнений, в левой части которых определен задаваемый параметр (значение неизвестной функции или ее производной необходимого порядка) в соответствующей точке, а в правой части значение этого параметра. При задании производных в начальных или краевых условиях следует использовать оператор D — команда diff ( ) здесь не употребляется.
Если точное решение задачи Коши или краевой задачи системой Maple не найдено, а приближенное решение в виде ряда Тейлора нас не устраивает, то можно построить численное решение, опять-таки с использованием все той же команды dsoive ( ). Для этого задают опцию type = numeric, а с помощью опции method = метод определяют используемый для построения численного решения метод. Параметр метод принимает одно из значений, представленных в табл. 1.
Таблица 1. Значения опции method при численном решении дифференциальных уравнений.
Значение | Описание |
Rkf45 | Метод Рунге-Кутта-Фальберга порядка 4-5 |
Dverk78 | Метод Рунге-Кутта порядка 7-8 |
По умолчанию (если не задана опция method) применяется метод Рунге-Кутта-Фальберга порядка 4-5. При использовании численного решения следует помнить, что все параметры дифференциального уравнения (символьные константы) должны быть определены. Например, для задачи Коши уравнения eqn1 предыдущего примера следует задать численное значение для параметра k.
Численное решение строится в форме процедуры Maple, поэтому следует некоторой переменной присвоить результат построения командой dsolve ( ) численного решения в виде процедуры. В дальнейшем имя этой переменной можно использовать как имя процедуры для вычисления значения решения задачи Коши в некоторой точке, соответствующей значению независимой переменной функции решения. Это значение передается в процедуру как ее параметр – после имени процедуры в круглых скобках. Следующий пример демонстрирует построение численного решения задачи Коши и его использование.
> eqn1:=diff(y(x),x$2)+k^2*y(x)=0;
Переменной f присваиваем результат численного решения задачи Коши для дифференциального уравнения второго порядка (в нулевой точке задается значение неизвестной функции и ее первой производной):
> F:=dsolve({eqn1,y(0)=0,D(y)(0)=1},y(x),type=numeric);
Если не присвоить параметру k конкретного числового значения, то попытка получить значение решения в точке, например х = 1, приведет к ошибке:
> F(1);
Error, (in dsolve/numeric/rkf45) cannot evaluate boolean: 2.+abs(.2511886433e-1-.2016799760e-5*k^2-.3377712687e-4*k^2*(.2318664400e-1-.3700729218e-5*k^2)+.6309573448e-5*k^2*(.2511886433e-1-.6603721651e-5*k^2)) <= 0.
Следует обязательно определить все символьные параметры дифференциального уравнения числовыми значениями перед использованием численного решения: