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

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Метод Рунге — Кутта»)
Перейти к: навигация, поиск

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

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

Классический метод Рунге — Кутты четвёртого порядка[править | править вики-текст]

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

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

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

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

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

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

Прямые методы Рунге — Кутты[править | править вики-текст]

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

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

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

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

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

Неявные методы Рунге — Кутты[править | править вики-текст]

Все до сих пор упомянутые методы Рунге — Кутты являются явными методами. К сожалению, явные методы Рунге-Кутты, как правило, непригодны для решения жестких уравнений, из-за малой области абсолютной устойчивости. В частности, это описано в [4]. Неустойчивость метода создаёт наибольшие проблемы при решении дифференциальных уравнений в частных производных.

Нестабильность явных методов Рунге — Кутты мотивировало развитие неявных методов. Неявный метод Рунге — Кутты имеет вид

где

[5]

Явный метод характерен тем, что матрица коэффициентов для него имеет нижний треугольный вид, в отличие от неявного метода, где матрица имеет произвольный вид. Это также видно по таблице Бутчера.

Следствием этого различия является необходимость на каждом шагу решать систему уравнений для , где число стадий. Это увеличивает вычислительные затраты, однако при достаточно малом эту систему можно представить в виде сжимающего отображения и решать методом простой итерации[6]. В случае одной итерации это увеличивает вычислительные затраты всего лишь в два раза.

С другой стороны, Ж. Кунцман (1961) и Дж. Бутчер (1964) показали, что при любом количестве стадий существует неявный метод с порядком точности . Это значит, что для описанного выше явного четырехстадийного метода четвёртого порядка существует неявный аналог с вдвое большим порядком точности.

Неявный метод Рунге—Кутты второго порядка[править | править вики-текст]

Простейшим неявным методом Рунге—Кутты является модифицированный метод Эйлера "с пересчетом". Он задаётся формулой:

.

Для его реализации на каждом шаге необходимы как минимум две итерации (и два вычисления функции).

Прогноз:

.

Коррекция:

.

Вторая формула — это простая итерация решения системы уравнений относительно , записанной в форме сжимающего отображения. Для повышения точности итерацию-коррекцию можно сделать несколько раз, подставляя . Модифицированный метод Эйлера "с пересчетом" имеет второй порядок точности.

Устойчивость[править | править вики-текст]

Преимуществом неявных методов Рунге-Кутты в сравнении с явными является их большая устойчивость, что особенно важно при решении жестких уравнений. Рассмотрим в качестве примера линейное уравнение y' = λy. Обычный метод Рунге-Кутты, примененный к этому уравнению сведется к итерации , с r равным

[7]

где обозначает вектор единиц. Функция называется функцией устойчивости [8] Из формулы видно, что является отношением двух полиномов степени , если метод имеет стадий. Явные методы имеют строго нижнюю треугольную матрицу откуда следует, что и что функция устойчивости является многочленом.[9]

Численное решение данного примера дает чистый ноль при условии с . Множество таких называется областью абсолютной устойчивости. В частности , метод называется A-стабильным если все с находятся в области абсолютной стабильности. Функция устойчивости явного метода Рунге-Кутта является многочленом, поэтому явные методы Рунге-Кутты в принципе не могут быть стабильными.[9]

Если метод имеет порядок , то функция стабильности удовлетворяет условию при . Таким образом, представляет интерес отношение многочленов данной степени, приближающее экспоненциальную функцию наилучшим образом. Эти отношения известны как аппроксимации Паде. Аппроксимация Паде с числителем степени и знаменателем степени А-устойчива, тогда и только тогда, когда .[10]

-стадийный метод Гаусса - Лежандра с имеет порядок , поэтому его функция устойчивости является приближением Паде . Отсюда следует, что метод является A-устойчивым.[11] Это показывает, что A-устойчивые методы Рунге-Кутты могут иметь сколь угодно высокий порядок. В отличие от этого, порядок А-устойчивости метода Адамса не может превышать два.

Произношение[править | править вики-текст]

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

Пример решения на алгоритмических языках программирования[править | править вики-текст]

производя замену и перенося в правую часть, получаем систему:


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

Пример решения в среде MATLAB[править | править вики-текст]

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

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

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

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

Решение в среде MATLAB

Переменные 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. Süli & Mayers 2003, pp. 349–351
  5. Iserles 1996, С. 41; Süli & Mayers 2003, pp. 351–352
  6. Неявные методы Рунге — Кутты
  7. Hairer & Wanner 1996, pp. 40–41
  8. Hairer & Wanner 1996, С. 40
  9. 1 2 Iserles 1996, С. 60
  10. Iserles 1996, pp. 62–63
  11. Iserles 1996, С. 63
  12. Как склонять фамилии (трудные случаи) - «Грамота.ру» – справочно-информационный Интернет-портал «Русский язык»
  13. Б. П. Демидович, И. А. Марон, Э. З. Шувалова. Численные методы анализа, 3-е изд. — М.: Наука, 1967.