Это не официальный сайт wikipedia.org 01.01.2023

Метод Рунге — Кутты — Википедия

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

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

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

Методы седьмого порядка должны иметь по меньшей мере девять стадий, а методы восьмого порядка — не менее 11 стадий. Для методов девятого и более высоких порядков (не имеющих, впрочем, большой практической значимости) неизвестно, сколько стадий необходимо для достижения соответствующего порядка точности[3].

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

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

Рассмотрим задачу Коши для системы обыкновенных дифференциальных уравнений первого порядка (далее y , f , k i R n  , а x , h R 1  ).

y = f ( x , y ) , y ( x 0 ) = y 0 .  

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

y n + 1 = y n + h 6 ( k 1 + 2 k 2 + 2 k 3 + k 4 )  

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

k 1 = f ( x n , y n ) ,  
k 2 = f ( x n + h 2 , y n + h 2 k 1 ) ,  
k 3 = f ( x n + h 2 , y n + h 2 k 2 ) ,  
k 4 = f ( x n + h , y n + h   k 3 ) .  

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

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

Явные методы Рунге — КуттыПравить

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

y n + 1 = y n + h i = 1 n b i k i ,  

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

k 1 = f ( x n , y n ) , k 2 = f ( x n + c 2 h , y n + a 21 h k 1 ) , k s = f ( x n + c s h , y n + a s 1 h k 1 + a s 2 h k 2 + + a s , s 1 h k s 1 )  

Конкретный метод определяется числом s   и коэффициентами b i , a i j   и c i  . Эти коэффициенты часто упорядочивают в таблицу (называемую таблицей Бутчера):

0 c 2 a 21 c 3 a 31 a 32 c s a s 1 a s 2 a s s 1 b 1 b 2 b s 1 b s  

Для коэффициентов метода Рунге — Кутты должны быть выполнены условия j = 1 i 1 a i j = c i   для i = 2 , , s  . Если требуется, чтобы метод имел порядок p  , то следует также обеспечить условие

y ¯ ( h + x 0 ) y ( h + x 0 ) = O ( h p + 1 ) ,  

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

Неявные методы Рунге — КуттыПравить

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

Неустойчивость явных методов Рунге — Кутты мотивировала развитие неявных методов. Неявный метод Рунге — Кутты имеет вид[5][6]:

y n + 1 = y n + h i = 1 s b i k i ,  

где

k i = f ( x n + c i h , y n + h j = 1 s a i j k j ) , i = 1 , , s .  

Явный метод характерен тем, что матрица коэффициентов a i j   для него имеет нижний треугольный вид (включая и нулевую главную диагональ) — в отличие от неявного метода, где матрица имеет произвольный вид. Это также видно по таблице Батчера[en].

c 1 a 11 a 12 a 1 s c 2 a 21 a 22 a 2 s c s a s 1 a s 2 a s s b 1 b 2 b s = c A b T  

Следствием этого различия является необходимость на каждом шагу решать систему уравнений для k i , i = 1 , 2 , . . . , s  , где s   — число стадий. Это увеличивает вычислительные затраты, однако при достаточно малом h   можно применить принцип сжимающих отображений и решать данную систему методом простой итерации[7]. В случае одной итерации это увеличивает вычислительные затраты всего лишь в два раза.

С другой стороны, Жан Кунцма́н[fr] (1961) и Джон Батчер[en] (1964) показали, что при любом количестве стадий s   существует неявный метод Рунге — Кутты с порядком точности p = 2 s  . Это значит, например, что для описанного выше явного четырёхстадийного метода четвёртого порядка существует неявный аналог с вдвое большим порядком точности.

Неявный метод Рунге — Кутты второго порядкаПравить

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

y n + 1 = y n + h f ( x n , y n ) + f ( x n + 1 , y n + 1 ) 2  .

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

Прогноз:

y ~ n + 1 = y n + h f ( x n , y n )  .

