Метод Рунге — Кутты

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Halyavin (обсуждение | вклад) в 15:33, 14 мая 2012 (отмена правки 44424463 участника 195.19.35.144 (обс)). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску

Ме́тоды Ру́нге — Ку́тты (распространено неправильное название Ме́тоды Ру́нге — Ку́тта или даже Ме́тоды Ру́нге — Кутта́) — важное семейство численных алгоритмов решения обыкновенных дифференциальных уравнений и их систем. Данные итеративные методы явного и неявного приближённого вычисления были разработаны около 1900 года немецкими математиками К. Рунге и М. В. Куттой.

Формально, методом Рунге — Кутты является модифицированный и исправленный метод Эйлера, они представляют собой схемы второго порядка точности. Существуют стандартные схемы третьего порядка, не получившие широкого распространения. Наиболее часто используется и реализована в различных математических пакетах (Maple, MathCAD, Maxima) стандартная схема четвёртого порядка. Иногда при выполнении расчётов с повышенной точностью применяются схемы пятого и шестого порядков[1][2]. Построение схем более высокого порядка сопряжено с большими вычислительными трудностями[3]. Методы седьмого порядка должны иметь по меньшей мере девять стадий, в схему восьмого порядка входит 11 стадий. Хотя схемы девятого порядка не имеют большой практической значимости, неизвестно, сколько стадий необходимо для достижения этого порядка точности. Аналогичная задача существует для схем десятого и более высоких порядков[3].

Классический метод Рунге — Кутты 4 порядка

Метод Рунге — Кутты 4 порядка столь широко распространён, что его часто называют просто методом Рунге — Кутты.

Рассмотрим задачу Коши

Тогда приближенное значение в последующих точках вычисляется по итерационной формуле:

Вычисление нового значения проходит в четыре стадии:

где  — величина шага сетки по

Этот метод имеет четвёртый порядок точности, то есть суммарная ошибка на конечном интервале интегрирования имеет порядок (ошибка на каждом шаге порядка ).

Прямые методы Рунге — Кутты

Семейство прямых методов Рунге — Кутты является обобщением метода Рунге — Кутты 4 порядка. Оно задаётся формулами

где  — величина шага сетки по и вычисление нового значения проходит в этапов:

Конкретный метод определяется числом и коэффициентами и . Эти коэффициенты часто упорядочивают в таблицу (называемую таблицей Бутчера)

Для коэффициентов метода Рунге — Кутты должны быть выполнены условия для . Если требуется, чтобы метод имел порядок , то следует так же обеспечить условие

где  — приближение, полученное по методу Рунге — Кутты. После многократного дифференцирования это условие преобразуется в систему полиномиальных уравнений на коэффициенты метода.

Произношение

Согласно грамматическим нормам русского языка, фамилия Ку́тта склоняется, поэтому говорят: «Метод Ру́нге — Ку́тты». Правила русской грамматики предписывают склонять все мужские и женские фамилии, оканчивающиеся на -а, -я, которым предшествует согласный. Единственное исключение — фамилии французского происхождения с ударением на последнем слоге типа Дюма́, Золя́. Однако, иногда встречается несклоняемый вариант «Метод Ру́нге — Ку́тта» (например, в книге [4]).

Решение систем ОДУ

Метод Ру́нге — Ку́тты непосредственно обобщается на случай систем обыкновенных дифференциальных уравнений путём записи системы и метода в векторной форме.

Пример программы

y" + 4y = cos(3x) | y(0) = 0.8, y'(0) = 2, x = [0,1], h = 0.1

y" = cos(3x) - 4y

замена y'=z

получаем систему

y' = z = g(x,y,z)

z' = cos(3x) - 4y = f(x,y,z)

В программе на С# используется абстрактный класс RungeKutta, в котором следует переопределить абстрактный метод F, задающий правые части уравнений.

Пример решения, выполненный в среде MATLAB (версии 5.3):

Решение систем дифференциальных уравнений методом Рунге-Кутты является одним из самых распространённых численных методов решений в технике.

В среде MATLAB (довольно распространённый и удобный язык для технических вычислений) для решения системы уравнений необходимо сначала записать функцию, вычисляющую производные, т.е. функции y = g(x,y,z) и z = cos(3x) - 4y = f(x,y,z), о чём сказано выше. Для этого в одной из папок, к которой имеется доступ из системы MATLAB нужно создать текстовый файл runge.m со следующим содержимым:

Имя файла и имя функции должно совпадать, но оно может быть любым неиспользуемым ранее.

Затем необходимо создать главный файл c именем, например, main.m, который который будет выполнять основные вычисления. Этот главный файл будет содержать следующий текст:

Так как MATLAB ориентирован на работу с матрицами, решение мо методу Рунге-Кутты очень легко выполняется для целого ряда x как, например, в приведенном примере программы. Здесь решение - график функции в пределах времён от 0 до x_fin.

Решение в среде МАТЛАБ

Переменные x и y, полученные в результате работы функции ODE45, есть векторы значений. Очевидно, что решение конкретно заданного выше примера - второй элемент x, так как первое значение 0, шаг интегрирование h = 0.1, а интересуемое значение x = 0.1. Следующая запись в коммандном окне MATLAB даст искомое решение:

Ответ: y1 = 0.98768

См. также

Ссылки

  1. Бахвалов Н. С., Жидков Н. П., Кобельков Г. М. Численные методы. — М.: Бином, 2001 — с. 363—375.
  2. Ильина В. А., Силаев П. К. Численные методы для физиков-теоретиков. т. 2. — Москва-Ижевск: Институт компьютерных исследований, 2004. — с. 16-30.
  3. 1 2 J. C. Butcher. Numerical Methods for Ordinary Differential Equations. The University of Auckland, New Zealand.
  4. Б. П. Демидович, И. А. Марон, Э. З. Шувалова. Численные методы анализа, 3-е изд. — М.: Наука, 1967.