[theory] Add new method; Fix styling
This commit is contained in:
parent
eef44ba60d
commit
da1e6ef1db
190
main.tex
190
main.tex
@ -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}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user