[theory] Add new method; Fix styling

This commit is contained in:
AVAtarMod 2023-08-21 23:37:57 +03:00
parent eef44ba60d
commit da1e6ef1db
Signed by: stud128245
GPG Key ID: 43198AE4D0774328

190
main.tex
View File

@ -257,7 +257,7 @@
\begin{aligned} \begin{aligned}
& a_{11}x_1 + a_{12}x_2 + a_{1n}x_n = b_1 \\ & a_{11}x_1 + a_{12}x_2 + a_{1n}x_n = b_1 \\
& a_{21}x_1 + a_{22}x_2 + a_{2n}x_n = b_2 \\ & a_{21}x_1 + a_{22}x_2 + a_{2n}x_n = b_2 \\
& ........................................ \\ & \dots\dots\dots\dots\dots\dots\dots\dots \\
& a_{n1}x_1 + a_{n2}x_2 + a_{nn}x_n = b_n \\ & a_{n1}x_1 + a_{n2}x_2 + a_{nn}x_n = b_n \\
\end{aligned} \end{aligned}
\right. \right.
@ -281,7 +281,7 @@
\begin{aligned} \begin{aligned}
& a'_{11}x_1 + a'_{12}x_2 + a'_{1n}x_n = b'_1 \\ & a'_{11}x_1 + a'_{12}x_2 + a'_{1n}x_n = b'_1 \\
& 0x_1 + a'_{22}x_2 + a'_{2n}x_n = b'_2 \\ & 0x_1 + a'_{22}x_2 + a'_{2n}x_n = b'_2 \\
& ........................................ \\ & \dots\dots\dots\dots\dots\dots\dots. \\
& 0x_1 + 0x_2 + a'_{nn}x_n = b'_n \\ & 0x_1 + 0x_2 + a'_{nn}x_n = b'_n \\
\end{aligned} \end{aligned}
\right. \right.
@ -389,6 +389,7 @@ LU-разложение \cite[с. 259]{book:levitin}. Для получения
привести к проблемам (сбоям, незавершению), если входные данные привести к проблемам (сбоям, незавершению), если входные данные
содержат бесконечности или NaN. По умолчанию \verb|True|. содержат бесконечности или NaN. По умолчанию \verb|True|.
\end{enumerate} \end{enumerate}
\vspace{\baselineskip}
Функция \textbf{inv} модуля \textbf{scipy.linalg} имеет следующие Функция \textbf{inv} модуля \textbf{scipy.linalg} имеет следующие
параметры (задаются в порядке перечисления): параметры (задаются в порядке перечисления):
@ -397,106 +398,225 @@ LU-разложение \cite[с. 259]{book:levitin}. Для получения
\end{enumerate} \end{enumerate}
\subsection{Метод прогонки} \subsection{Метод прогонки}
TODO Данный метод применяется для решения трехдиагональных матриц \hspace{1mm} вида
\begin{equation}
\left\{
\begin{aligned}
& a_1 x_0 + b_1 x_1 + c_1 x_2 = d_1 \\
& a_2 x_1 + b_2 x_2 + c_2 x_3 = d_2 \\
& \dots\dots\dots\dots\dots\dots\dots \\
& a_n x_{n-1} + b_n x_n + c_n x_{n+1} = d_n \\
\end{aligned}
\right.
\label{formula:eqn_banded_system}
\end{equation}
Является частным случаем метода Гаусса.
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO После исключения переменных ниже главной диагонали с помощью
элементарных преобразований, в каждом уравнении СЛУ остается
\(\leq 2\) неизвестных. В таком случае, формула обратного хода будет
следующей: \(x_i = U_i x_{i+1}+V_i, i = n,n-1,\dots,1\). После замены
\(i\) на \(i-1\) и подстановке выражения в общий вид уравнения из СЛУ
(\ref{formula:eqn_banded_system}) \(a_i x_{i-1} + b_i x_i + c_i x_{i+1}\)
получим следующее выражение:
\begin{equation}
x_i = - \frac{c_i}{a_i U_{i-1} + b_i} x_{i+1} +
\frac{d_i - a_i V_{i-1}}{a_i U_{i-1} + b_i}
\end{equation}
Из которого получим:
\begin{equation}
U_i = - \frac{c_i}{a_i U_{i-1} + b_i},
V_i = \frac{d_i - a_i V_{i-1}}{a_i U_{i-1} + b_i}
\hspace{1cm} i = 1,2,3,\dots,n
\end{equation}
При этом \( c_n = 0; a_1 = 0\).
Таким образом, сначала вычисляем \(U_i, V_i\), затем
\(x_i, i =n,n-1,\dots,1\).
Данный метод в общем случае не устойчив, за исключением случаев,
когда матрица СЛУ обладает свойством диагонального преобладания
(условие \ref{formula:eqn_diag_dominant}) или она положительно
определенная \cite{links:bhatia}.
\begin{equation}
\sum_{i \ne j} |a_{ij}| < |a_{ii}|
\label{formula:eqn_diag_dominant}
\end{equation}
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
В scipy для решения СЛУ вида (\ref{formula:eqn_banded_system})
существует две функции в модуле \textbf{scipy.linalg}:
\textbf{solve\_banded} \cite{links:scipy_doc} и
\textbf{solveh\_banded} \cite{links:scipy_doc}.
Различие между ними заключается в том, что \textbf{solve\_banded}
не использует метод прогонки, из-за низкой устойчивости метода в общем
случае, что позволяет найти решение даже если матрица не положительно
определенная или не обладает свойством диагонального преобладания.
\textbf{solveh\_banded} реализует метод прогонки, но авторы библиотеки
указывают, что вводимая матрица должна быть положительно определенной
\cite{links:scipy_doc}.
Функция \textbf{solve\_banded} имеет следующие параметры (задаются в
порядке перечисления):
\begin{enumerate}
\item \((l, u)\) --- (integer, integer) tuple
Количество ненулевых нижних и верхних диагоналей.
\item \(ab\) --- (l + u + 1, M) array\_like
Ленточная матрица.
\item \(b\) --- (M,) or (M, K) array\_like
Правая сторона.
\item \(overwrite\_ab\) --- bool, необязательный
Разрешить изменять данные в \(ab\) (может повысить
производительность). По умолчанию \verb|False|.
\item \(overwrite\_b\) --- bool, необязательный
Разрешить изменять данные в \(b\) (может повысить
производительность). По умолчанию \verb|False|.
\item \(check\_finite\) --- bool, необязательный
Проверять, содержат ли входные матрицы только конечные числа.
Отключение может дать прирост производительности, но может
привести к проблемам (сбоям, незавершению), если входные данные
содержат бесконечности или NaN. По умолчанию \verb|True|.
\end{enumerate}
Функция \textbf{solveh\_banded} имеет несколько иной набор параметров
(задаются в порядке перечисления):
\begin{enumerate}
\item \(ab\) --- (u + 1, M) array\_like
Ленточная матрица, \(u\) --- число верхних диагоналей.
\item \(b\) --- (M,) or (M, K) array\_like
Правая сторона.
\item \(overwrite\_ab\) --- bool, необязательный
Разрешить изменять данные в \(ab\) (может повысить
производительность). По умолчанию \verb|False|.
\item \(overwrite\_b\) --- bool, необязательный
Разрешить изменять данные в \(b\) (может повысить
производительность). По умолчанию \verb|False|.
\item \(lower\) --- bool, необязательный
Является ли матрица в нижней форме. (По умолчанию используется
верхняя форма), то есть \verb|False|.
\item \(check\_finite\) --- bool, необязательный
Совпадает с параметром \(check\_finite\) функции
\textbf{solve\_banded}.
\end{enumerate}
Обе функции принимают матрицу \(ab\) либо в верхней (\textbf{solve\_banded}), либо в нижней форме (\textbf{solveh\_banded} при
включенной опции \(lower\)). Например, для матрицы
\begin{tabular}[htpb]{ccccc}
5 & 2 & -1 & 0 & 0 \\
1 & 4 & 2 & -1 & 0 \\
0 & 1 & 3 & 2 & -1 \\
0 & 0 & 1 & 2 & 2 \\
0 & 0 & 0 & 1 & 1 \\
\end{tabular}\\
верхняя форма будет следующей:
\begin{tabular}[htpb]{ccccc}
0 & 0 & -1 & -1 & -1 \\
0 & 2 & 2 & 2 & 2 \\
5 & 4 & 3 & 2 & 1 \\
1 & 1 & 1 & 1 & 0 \\
\end{tabular}
Так как данная матрица не эрмитова, и, следовательно, не положительно
определенна, описание нижней формы для нее неуместно. Если взять эрмитову
положительно определенную матрицу
\begin{tabular}[htpb]{cccccc}
4 & 2 & -1 & 0 & 0 & 0 \\
2 & 5 & 2 & -1 & 0 & 0 \\
-1 & 2 & 6 & 2 & -1 & 0 \\
0 & -1 & 2 & 7 & 2 & -1 \\
0 & 0 & -1 & 2 & 8 & 2 \\
0 & 0 & 0 & -1 & 2 & 9 \\
\end{tabular}\\
то ее нижняя форма будет следующая:
\begin{tabular}[htpb]{cccccc}
4 & 5 & 6 & 7 & 8 & 9 \\
2 & 2 & 2 & 2 & 2 & 0 \\
-1 & -1 & -1 & -1 & 0 & 0 \\
\end{tabular}
\subsection{Метод простой итерации (метод Якоби)} \subsection{Метод простой итерации (метод Якоби)}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\subsection{Метод Зейделя} \subsection{Метод Зейделя}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\section{Численные методы решения систем нелинейных уравнений} \section{Численные методы решения систем нелинейных уравнений}
TODO
\subsection{Метод простой итерации (метод Якоби) для систем \subsection{Метод простой итерации (метод Якоби) для систем
нелинейных уравнений} нелинейных уравнений}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\subsection{Метод Зейделя для систем нелинейных уравнений} \subsection{Метод Зейделя для систем нелинейных уравнений}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\subsection{Метод Ньютона решения систем нелинейных уравнений} \subsection{Метод Ньютона решения систем нелинейных уравнений}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\section{Аппроксимация функций} \section{Аппроксимация функций}
\subsection{Интерполяционный полином в форме Лагранжа} \subsection{Интерполяционный полином в форме Лагранжа}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\subsection{Интерполяционный полином в форме Ньютона} \subsection{Интерполяционный полином в форме Ньютона}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\subsection{Сплайн-интерполяция} \subsection{Сплайн-интерполяция}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\subsection{Сглаживание. Метод наименьших квадратов} \subsection{Сглаживание. Метод наименьших квадратов}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\section{Численное интегрирование} \section{Численное интегрирование}
\subsection{Метод прямоугольников} \subsection{Метод прямоугольников}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\subsection{Метод трапеций} \subsection{Метод трапеций}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\subsection{Метод парабол (Симпсона)} \subsection{Метод парабол (Симпсона)}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\section{Численное решение обыкновенных дифференциальных уравнений} \section{Численное решение обыкновенных дифференциальных уравнений}
\subsection{Метод Эйлера} \subsection{Метод Эйлера}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\subsection{Модифицированный метод Эйлера} \subsection{Модифицированный метод Эйлера}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}
\subsection{Метод Рунге-Кутта} \subsection{Метод Рунге-Кутта}
TODO
\subsubsection{Описание метода} \subsubsection{Описание метода}
TODO
\subsubsection{Реализации метода в библиотеках numpy, scipy} \subsubsection{Реализации метода в библиотеках numpy, scipy}