
- •Лекция №8 Обыкновенные дифференциальные уравнения Постановка задачи Коши
- •Метод Пикара
- •Метод малого параметра
- •Метод ломаных
- •Метод Рунге-Кутта
- •Метод Адамса
- •Решатели дифференциальных уравнений в matlab
- •Постановка краевой задачи
- •Метод стрельбы
- •Краевая задача. Разностный метод
- •Краевая задача в среде matlab
Решатели дифференциальных уравнений в matlab
В пакете MATLAB существует несколько так называемых решателей системы обыкновенных дифференциальных уравнений: ode23, ode45, ode113, ode15s, ode23s, ode23t, ode23tb и некоторые другие. Аббревиатура ode означает ordinary differential equations, а суффикс s (s — stiff) обозначает то, что метод применим к решению жестких систем дифференциальных уравнений (о понятии “жесткость” будем говорить далее).
Решатель ode23 представляет метод Рунге-Кутты порядка 2-3, модифицированный Богацки и Шампиной; решатель ode45 — метод Рунге-Кутты порядка 4-5, модифицированный Дормандом и Принцем; решатель ode113 представляет метод Адамса, Башворта и Моултона.
В связи с разбором других решателей дифференциальных уравнений рассмотрим неявные схемы численного решения дифференциальных уравнений. До сих пор использовались явные схемы вычислений, когда значение функции на следующем уровне вычислялось по известным формулам от предыдущих значений искомой функции.
Простейший вариант неявной схемы Эйлера имеет следующий вид:
. (41)
Чтобы найти численное решение yn +1 на следующем слое, необходимо решить уравнение (41) относительно yn +1. Это можно осуществить несколькими способами. Например, с помощью метода итераций
,
;
. (42)
Условием сходимости
метода итераций (42) является условие
h||fu||
< 1. Возможно также разложить в (41)
функцию
в ряд Тейлора по
,
тогда
. (43)
Разрешая (43) относительно yn +1, получаем значение решения на следующем уровне. Такой метод приближенного решения уравнения (41) называется методом Розенброка.
Используется также еще один неявный метод, основанный на формуле трапеции:
. (44)
Функция ode23t использует неявный метод трапеций типа (44) с использование “свободной” интерполяции. Эту функцию рекомендуется использовать для умерено жестких задач, когда требуется высокоточное решение. Функция ode23tb использует неявный метод Рунге-Кутты на первом шаге по методу трапеций, а на втором шаге методом “дифференцирования назад” второго порядка. Подобно ode23s данная функция может оказаться более эффективной, чем ode15s, если не требуется высокая точность.
Куртис и Хиршфельдер в 1952г. ввели понятие жестких задач и предложили для их решения неявные методы “дифференцирования назад”. Одна из таких схем второго порядка имеет следующий вид:
. (45)
Определение жесткости системы дифференциальных уравнений дадим в соответствии с учебником1.
Пусть дана система дифференциальных уравнений вида:
(46)
где t > 0, a1, a2= const>0. Решение системы уравнений (46) имеет следующий вид:
Пусть a2>>a1,
тогда, при достаточно большом t,
в векторе решений
остается компонента u1,
а u2 0.
Рассмотрим простейшую разностную схему Эйлера для решения системы уравнений (46):
(47)
где
— шаг по времени t,
,
tn=n,
n=0,1,…,
i=1,2.
Схема Эйлера (47) устойчива, когда a1 2,
a2 2,
т.е. при
. (48)
Согласно формуле (48), шаг интегрирования системы дифференциальных уравнений с помощью явных разностных схем ограничен характерным временем наиболее медленного процесса. В системе (46) два характерных времени: 1/a1 и 1/a2. Поскольку a2>>a1, постольку верна формула (48).
Введем определение жесткости. Пусть дана система обыкновенных дифференциальных уравнений:
. (49)
Система дифференциальных уравнений (49) с постоянной матрицей A(m m) называется жесткой, если собственные значения k, k=1,2,…,m матрицы A удовлетворяют следующим условиям:
Rek< 0, k =1,2,…,m, т.е. система асимптотически устойчива по Ляпунову;
отношение
велико.
Число s называется числом жесткости системы (49). В пакете MATLAB число жесткости возвращает функция cond.
Общий способ решения жестких систем дифференциальных уравнений был найден на пути применения неявных абсолютно устойчивых разностных методов. Например, систему (46) можно решить с помощью неявного метода Эйлера:
,
который устойчив при всех > 0.
Для прояснения
природы жесткости, рассмотрим пример
решения уравнения Ван Дер Поля. Уравнение
Ван-Дер-Поля описывает релаксационные
колебания в электронных устройствах.
Это уравнение является жестким. Покажем
это. Уравнение Ван-Дер-Поля
перепишем в векторной форме, т.е.
(50)
где
,
u1= u,
u2= u.
Величину
можно считать порядка единицы, т.е.
|b| ~ 1.
Находя собственные значения матрицы в
(50) при k >>1,
имеем 1=bk,
2=1/bk.
В итоге число жесткости s =1/2=b2k2.
Выбирая k=1000,
находим s ~ 106.
Решим нелинейную систему уравнений (50) с помощью схемы Куртиса-Хильшфельдера (45) и с помощью встроенного в MATLAB решателя ode23s. Код программы решения системы уравнений (50) представлен на листинге_№10.
Листинг_№10
%Программа иллюстрирующая решение жесткой
%системы дифференциальных уравнений на примере
%уравнения Ван Дер Поля
function vdp
global k
%численное решение уравнения Ван Дер Поля
%согласно схеме (45)
%определяем значение константы k и начальные
%данные для решения
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
k=10; h=0.01; t=0:h:100; y(:,1)=[0;1];
y(:,2)=y(:,1)+h*func(h,y(:,1)+...
0.5*h*func(h,y(:,1)));
%основной цикл расчета по схеме (45)
for n=2:(length(t)-1)
y(:,n+1)=(4*y(:,n)-y(:,n-1)+...
2*h*func((n-1)*h,y(:,n-1)))/3;
end
plot(t,y(1,:),t,y(2,:));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%решение уравнения Ван Дер Поля с помощью
%решателя ode23s
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% k=1000;
% [T Y]=ode23s(@func,[0 5000],[0 1]);
% plot(T,Y(:,1),T,Y(:,2),...
% T(1:(length(T)-1)),diff(T));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=func(x,u)
global k
y=[u(2);-u(1)+k*(1-u(1)^2)*u(2)];
|
|
Рис.8,а. Численное решение уравнения Ван Дер Поля по схеме (45) при k =10 |
Рис.8,б. Численное решение уравнения Ван Дер Поля решателем ode23s при k =1000 |
Итог численного решения уравнения Ван Дер Поля согласно схеме (45) представлен на рис.8,а. С помощью данной схемы не удалось решить уравнение со значением параметра k = 1000, а только при k = 10, т.к. в этом случае требуется шаг интегрирования сделать недопустимо малым. В решателе ode23s эта проблема решается путем автоматического регулирования шага интегрирования. Итог решения уравнения Ван Дер Поля данным решателем представлен на рис.8,б. Помимо решения u, производной решения u, нанесен также график зависимости шага интегрирования от аргумента — времени t. Видно, что шаг сильно уменьшается в окрестности точек с максимальной производной и, наоборот, вне этих точек шаг может значительно увеличиться.