Метод Рунге — Кутты: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
м Бот: замена устаревшего математического синтаксиса в соответствии с mw:Extension:Math/Roadmap
 
(не показаны 24 промежуточные версии 17 участников)
Строка 1: Строка 1:
'''Ме́тоды Ру́нге — Ку́тты''' (в литературе встречаются названия: '''ме́тоды Ру́нге Ку́тта''' или же '''ме́тоды Ру́нге — Кутта́''') — большой класс [[численные методы|численных методов]] решения [[задача Коши|задачи Коши]] для [[обыкновенные дифференциальные уравнения|обыкновенных дифференциальных уравнений]] и их систем. Первые методы данного класса были предложены около 1900 года немецкими математиками [[Рунге, Карл|К. Рунге]] и [[Мартин Вильгельм Кутта|М. В. Куттой]].
'''Ме́тоды Ру́нге — Ку́тты''' (в литературе встречается название '''методы Рунге Кутта''') — большой класс [[численные методы|численных методов]] решения [[задача Коши|задачи Коши]] для [[обыкновенные дифференциальные уравнения|обыкновенных дифференциальных уравнений]] и их систем. Первые методы данного класса были предложены около 1900 года немецкими математиками [[Рунге, Карл|К. Рунге]] и [[Мартин Вильгельм Кутта|М. В. Куттой]].


К классу методов Рунге&nbsp;— Кутты относятся [[метод Эйлера|явный метод Эйлера]] и модифицированный метод Эйлера с пересчётом, которые представляют собой соответственно методы первого и второго порядка точности. Существуют стандартные явные методы третьего порядка точности, не получившие широкого распространения. Наиболее часто используется и реализован в различных математических пакетах ([[Maple]], [[MathCAD]], [[Maxima]]) ''классический метод Рунге&nbsp;&nbsp;Кутты'', имеющий четвёртый порядок точности. При выполнении расчётов с повышенной точностью всё чаще применяются методы пятого и шестого порядков точности<ref>{{книга|автор=[[Бахвалов, Николай Сергеевич|Бахвалов Н. С.]], [[Жидков, Николай Петрович|Жидков Н. П.]], [[Кобельков, Георгий Михайлович|Кобельков Г. М.]] |заглавие=Численные методы|место=М.|издательство=Лаборатория Базовых Знаний|год=2001|страниц=630|isbn=5-93208-043-4}} — С. 363—375.</ref><ref>{{книга|автор=Ильина В. А., Силаев П. К. |заглавие=Численные методы для физиков-теоретиков. Ч. 2|место=Москва-Ижевск|издательство=Институт компьютерных исследований|год=2004|страниц=118|isbn=5-93972-320-9}} — С. 16—30.</ref>. Построение схем более высокого порядка сопряжено с большими вычислительными трудностями<ref name="ReferenceA">{{книга|автор={{iw|Бутчер, Джон Чарлз|Butcher J. C.|en|John C. Butcher}} |заглавие=Numerical Methods for Ordinary Differential Equations|место=New York|издательство=[[John Wiley & Sons]]|год=2008|isbn=978-0-470-72335-7}}</ref>.
К классу методов Рунге — Кутты относятся [[метод Эйлера|явный метод Эйлера]] и модифицированный метод Эйлера с пересчётом, которые представляют собой соответственно методы первого и второго порядка точности. Существуют стандартные явные методы третьего порядка точности, не получившие широкого распространения. Наиболее часто используется и реализован в различных математических пакетах ([[Maple]], [[MathCAD]], [[Maxima]]) ''классический метод Рунге  Кутты'', имеющий четвёртый порядок точности. При выполнении расчётов с повышенной точностью всё чаще применяются методы пятого и шестого порядков точности<ref>{{книга|автор=[[Бахвалов, Николай Сергеевич|Бахвалов Н. С.]], [[Жидков, Николай Петрович|Жидков Н. П.]], [[Кобельков, Георгий Михайлович|Кобельков Г. М.]] |заглавие=Численные методы|место=М.|издательство=Лаборатория Базовых Знаний|год=2001|страниц=630|isbn=5-93208-043-4}} — С. 363—375.</ref><ref>{{книга|автор=Ильина В. А., Силаев П. К. |заглавие=Численные методы для физиков-теоретиков. Ч. 2|место=Москва-Ижевск|издательство=Институт компьютерных исследований|год=2004|страниц=118|isbn=5-93972-320-9}} — С. 16—30.</ref>. Построение схем более высокого порядка сопряжено с большими вычислительными трудностями<ref name="ReferenceA">{{книга|автор={{iw|Бутчер, Джон Чарлз|Butcher J. C.|en|John C. Butcher}} |заглавие=Numerical Methods for Ordinary Differential Equations|место=New York|издательство=[[John Wiley & Sons]]|год=2008|isbn=978-0-470-72335-7}}</ref>.