Коррекция:

y n + 1 = y n + h f ( x n , y n ) + f ( x n + 1 , y ~ n + 1 ) 2  .

Вторая формула — это простая итерация решения системы уравнений относительно y n + 1  , записанной в форме сжимающего отображения. Для повышения точности итерацию-коррекцию можно сделать несколько раз, подставляя y ~ n + 1 = y n + 1  . Модифицированный метод Эйлера «с пересчётом» имеет второй порядок точности.

УстойчивостьПравить

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

r ( z ) = 1 + z b T ( I z A ) 1 e = det ( I z A + z e b T ) det ( I z A ) ,  

где e   обозначает вектор-столбец из единиц[8]. Функция r   называется функцией устойчивости[9]. Из формулы видно, что r   является отношением двух полиномов степени s  , если метод имеет s   стадий. Явные методы имеют строго нижнюю треугольную матрицу A ,   откуда следует, что det ( I z A ) = 1 ,   и что функция устойчивости является многочленом[10].

Численное решение данного примера сходится к нулю при условии | r ( z ) | < 1   с z = h λ  . Множество таких z   называется областью абсолютной устойчивости. В частности, метод называется A-устойчивым, если все z   с Re ( z ) < 0   находятся в области абсолютной устойчивости. Функция устойчивости явного метода Рунге — Кутты является многочленом, поэтому явные методы Рунге — Кутты в принципе не могут быть A-устойчивыми[10].

Если метод имеет порядок p  , то функция устойчивости удовлетворяет условию r ( z ) = e z + O ( z p + 1 )   при z 0  . Таким образом, представляет интерес отношение многочленов данной степени, приближающее экспоненциальную функцию наилучшим образом. Эти отношения известны как аппроксимации Паде. Аппроксимация Паде с числителем степени m   и знаменателем степени n   А-устойчива тогда и только тогда, когда m n m + 2.  [11]

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

ПроизношениеПравить

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

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

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

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

{ y = z = g ( x , y , z ) z = cos ( 3 x ) 4 y = f ( x , y , z )  

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

Пример решения в среде MATLABПравить

Решение систем дифференциальных уравнений методом Рунге — Кутты является одним из самых распространённых численных методов решений в технике. В среде MATLAB реализована его одна из разновидностей — метод Дормана — Принса[en]. Для решения системы уравнений необходимо сначала записать функцию, вычисляющую производные, то есть функции 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. — 630 с. — ISBN 5-93208-043-4. — С. 363—375.
  2. Ильина В. А., Силаев П. К. . Численные методы для физиков-теоретиков. Ч. 2. — Москва-Ижевск: Институт компьютерных исследований, 2004. — 118 с. — ISBN 5-93972-320-9. — С. 16—30.
  3. 1 2 Butcher J. C.[en] . Numerical Methods for Ordinary Differential Equations. — New York: John Wiley & Sons, 2008. — ISBN 978-0-470-72335-7.
  4. Süli & Mayers, 2003, p. 349—351.
  5. Iserles, 1996, p. 41.
  6. Süli & Mayers, 2003, p. 351—352.
  7. Неявные методы Рунге — Кутты Архивная копия от 6 марта 2019 на Wayback Machine.
  8. Hairer & Wanner, 1996, p. 40—41.
  9. Hairer & Wanner, 1996, p. 40.
  10. 1 2 Iserles, 1996, p. 60.
  11. Iserles, 1996, p. 62—63.
  12. Iserles, 1996, p. 63.
  13. Как склонять фамилии (трудные случаи) — «Грамота.ру» — справочно-информационный Интернет-портал «Русский язык»  (неопр.). Дата обращения: 5 июля 2016. Архивировано 23 мая 2018 года.
  14. Демидович Б. П., Марон И. А., Шувалова Э. З. . Численные методы анализа. 3-е изд. — М.: Наука, 1967.

ЛитератураПравить