Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №3.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
326 Кб
Скачать
☆

Метод Рунге-Кутта

Пусть дано дифференциальное уравнение первого порядка

(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')