Labs Matlab / Lab5 / index3
.htm3 2. Численное решение обыкновенных дифференциальных уравненийИнтерфейс MATLAB
2.1. Численное решение задачи Коши для обыкновенного дифференциального уравнения 1-го порядка
Многие задачи физики, химии, экологии, механики и других разделов науки и техники при их математическом моделировании сводятся к дифференциальным уравнениям. Поэтому решение дифференциальных уравнений является одной из важнейших математических задач. В вычислительной математике изучаются численные методы решения дифференциальных уравнений, которые особенно эффективны в сочетании с использованием персональных компьютеров.
Среди множества численных методов решения дифференциальных уравнений наиболее простые – это явные одношаговые методы. К ним относятся различные модификации метода Рунге-Кутта.
Постановка задачи:
Требуется найти функцию у = у(х), удовлетворяющую уравнению
(1)
и принимающую при х = х0 заданное значение у0:
. (2)
При этом решение необходимо получить в интервале х0 £ х £ хк. Из теории дифференциальных уравнений известно, что решение у(х) задачи Коши (1), (2) существует, единственно и является гладкой функцией, если правая часть F(x, y) удовлетворяет некоторым условиям гладкости.
Численное решение задачи Коши методом Рунге-Кутта 4-го порядка заключается в следующем. На заданном интервале [х0, хк] выбираются узловые точки. Значение решения в нулевой точке известно у(х0) = у0. В следующей точке у(х1) определяется по формуле
, (3)
здесь
(4)
т. е. данный вариант метода Рунге-Кутта требует на каждом шаге четырехкратного вычисления правой части уравнения (1). Этот алгоритм реализован в программе ode45. Кроме этой программы MATLAB располагает обширным набором аналогичных программ, позволяющих успешно решать обыкновенные дифференциальные уравнения.
Пример 1. Решить задачу Коши
. (5)
Точное решение имеет вид
.
Выполним решение данной задачи с помощью программы ode45. Вначале в М-файл записываем правую часть уравнения (5), сам М-файл оформляется как файл – функция, даем ему имя F и сохраняем (рис.1):
Рис.1 Окно редактора-отладчика с скрипт-файлом функции
Для численного решения задачи Коши в другом окне редактора-отладчика скрипт-файлов набираются следующие операторы (рис.2):
Рис.2 Окно редактора-отладчика с скрипт-файлом программы
Результаты решения. График решения задачи Коши (5) показан на рис. 3. Численное решение представлено в таблице 1, где приведены только отдельные узловые точки. В программе ode45 по умолчанию интервал разбивается на 40 точек с шагом h = 1/40 = 0.025.
Рис. 3 График решения задачи Коши (5)
Таблица 1
хi
Метод Рунге-Кутта
Точное решение
0.0
1.0
1.0
0.1
1.2221
1.2221
0.2
1.4977
1.4977
0.3
1.8432
1.8432
0.4
2.2783
2.2783
0.5
2.8274
2.8274
0.6
3.5202
3.5202
0.7
4.3928
4.3928
0.8
5.4895
5.4895
0.9
6.8645
6.8645
1.0
8.5836
8.5836
Как следует из таблицы1 численное решение программой ode45 дает близкое к точному (по крайней мере первые 5 значащих цифр совпадают ).
2.2. Численное решение задачи Коши для системы обыкновенных дифференциальных уравнений В системе MatLab предусмотрены специальные средства решения задачи Коши для систем обыкновенных дифференциальных уравнений, заданных в форме где F - вектор правых частей ситемы, x - вектор нетзвестных функций.
В простейшем варианте для решения задачи Коши для систем обыкновенных дифференциальных уравнений достаточно воспользоваться командой
[T, X]=solver('F', [DT], X0, ...),
где DT - диапазон интегрирования, X0 - вектор начальных значений, F - имя функции вычисления правых частей системы (и соответственно имя m-файла), solver - имя используемой функции (решателя). Например:
· ode45 - метод Рунге-Кутта 4 и 5-го порядков,
· ode23 - тот же метод 2 и 3-го поряд-ков,
· ode113 - метод Адамса - для нежестких систем,
· ode23s, ode15s - для жестких систем.
Версии решателя различаются используемыми методами (по умолчанию относительная погрешность 10-3 и абсолютная 10-6) и соответственно временем и успешностью решения. Под жесткостью здесь понимается повышенное требование к точности - использование минимального шага во всей области интегрирования. При отсутствии информации о жесткости рекомендуется попытаться получить решение посредством ode45 и затем ode15s.
Если диапазон DT задан начальным и конечным значением [to, tn], то количество элементов в массиве Т (и в массиве решений Х) определяется необходимым для обеспечения точности шагом; при задании DT в виде [to, t1, t2,..., tn] или [to:Δt:tn] - указанными значениями.
Пример 2. Для иллюстрации решения системы и ряда нестандартных возможностей рассмотрим задачу выравнивания цен по уровню актива в следующей постановке.
Предположим, что изменение уровня актива у пропорционально разности между предложением s и спросом d, т.е. y'=k(s-d), k>0, и что изменение цены z пропорционально отклонению актива у от некоторого уровня y0, т.е. z'=-m(y-y0), m>0. Естественно, что предложение и спрос зависят от цены, например, s(z)=az+s0, d(z)= d0 - cz. Соответственно возникает система дифференциальных уравнений
y' = k (s(z)-d(z))
z' = - m (y-y0) .
Вычисление правых частей оформляем функцией:
Если выполнить решение при y0= 19, z0=2
будет выведена таблица значений искомых функций:
ans =
0 19.0000 2.0000
0.3000 20.7758 1.9732
0.6000 22.4102 1.8949
0.9000 23.7687 1.7715
1.2000 24.7427 1.6126
1.5000 25.2570 1.4313
1.8000 25.2663 1.2422
2.1000 24.7702 1.0605
2.4000 23.8116 0.9005
2.7000 22.4655 0.7755
3.0000 20.8396 0.6955
3.3000 19.0658 0.6666
3.6000 17.2877 0.6915
3.9000 15.6473 0.7681
4.2000 14.2751 0.8901
4.5000 13.2847 1.0477
4.8000 12.7551 1.2284
5.1000 12.7257 1.4176
5.4000 13.2023 1.5998
5.7000 14.1467 1.7606
6.0000 15.4802 1.8873
6.3000 17.0969 1.9691
6.6000 18.8674 1.9997
6.9000 20.6490 1.9770
7.2000 22.2967 1.9023
7.5000 23.6788 1.7817
7.8000 24.6864 1.6252
8.1000 25.2349 1.4452
8.4000 25.2805 1.2561
8.7000 24.8222 1.0733
9.0000 23.8953 0.9115
и их графики (рис. 4).
Эта система уравнений относится к числу т.н. автономных, ибо независимая переменная в нее явно не входит; соответственно может быть установлена связь между найденными решениями: в параметрическом задании линия y=y(t), z=z(t) определяет фазовую кривую (траекторию) системы - гладкую кривую без самопересечений, замкнутую кривую или точку, которая позволяет судить об устойчивости системы.
Так, установив опции (opt) к построению двумерного фазового портрета (функция odephas2) и номера переменных состояния :
>> opt=odeset('OutputSel',[1 2], 'OutputFcn','odephas2');
>> [T,Y]=ode45('odu2', [0:0.3:9],[19 2],opt);
получаем фазовый портрет системы, свидетельствующий о ее устойчивости - гармонии между активом и ценами (рис.5).
Рис.4
Рис.5
Пример 3. В качестве другого примера подобных задач рассмотрим известную задачу динамики популяций, где рассматривается модель взаимодействия «жертв» и «хищников», в которой учитывается уменьшение численности представителей одной стороны с ростом численности другой. Модель была создана для биологических систем, но с определенными корректурами применима к конкуренции фирм, строительству финансовых пирамид, росту народонаселения, экологической проблематике и др.
Эта модель Вольтерра-Лотка с логистической поправкой описывается системой уравнений
с условиями заданной численности «жертв» и «хищников» в начальный момент t=0.
Решая эту задачу при различных значениях α, получаем различные фазовые портреты (обычный колебательный процесс и постепенная гибель популяций).
Рис.6 (α =0)
Рис.7 (α =0.1)
Пример 4. Имеется возможность построения и трехмерного фазового портрета с помощью функции odephas3. Например, решение задачи Эйлера свободного движения твердого тела:
выступает в виде:
Рис.8.
Рис.9.