-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add description for runge kutta method
- Loading branch information
Showing
6 changed files
with
86 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
\section{Вычислительная сложность основных алгоритмов}\label{sec:algorithms_kenv} | ||
Ядром кода KENV служит функция solve\_ivp из библиотеки scipy~\cite{2020SciPy} для решения дифференциальных уравнений Капчинского-Владимирского. | ||
Авторами данной библиотеки рекомендуется использовать метод Рунге-Кутта 4 порядка для решения дифференциальных уравнений. | ||
Рассмотрим точность этого метода. | ||
|
||
Листинг основных функций KENV с комментариями приведен в приложении~Б. | ||
|
||
\subsection{Метод Рунге-Кутта 4-го порядка}\label{subsec:runge_kutta_4} | ||
|
||
Метод Рунге-Кутта 4-го порядка является одним из наиболее широко используемых численных методов для решения обыкновенных дифференциальных уравнений (ОДУ). | ||
Основное его преимущество заключается в высокой точности и относительной простоте реализации. | ||
Этот метод позволяет найти приближенное решение ОДУ, не требуя аналитического интегрирования. | ||
|
||
Для дифференциального уравнения вида: | ||
\begin{equation} | ||
\label{eq:diff_equation} | ||
\frac{dy}{dx} = f(x, y), | ||
\end{equation} | ||
где $y = y(x)$ — искомая функция, метод Рунге-Кутта 4-го порядка определяет значение $y$ в точке $x + h$ через значение в точке $x$ с помощью следующих вычислений: | ||
\begin{align*} | ||
\label{eq:runge_kutta} | ||
k_1 &= h f(x, y), \\ | ||
k_2 &= h f\left(x + \frac{h}{2}, y + \frac{k_1}{2}\right), \\ | ||
k_3 &= h f\left(x + \frac{h}{2}, y + \frac{k_2}{2}\right), \\ | ||
k_4 &= h f(x + h, y + k_3), \\ | ||
y_{n+1} &= y_n + \frac{1}{6}(k_1 + 2k_2 + 2k_3 + k_4). | ||
\end{align*} | ||
|
||
Здесь $h$ — шаг по переменной $x$, а $y_{n+1}$ — приближенное значение функции $y$ в точке $x + h$. | ||
Величины $k_1$, $k_2$, $k_3$ и $k_4$ представляют собой промежуточные наклоны, | ||
которые используются для вычисления конечного наклона, по которому и определяется следующее значение функции. | ||
|
||
Этот метод обладает четвертым порядком точности, что означает, что ошибка на каждом шаге пропорциональна пятой степени шага $h$. | ||
Благодаря этому, метод Рунге-Кутта 4-го порядка обеспечивает высокую точность при решении дифференциальных уравнений, что делает его особенно полезным для задач, требующих высокой точности, таких как решение уравнения Капчинского-Владимирского для огибающей пучка. | ||
|
||
|
||
\subsection{Порядок точности метода Рунге-Кутта 4-го порядка}\label{subsec:accuracy_runge_kutta} | ||
|
||
Порядок точности численного метода определяет, насколько быстро уменьшается ошибка приближенного решения с уменьшением шага $h$. | ||
Для метода Рунге-Кутта 4-го порядка можно показать, что ошибка на каждом шаге пропорциональна $h^5$, а суммарная ошибка после $N$ шагов пропорциональна $h^4$, если $Nh = const$. | ||
Это делает метод чрезвычайно эффективным для задач, где требуется высокая точность. | ||
|
||
Для вывода порядка точности рассмотрим разложение Тейлора для функции $y(x+h)$: | ||
\begin{equation} | ||
\label{eq:teilor_y} | ||
y(x+h) = y(x) + hy'(x) + \frac{h^2}{2!}y''(x) + \frac{h^3}{3!}y'''(x) + \frac{h^4}{4!}y^{(4)}(x) + O(h^5). | ||
\end{equation} | ||
|
||
Сравнивая это с выражением для $y_{n+1}$, полученным в методе Рунге-Кутта, можно увидеть, что первые четыре члена совпадают, если функция $f(x, y)$ и её производные непрерывны и ограничены. | ||
Различие начинается с членов порядка $O(h^5)$, что указывает на то, что ошибка одного шага метода Рунге-Кутта 4-го порядка имеет порядок $h^5$. | ||
|
||
Однако, поскольку общая ошибка складывается из ошибок на каждом шаге, а количество шагов обратно пропорционально величине шага $h$, то есть $N \propto \frac{1}{h}$, общая ошибка метода пропорциональна $h^4$. |