Методы седьмого порядка должны иметь по меньшей мере девять стадий, а методы восьмого порядка — не менее 11 стадий. Для методов девятого и более высоких порядков (не имеющих, впрочем, большой практической значимости) неизвестно, сколько стадий необходимо для достижения соответствующего порядка точности<ref name="ReferenceA"/>.
Методы седьмого порядка должны иметь по меньшей мере девять стадий, а методы восьмого порядка — не менее 11 стадий. Для методов девятого и более высоких порядков (не имеющих, впрочем, большой практической значимости) неизвестно, сколько стадий необходимо для достижения соответствующего порядка точности<ref name="ReferenceA"/>.


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


Рассмотрим [[Задача Коши|задачу Коши]] для системы обыкновенных дифференциальных уравнений первого порядка. (Далее <math> \mathbf y, \mathbf f, \mathbf k_i \in \mathbb{R}^n</math>, а <math> x, h \in \mathbb{R}^1 </math>).
Рассмотрим [[Задача Коши|задачу Коши]] для системы обыкновенных дифференциальных уравнений первого порядка (далее <math> \mathbf y, \mathbf f, \mathbf k_i \in \mathbb{R}^n</math>, а <math> x, h \in \mathbb{R}^1 </math>).
: <math>\textbf{y}'=\textbf{f}(x,\textbf{y}), \quad \textbf{y}(x_0)=\textbf{y}_0.</math>
: <math>\textbf{y}'=\textbf{f}(x,\textbf{y}), \quad \textbf{y}(x_0)=\textbf{y}_0.</math>
Тогда приближенное значение в последующих точках вычисляется по итерационной формуле:
Тогда приближенное значение в последующих точках вычисляется по итерационной формуле:
Строка 17: Строка 17:
: <math> \textbf{k}_3 = \textbf{f} \left( x_n + {h \over 2}, \textbf{y}_n + {h \over 2} \textbf{k}_2 \right), </math>
: <math> \textbf{k}_3 = \textbf{f} \left( x_n + {h \over 2}, \textbf{y}_n + {h \over 2} \textbf{k}_2 \right), </math>
: <math> \textbf{k}_4 = \textbf{f} \left( x_n + h, \textbf{y}_n + h\ \textbf{k}_3 \right). </math>
: <math> \textbf{k}_4 = \textbf{f} \left( x_n + h, \textbf{y}_n + h\ \textbf{k}_3 \right). </math>
где <math>h</math> — величина шага сетки по <math>x</math>.
где <math>h</math> — величина шага сетки по <math>x</math>.


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


== Явные методы Рунге&nbsp;&nbsp;Кутты ==
== Явные методы Рунге  Кутты ==
Семейство явных методов Рунге&nbsp;&nbsp;Кутты является обобщением как явного метода Эйлера, так и классического метода Рунге&nbsp;&nbsp;Кутты четвёртого порядка. Оно задаётся формулами
Семейство явных методов Рунге  Кутты является обобщением как явного метода Эйлера, так и классического метода Рунге  Кутты четвёртого порядка. Оно задаётся формулами
: <math> \textbf{y}_{n+1} = \textbf{y}_n + h\sum_{i=1}^s b_i \textbf{k}_i, </math>
: <math> \textbf{y}_{n+1} = \textbf{y}_n + h\sum_{i=1}^s b_i \textbf{k}_i, </math>
где <math>h</math> — величина шага сетки по <math>x</math> и вычисление нового значения проходит в <math>s</math> этапов:
где <math>h</math> — величина шага сетки по <math>x</math>, а вычисление нового значения проходит в <math>s</math> этапов:


