- •Теоретическая часть
- •Методы решения обыкновенных дифференциальных уравнений
- •Метод Эйлера
- •Метод Рунге-Кутта
- •Численное интегрирование систем обыкновенных дифференциальных уравнений
- •Хід виконання роботи
- •Задание
- •Отчет по лабораторной работе должен содержать:
- •Контрольные вопросы
- •Варианты заданий
- •Результат завдання
- •Висновки
Метод Рунге-Кутта
Пусть дано дифференциальное уравнение первого порядка
(7)
с начальными условиями y(x0)=y0. Выберем шаг h и для краткости введем обозначения xi=x0+ih и yi=y(xi), (i=0,1,2,…).
В вычислительной практике наиболее часто используется метод Рунге-Кутта. Приведем без вывода один из вариантов соответствующих расчетных формул:
(8)
Последовательные приближения yi искомой функции y определяются по формуле:
yi+1=yi+
yi
где
(9)
Отметим, что в этом случае погрешность на шаге пропорциональна пятой степени шага (h5). Отсюда, в частности, следует, что при достаточно малом h и малых погрешностях вычислений решение уравнения (7), полученное методом Рунге-Кутта по формулам (8), будет близким к точному.
Геометрическим
смысл использования метода Рунге-Кутта
с расчетными формулами (8) состоит в
следующем. Из точки (xi,yi)
cдвигаются в направлении, определяемом
углом
1,
для которого tg
1=f(xi,yi).
На этом направлении выбирается точка
с координатами (xi+h/2,
yi+k1/2).
Затем из точки (xi,yi)
cдвигаются в направлении, определяемом
углом
2,
для которого tg
2=f(xi+h/2,
yi+k1/2),
и на этом направлении выбирается точка
с координатами (xi+h/2,
yi+k2/2).
Наконец, из точки (xi,yi)
cдвигаются в направлении, определяемом
углом
3,
для которого tg
3=f(xi+h/2,
yi+k2/2)
и на этом направлении выбирается точка
с координатами (xi+h,
yi+k3).
Этим задается еще одно направление,
определяемое углом
4,
для которого tg
4=f(xi+h,
yi+k3).
Четыре полученных направления усредняются
в соответствии с последней из формул
(8). На этом окончательном направлении
и выбирается очередная точка (xi+1,yi+1)=
(xi+h,yi+
y).
Численное интегрирование систем обыкновенных дифференциальных уравнений
Метод Рунге-Кутта применяется также для приближенного решения систем обыкновенных дифференциальных уравнений. Пусть, например, дана система дифференциальных уравнений:
(10)
где
.
Под
решением системы (10) понимается любая
совокупность функций (y1(x),
y2(x),…,yn(x)),
которая, будучи подставлена в уравнение
(10), обращает их в тождества. Так как
система дифференциальных уравнений
имеет бесчисленное множество решений,
то для выделения одного конкретного
решения
,
кроме уравнения, нужны дополнительные
условия. В простейшем случае задаются
начальные условия
(11)
что приводит к задаче Коши.
Задача Коши. Найти решение
системы (10), удовлетворяющее заданным начальным условиям (11), где х0 - фиксированное значение независимой переменной и
- данная система чисел.
Если х интерпретировать как время, а у1, …, уn - как обобщенные координаты некоторой механической системы, то получим следующий аспект задачи Коши: зная дифференциальные уравнения, управляющие механической системой, а также состояние ее в начальный момент времени х0, определить состояние системы в любой момент времени х.
Задавшись некоторым шагом h и введя стандартные обозначения xi=x0+ih и yi=yi(x), yi=yi+1-yi при i=0,1,2,…, положим:
(12)
Согласно методу Рунге-Кутта y0 приближенно определяют по формуле
(13)
отсюда
Далее, приняв (x1,y1) за исходные данные и повторяя тот же процесс, находим y2. Аналогично вычисляются
yi (i=3,4,5,…).
В системе MatLab предусмотрены специальные средства решения задачи Коши для систем обыкновенных дифференциальных уравнений, функции ode23 и ode45. Они применимы как для решения простых дифференциальных уравнений, так и для моделирования сложных динамических систем.
Функции [t, X] = ode23(‘<имя функции>‘, t0, tf, x0, tol, trace) и [t, X] = = ode45(‘<имя функции>‘, t0, tf, x0, tol, trace) интегрируют системы ОДУ, используя формулы Рунге - Кутты соответственно 2-го и 3-го или 4-го и 5-го порядка.
Входные параметры: ‘<имя функции>‘ - строковая переменная, являющаяся именем М-файла, в котором вычисляются правые части системы ОДУ; t0 - начальное значение времени; tfinal - конечное значение времени; x0 - вектор начальных условий; tol - задаваемая точность; по умолчанию для ode23 tol = 1.e-3, для ode45 tol = 1.e-6); trace - флаг, регулирующий вывод промежуточных результатов; по умолчанию равен нулю, что подавляет вывод промежуточных результатов;
Выходные параметры: t - текущее время; X - двумерный массив, где каждый столбец соответствует одной переменной.
Пример:
Рассмотрим дифференциальное уравнение 2-го порядка, известное как уравнение Ван дер Поля,
.
Это уравнение может быть представлено в виде системы ОДУ в явной форме Коши:
Первый шаг процедуры интегрирования - это создание М-файла для вычисления правых частей ОДУ; присвоим этому файлу имя vdpol.
function xdot = vdpol(t, x) xdot = [x(2); x(2) .* (1 - x(1).^2) - x(1)];
Чтобы проинтегрировать систему ОДУ, определяемых функцией vdpol в интервале времени 0 <= t <= 20, вызовем функцию ode23:
t0 = 0; tf = 20; x0 = [0 0.25]'; %Начальные условия [t, X] = ode23('vdpol', t0, tf, x0); plot(t, X), grid, hold on gtext('x1'), gtext('x2')