: <math>\begin{array}{ll}
: <math>\begin{array}{ll}
Строка 33: Строка 33:
\end{array} </math>
\end{array} </math>


Конкретный метод определяется числом <math>s</math> и коэффициентами <math>b_i, a_{ij}</math> и <math>c_i</math>. Эти коэффициенты часто упорядочивают в таблицу (называемую ''таблицей Батчера''):
Конкретный метод определяется числом <math>s</math> и коэффициентами <math>b_i, a_{ij}</math> и <math>c_i</math>. Эти коэффициенты часто упорядочивают в таблицу (называемую ''таблицей Бутчера''):


: <math>\begin{array}{c|ccccc}
: <math>\begin{array}{c|ccccc}
Строка 44: Строка 44:
\end{array} </math>
\end{array} </math>


Для коэффициентов метода Рунге&nbsp;— Кутты должны быть выполнены условия <math>\sum_{j=1}^{i-1} a_{ij} = c_i</math> для <math> i=2, \ldots, s</math>. Если требуется, чтобы метод имел порядок <math>p</math>, то следует также обеспечить условие
Для коэффициентов метода Рунге — Кутты должны быть выполнены условия <math>\sum_{j=1}^{i-1} a_{ij} = c_i</math> для <math> i=2, \ldots, s</math>. Если требуется, чтобы метод имел порядок <math>p</math>, то следует также обеспечить условие
: <math>\bar{\textbf{y}}(h+x_0)- {\textbf{y}}(h+x_0)=O(h^{p+1}),</math>
: <math>\bar{\textbf{y}}(h+x_0)- {\textbf{y}}(h+x_0)=O(h^{p+1}),</math>
где <math>\bar{\textbf{y}}(h+x_0)</math> — приближение, полученное по методу Рунге&nbsp;&nbsp;Кутты. После многократного дифференцирования это условие преобразуется в систему полиномиальных уравнений относительно коэффициентов метода.
где <math>\bar{\textbf{y}}(h+x_0)</math> — приближение, полученное по методу Рунге  Кутты. После многократного дифференцирования это условие преобразуется в систему полиномиальных уравнений относительно коэффициентов метода.


== Неявные методы Рунге — Кутты ==
== Неявные методы Рунге — Кутты ==
Все до сих пор упомянутые методы Рунге — Кутты являются {{iw|Явные и неявные методы|явными методами|en|Explicit and implicit methods}}. К сожалению, явные методы Рунге — Кутты, как правило, непригодны для решения [[Жёсткая система|жестких уравнений]] из-за малой области их абсолютной устойчивости{{sfn|Süli & Mayers|2003|p=349—351}}. Неустойчивость явных методов Рунге — Кутты создаёт весьма серьёзные проблемы и при {{iw|Численное решение дифференциальных уравнений в частных производных|численном решении дифференциальных уравнений в частных производных|en|Numerical partial differential equations}}.
Все до сих пор упомянутые методы Рунге — Кутты являются {{iw|Явные и неявные методы|явными методами|en|Explicit and implicit methods}}. К сожалению, явные методы Рунге — Кутты, как правило, непригодны для решения [[Жёсткая система|жёстких систем уравнений]] из-за малой области их абсолютной устойчивости{{sfn|Süli & Mayers|2003|p=349—351}}. Неустойчивость явных методов Рунге — Кутты создаёт весьма серьёзные проблемы и при {{iw|Численное решение дифференциальных уравнений в частных производных|численном решении дифференциальных уравнений в частных производных|en|Numerical partial differential equations}}.


Неустойчивость явных методов Рунге — Кутты мотивировала развитие неявных методов. Неявный метод Рунге — Кутты имеет вид{{sfn|Iserles|1996|p=41}}{{sfn|Süli & Mayers|2003|p=351—352}}:
Неустойчивость явных методов Рунге — Кутты мотивировала развитие неявных методов. Неявный метод Рунге — Кутты имеет вид{{sfn|Iserles|1996|p=41}}{{sfn|Süli & Mayers|2003|p=351—352}}:
:<math> y_{n+1} = y_n + h\sum_{i=1}^s b_i k_i, </math>
: <math> y_{n+1} = y_n + h\sum_{i=1}^s b_i k_i, </math>
где
где
:<math> k_i = f\bigl( x_n + c_i h, y_n + h\sum_{j=1}^s a_{ij} k_j \bigr), \quad i = 1, \ldots, s.</math>
: <math> k_i = f\bigl( x_n + c_i h, y_n + h\sum_{j=1}^s a_{ij} k_j \bigr), \quad i = 1, \ldots, s.</math>
Явный метод характерен тем, что матрица коэффициентов <math>a_{ij}</math> для него имеет нижний треугольный вид (включая и нулевую главную диагональ) — в отличие от неявного метода, где матрица имеет произвольный вид. Это также видно по {{iw2|таблица Батчера|таблице Батчера||Butcher tableau}}.
Явный метод характерен тем, что матрица коэффициентов <math>a_{ij}</math> для него имеет нижний треугольный вид (включая и нулевую главную диагональ) — в отличие от неявного метода, где матрица имеет произвольный вид. Это также видно по {{iw|таблица Батчера|таблице Батчера||Butcher tableau}}.


:<math>
: <math>
\begin{array}{c|cccc}
\begin{array}{c|cccc}
c_1 & a_{11} & a_{12}& \dots & a_{1s}\\
c_1 & a_{11} & a_{12}& \dots & a_{1s}\\
Строка 74: Строка 74:
</math>
</math>


Следствием этого различия является необходимость на каждом шагу решать систему уравнений для <math>k_i, i=1,2,...,s</math>, где <math>s</math> — число стадий. Это увеличивает вычислительные затраты, однако при достаточно малом <math>h</math> можно применить принцип [[сжимающее отображение|сжимающих отображений]] и решать данную систему [[метод простой итерации|методом простой итерации]]<ref>[HTTP://WWW.ASTRO.TSU.RU/CHINTODY/TEXT/3_7.HTML Неявные методы Рунге — Кутты].</ref>. В случае одной итерации это увеличивает вычислительные затраты всего лишь в два раза.
Следствием этого различия является необходимость на каждом шагу решать систему уравнений для <math>k_i, i=1,2,...,s</math>, где <math>s</math> — число стадий. Это увеличивает вычислительные затраты, однако при достаточно малом <math>h</math> можно применить принцип [[сжимающее отображение|сжимающих отображений]] и решать данную систему [[метод простой итерации|методом простой итерации]]<ref>[HTTP://WWW.ASTRO.TSU.RU/CHINTODY/TEXT/3_7.HTML Неявные методы Рунге — Кутты] {{Wayback|url=http://www.astro.tsu.ru/CHINTODY/TEXT/3_7.HTML |date=20190306230951 }}.</ref>. В случае одной итерации это увеличивает вычислительные затраты всего лишь в два раза.


С другой стороны, {{iw2|Кунцман, Жан|Жан Кунцма́н|fr|Jean Kuntzmann}} (1961) и {{iw2|Батчер, Джон Чарлз|Джон Батчер||John C. Butcher}} (1964) показали, что при любом количестве стадий <math>s</math> существует неявный метод Рунге — Кутты с порядком точности <math>p=2s</math>. Это значит, например, что для описанного выше явного четырёхстадийного метода четвёртого порядка существует неявный аналог с вдвое большим порядком точности.
С другой стороны, {{iw|Кунцман, Жан|Жан Кунцма́н|fr|Jean Kuntzmann}} (1961) и {{iw|Батчер, Джон Чарлз|Джон Батчер||John C. Butcher}} (1964) показали, что при любом количестве стадий <math>s</math> существует неявный метод Рунге — Кутты с порядком точности <math>p=2s</math>. Это значит, например, что для описанного выше явного четырёхстадийного метода четвёртого порядка существует неявный аналог с вдвое большим порядком точности.


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


Строка 87: Строка 87:
Прогноз:
Прогноз:


:<math>\tilde \mathbf y_{n+1}=\mathbf y_n+h\mathbf f(x_n,\mathbf y_n)</math>.
: <math>\tilde \mathbf y_{n+1}=\mathbf y_n+h\mathbf f(x_n,\mathbf y_n)</math>.


Коррекция:
Коррекция:


:<math>\mathbf y_{n+1}=\mathbf y_n+h\frac{\mathbf f(x_n,\mathbf y_n)+\mathbf f(x_{n+1},\tilde \mathbf y_{n+1})}{2}</math>.
: <math>\mathbf y_{n+1}=\mathbf y_n+h\frac{\mathbf f(x_n,\mathbf y_n)+\mathbf f(x_{n+1},\tilde \mathbf y_{n+1})}{2}</math>.


Вторая формула — это простая итерация решения системы уравнений относительно <math>\mathbf y_{n+1}</math>, записанной в форме сжимающего отображения. Для повышения точности итерацию-коррекцию можно сделать несколько раз, подставляя <math>\tilde\mathbf y_{n+1}=\mathbf y_{n+1}</math>. Модифицированный метод Эйлера «с пересчётом» имеет второй порядок точности.
Вторая формула — это простая итерация решения системы уравнений относительно <math>\mathbf y_{n+1}</math>, записанной в форме сжимающего отображения. Для повышения точности итерацию-коррекцию можно сделать несколько раз, подставляя <math>\tilde\mathbf y_{n+1}=\mathbf y_{n+1}</math>. Модифицированный метод Эйлера «с пересчётом» имеет второй порядок точности.


=== Устойчивость ===
=== Устойчивость ===
Преимуществом неявных методов Рунге — Кутты в сравнении с явными является их бо́льшая устойчивость, что особенно важно при решении [[жёсткая_система|жестких уравнений]]. Рассмотрим в качестве примера линейное уравнение ''y' '' = λ''y''. Обычный метод Рунге — Кутты, применённый к этому уравнению, сведётся к итерации <math> y_{n+1} = r(h\lambda) \, y_n </math>, с ''r'', равным
Преимуществом неявных методов Рунге — Кутты в сравнении с явными является их бо́льшая устойчивость, что особенно важно при решении [[жёсткая система|жестких уравнений]]. Рассмотрим в качестве примера линейное уравнение ''y' '' = λ''y''. Обычный метод Рунге — Кутты, применённый к этому уравнению, сведётся к итерации <math> y_{n+1} = r(h\lambda) \, y_n </math>, с ''r'', равным


:<math> r(z) = 1 + z b^T (I-zA)^{-1} e = \frac{\det(I-zA+zeb^T)}{\det(I-zA)}, </math>
: <math> r(z) = 1 + z b^T (I-zA)^{-1} e = \frac{\det(I-zA+zeb^T)}{\det(I-zA)}, </math>


где <math>e</math> обозначает вектор-столбец из единиц{{sfn|Hairer & Wanner|1996|p=40—41}}. Функция <math>r</math> называется ''функцией устойчивости''{{sfn|Hairer & Wanner|1996|p=40}}. Из формулы видно, что <math>r</math> является отношением двух полиномов степени <math>s</math>, если метод имеет <math>s</math> стадий. Явные методы имеют строго нижнюю треугольную матрицу <math>A,</math> откуда следует, что <math>\det (I - z A) = 1,</math> и что функция устойчивости является многочленом{{sfn|Iserles|1996|p=60}}.
где <math>e</math> обозначает вектор-столбец из единиц{{sfn|Hairer & Wanner|1996|p=40—41}}. Функция <math>r</math> называется ''функцией устойчивости''{{sfn|Hairer & Wanner|1996|p=40}}. Из формулы видно, что <math>r</math> является отношением двух полиномов степени <math>s</math>, если метод имеет <math>s</math> стадий. Явные методы имеют строго нижнюю треугольную матрицу <math>A,</math> откуда следует, что <math>\det (I - z A) = 1,</math> и что функция устойчивости является многочленом{{sfn|Iserles|1996|p=60}}.


Численное решение данного примера дает чистый ноль при условии <math>| r(z) | < 1</math> с <math>z = h\lambda</math>. Множество таких <math>r</math> называется ''областью абсолютной устойчивости''. В частности, метод называется ''A-устойчивым'', если все <math>r</math> с <math>\textrm{Re}(z) < 0</math> находятся в области абсолютной устойчивости. Функция устойчивости явного метода Рунге — Кутты является многочленом, поэтому явные методы Рунге — Кутты в принципе не могут быть A-устойчивыми{{sfn|Iserles|1996|p=60}}.
Численное решение данного примера сходится к нулю при условии <math>| r(z) | < 1</math> с <math>z = h\lambda</math>. Множество таких <math>z</math> называется ''областью абсолютной устойчивости''. В частности, метод называется ''A-устойчивым'', если все <math>z</math> с <math>\textrm{Re}(z) < 0</math> находятся в области абсолютной устойчивости. Функция устойчивости явного метода Рунге — Кутты является многочленом, поэтому явные методы Рунге — Кутты в принципе не могут быть A-устойчивыми{{sfn|Iserles|1996|p=60}}.


Если метод имеет порядок <math>p</math>, то функция устойчивости удовлетворяет условию <math> r(z) = \textrm{e}^z + O(z^{p+1}) </math> при <math> z \to 0 </math>. Таким образом, представляет интерес отношение многочленов данной степени, приближающее экспоненциальную функцию наилучшим образом. Эти отношения известны как [[аппроксимация_Паде|аппроксимации Паде]]. Аппроксимация Паде с числителем степени <math>m</math> и знаменателем степени <math>n</math> А-устойчива тогда и только тогда, когда <math>m \le n \le m + 2.</math>{{sfn|Iserles|1996|p=62—63}}
Если метод имеет порядок <math>p</math>, то функция устойчивости удовлетворяет условию <math> r(z) = \textrm{e}^z + O(z^{p+1}) </math> при <math> z \to 0 </math>. Таким образом, представляет интерес отношение многочленов данной степени, приближающее экспоненциальную функцию наилучшим образом. Эти отношения известны как [[аппроксимация Паде|аппроксимации Паде]]. Аппроксимация Паде с числителем степени <math>m</math> и знаменателем степени <math>n</math> А-устойчива тогда и только тогда, когда <math>m \le n \le m + 2.</math>{{sfn|Iserles|1996|p=62—63}}


<math>s</math>-стадийный метод Гаусса — Лежандра имеет порядок <math>2s</math>, поэтому его функция устойчивости является приближением Паде <math>m=n=s</math>. Отсюда следует, что метод является A-устойчивым{{sfn|Iserles|1996|p=63}}. Это показывает, что A-устойчивые методы Рунге — Кутты могут иметь сколь угодно высокий порядок. В отличие от этого, порядок А-устойчивости [[метод_Адамса|методов Адамса]] не может превышать два.
<math>s</math>-стадийный метод Гаусса — Лежандра имеет порядок <math>2s</math>, поэтому его функция устойчивости является приближением Паде <math>m=n=s</math>. Отсюда следует, что метод является A-устойчивым{{sfn|Iserles|1996|p=63}}. Это показывает, что A-устойчивые методы Рунге — Кутты могут иметь сколь угодно высокий порядок. В отличие от этого, порядок А-устойчивости [[метод Адамса|методов Адамса]] не может превышать два.


== Произношение ==
== Произношение ==
Согласно грамматическим нормам русского языка, фамилия Ку́тта склоняется, поэтому говорят: «Метод Ру́нге&nbsp;— Ку́тты». Правила русской грамматики предписывают склонять все фамилии (в том числе и мужские), оканчивающиеся на -а, -я, которым предшествует согласный. Единственное исключение — фамилии французского происхождения с ударением на последнем слоге типа Дюма́, Золя́<ref>[http://new.gramota.ru/spravka/letters/71-rubric-482 Как склонять фамилии (трудные случаи) — «Грамота.ру» — справочно-информационный Интернет-портал «Русский язык»]</ref>. Однако иногда встречается несклоняемый вариант «Метод Ру́нге&nbsp;— Ку́тта» (например, в книге<ref>{{книга|автор=Демидович Б. П., Марон И. А., Шувалова Э. З. |заглавие=Численные методы анализа. 3-е изд|место=М.|издательство=[[Наука (издательство)|Наука]]|год=1967}}</ref>).
Согласно грамматическим нормам русского языка, фамилия Ку́тта склоняется, поэтому говорят: «Метод Ру́нге — Ку́тты». Правила русской грамматики предписывают склонять все фамилии (в том числе и мужские), оканчивающиеся на -а, -я, которым предшествует согласный. Единственное исключение — фамилии французского происхождения с ударением на последнем слоге типа Дюма́, Золя́<ref>{{Cite web |url=http://new.gramota.ru/spravka/letters/71-rubric-482 |title=Как склонять фамилии (трудные случаи) — «Грамота.ру» — справочно-информационный Интернет-портал «Русский язык» |access-date=2016-07-05 |archive-date=2018-05-23 |archive-url=https://web.archive.org/web/20180523112050/http://new.gramota.ru/spravka/letters/71-rubric-482 |deadlink=no }}</ref>. Однако иногда встречается несклоняемый вариант «Метод Ру́нге — Ку́тта» (например, в книге<ref>{{книга|автор=Демидович Б. П., Марон И. А., Шувалова Э. З. |заглавие=Численные методы анализа. 3-е изд|место=М.|издательство=[[Наука (издательство)|Наука]]|год=1967}}</ref>).


== Пример решения на алгоритмических языках программирования ==
== Пример решения на алгоритмических языках программирования ==
{{EF|:|<math>y'' + 4y = \cos 3x,\quad y(0) = 0.8,\ y'(0) = 2,\ x \in [0,1],\ h = 0.1</math>}}
{{EF|:|<math>y'' + 4y = \cos 3x,\quad y(0) = 0.8,\ y'(0) = 2,\ x \in [0,1],\ h = 0.1</math>}}
производя замену <math>y'=z</math> и перенося <math>4y</math> в правую часть, получаем систему:
производя замену <math>y'=z</math> и перенося <math>4y</math> в правую часть, получаем систему:


{{EF|:|<math>\begin{cases}
{{EF|:|<math>\begin{cases}
Строка 349: Строка 349:


== Пример решения в среде [[MATLAB]] ==
== Пример решения в среде [[MATLAB]] ==
Решение систем дифференциальных уравнений методом Рунге — Кутты является одним из самых распространённых численных методов решений в технике. В среде [[MATLAB]] реализована его одна из разновидностей — {{iw|4=Dormand–Prince_method|1=метод Дормана — Принса}}. Для решения системы уравнений необходимо сначала записать функцию, вычисляющую производные, т. е. функции ''y'' = ''g''(''x'', ''y'', ''z'') и ''z'' = cos(3''x'') − 4''y'' = ''f''(''x'', ''y'', ''z''), о чём сказано выше. В одном из каталогов, к которому имеется доступ из системы [[MATLAB]], нужно создать текстовый файл с именем (например) ''runge.m'' со следующим содержимым (для MATLAB версии 5.3):
Решение систем дифференциальных уравнений методом Рунге — Кутты является одним из самых распространённых численных методов решений в технике. В среде [[MATLAB]] реализована его одна из разновидностей — {{iw|4=Dormand–Prince_method|1=метод Дормана — Принса}}. Для решения системы уравнений необходимо сначала записать функцию, вычисляющую производные, то есть функции ''y'' = ''g''(''x'', ''y'', ''z'') и ''z'' = cos(3''x'') − 4''y'' = ''f''(''x'', ''y'', ''z''), о чём сказано выше. В одном из каталогов, к которому имеется доступ из системы [[MATLAB]], нужно создать текстовый файл с именем (например) ''runge.m'' со следующим содержимым (для MATLAB версии 5.3):
{{Hider
{{Hider
|title=[[MATLAB]], runge.m
|title=[[MATLAB]], runge.m
Строка 377: Строка 377:
</source>
</source>
}}
}}
Так как [[MATLAB]] ориентирован на работу с матрицами, решение по методу Рунге — Кутты очень легко выполняется для целого ряда ''x'' как, например, в приведённом примере программы. Здесь решение — график функции в пределах времён от ''0'' до ''x_fin''.
Так как [[MATLAB]] ориентирован на работу с матрицами, решение по методу Рунге — Кутты очень легко выполняется для целого ряда ''x'', как, например, в приведённом примере программы. Здесь решение — график функции в пределах времён от ''0'' до ''x_fin''.
[[File:Runge_plot.jpg|thumb|650px|center|Решение в среде [[MATLAB]]]]
[[Файл:Runge_plot.jpg|thumb|650px|center|Решение в среде [[MATLAB]]]]
Переменные ''x'' и ''y'', полученные в результате работы функции ''ODE45'', есть векторы значений. Очевидно, что решение конкретно заданного выше примера — второй элемент ''x'', так как первое значение 0, шаг интегрирование ''h'' = 0,1, а интересуемое значение ''x'' = 0,1.
Переменные ''x'' и ''y'', полученные в результате работы функции ''ODE45'', есть векторы значений. Очевидно, что решение конкретно заданного выше примера — второй элемент ''x'', так как первое значение 0, шаг интегрирования ''h'' = 0,1, а интересующее значение ''x'' = 0,1.
Следующая запись в командном окне [[MATLAB]] даст искомое решение:
Следующая запись в командном окне [[MATLAB]] даст искомое решение:
{{Hider
{{Hider
Строка 394: Строка 394:


== Литература ==
== Литература ==
{{Навигация}}
* {{книга|автор=Hairer E., Wanner G. |заглавие=Solving ordinary differential equations II: Stiff and differential-algebraic problems. 2nd ed|место=Berlin, New York|издательство=[[Springer-Verlag]]|год=1996|isbn=978-3-540-60452-5|ref=Hairer & Wanner}}
* {{книга|автор=Hairer E., Wanner G. |заглавие=Solving ordinary differential equations II: Stiff and differential-algebraic problems. 2nd ed|место=Berlin, New York|издательство=[[Springer-Verlag]]|год=1996|isbn=978-3-540-60452-5|ref=Hairer & Wanner}}
* {{книга|автор=Iserles A. |заглавие=A First Course in the Numerical Analysis of Differential Equations|место=Cambridge|издательство=[[Cambridge University Press]]|год=1996|isbn=978-0-521-55655-2|ref=Iserles}}
* {{книга|автор=Iserles A. |заглавие=A First Course in the Numerical Analysis of Differential Equations|место=Cambridge|издательство=[[Cambridge University Press]]|год=1996|isbn=978-0-521-55655-2|ref=Iserles}}
* {{книга|автор=Süli E., Mayers D. |заглавие=An Introduction to Numerical Analysis|место=Cambridge|издательство=[[Cambridge University Press]]|год=2003|isbn=0-521-00794-1|ref=Süli & Mayers}}
* {{книга|автор=Süli E., Mayers D. |заглавие=An Introduction to Numerical Analysis|место=Cambridge|издательство=[[Cambridge University Press]]|год=2003|isbn=0-521-00794-1|ref=Süli & Mayers}}


{{ВС}}
{{Метод конечных разностей}}
{{Метод конечных разностей}}



Текущая версия от 10:36, 9 марта 2024

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

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

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

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

[править | править код]

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

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

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

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

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

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

Явные методы Рунге — Кутты

[править | править код]

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

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

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

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

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

Неявные методы Рунге — Кутты

[править | править код]

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

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

где

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

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

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

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

[править | править код]

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

.

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

Прогноз:

.

Коррекция:

.

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

Устойчивость

[править | править код]

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

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

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

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

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

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

[править | править код]

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

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

[править | править код]

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

В программе на С# используется абстрактный класс 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. — 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.[англ.] . 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.

Литература

[править | править код]