Compare commits

...

3 Commits

Author SHA1 Message Date
AVAtarMod
eef44ba60d
[content] Add 2 SLE methods. Refactor 2023-08-19 19:39:39 +03:00
AVAtarMod
267497e79c
[sources] Add book, 1 link. Refactor command 2023-08-19 19:39:39 +03:00
AVAtarMod
587dd77d25
[content] Replace quotation marks symbols to <<, >> 2023-08-19 19:39:39 +03:00
3 changed files with 159 additions and 11 deletions

View File

@ -20,6 +20,7 @@
\usepackage{xstring}
\usepackage{tabularx}
\usepackage{enumitem}
\usepackage[strict=true]{csquotes}
\usepackage[abspath]{currfile}
\usepackage[hidelinks,linktoc=all]{hyperref}
@ -179,3 +180,4 @@
% ОФОРМЛЕНИЕ ТЕКСТА
\renewcommand{\baselinestretch}{1.5}
\MakeOuterQuote{"}

154
main.tex
View File

@ -58,6 +58,7 @@
непрерывна, то обязательно найдется такое \(x_k \in (a,b)\), что
\(F(x_k) = 0\) либо \(|F(x_k)| < \varepsilon\), где \(\varepsilon\)
--- погрешность искомого решения.
\subsection{Метод деления отрезка пополам}
Данный метод использует технику поиска решения, похожую на бинарный
поиск.
@ -219,7 +220,14 @@
\end{itemize}
\item \(disp\) --- bool, необязательный
Если \verb|True| и алгоритм не сошелся, будет сгенерировано исключение \verb|RuntimeError|, с сообщением, содержащим количество итераций и текущее значение функции. В противном случае статус сходимости записывается в возвращаемый объект \verb|RootResults|. Игнорируется, если \verb|x0| не является скалярным. Примечание: это не имеет ничего общего с отображением, однако ключевое слово \verb|disp| нельзя переименовать для сохранения обратной совместимости.
Если \verb|True| и алгоритм не сошелся, будет сгенерировано
исключение \verb|RuntimeError|, с сообщением, содержащим
количество итераций и текущее значение функции. В противном
случае статус сходимости записывается в возвращаемый объект
\verb|RootResults|. Игнорируется, если \verb|x0| не является
скалярным. Примечание: это не имеет ничего общего с
отображением, однако ключевое слово \verb|disp| нельзя
переименовать для сохранения обратной совместимости.
\end{enumerate}
\subsection{Метод простой итерации}
@ -229,7 +237,8 @@
Уравнение \(F(x)=0\) приводим к виду \(x = \varphi(x)\), например
\(x-F(x)/M\), где \(M\) --- константа.
Условие сходимости алгоритма: \(0<|\varphi'(x)|<1\). Исходя из него, \(M\) определяется как \(M=1.01*F'(x_0)\), где \(x_0\) ---
Условие сходимости алгоритма: \(0<|\varphi'(x)|<1\). Исходя из него,
\(M\) определяется как \(M=1.01 \cdot F'(x_0)\), где \(x_0\) ---
начальное приближение.
Таким образом, для итерации \(i, i = 1\dots k,\)
@ -242,17 +251,150 @@
В библиотеках numpy, scipy не найдено реализаций данного метода.
\section{Методы решения систем линейных алгебраических уравнений}
Система линейных алгебраических (далее, СЛУ) уравнений имеет вид
\begin{eqnarray}
\left\{
\begin{aligned}
& 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_{n1}x_1 + a_{n2}x_2 + a_{nn}x_n = b_n \\
\end{aligned}
\right.
\label{formula:eqn_system}
\end{eqnarray}
Для решения таких систем существуют прямые и итерационные методы.
Прямые методы (к ним относятся "метод Гаусса", "метод обратной матрицы"
и "метод прогонки") позволяют получить решение за конечное количество
операций, точность которого ограничивается лишь погрешностью округления.
Итерационные методы (среди которых есть методы, такие как
"метод простой итерации" и "метод Зейделя") позволяют получить
приближенное решение с помощью последовательного приближения к точному.
\subsection{Метод Гаусса}
TODO
\subsubsection{Описание метода}
TODO
Для решения СЛУ система (\ref{formula:eqn_system}) приводится к
треугольному виду (\ref{formula:triag_eqn_system}) с помощью цепочки элементарных преобразований.
\begin{eqnarray}
\left\{
\begin{aligned}
& 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 + 0x_2 + a'_{nn}x_n = b'_n \\
\end{aligned}
\right.
\label{formula:triag_eqn_system}
\end{eqnarray}
Данный процесс называется прямым ходом, а нахождение неизвестных
\(x_n, x_{n-1}, \dots,x_1 \) --- обратным.
\subsubsection{Реализации метода в библиотеках numpy, scipy}
В библиотеке scipy реализован частный случай метода Гаусса ---
LU-разложение \cite[с. 259]{book:levitin}. Для получения решения
СЛУ необходимо задействовать две функции из модуля \textbf{scipy.linalg} \cite{links:scipy_doc}:
\begin{enumerate}
\item Для получения разложения используется функция
\textbf{lu\_factor}.
\item Для совершения обратного хода алгоритма используется
\textbf{lu\_solve}, которая принимает на вход разложение с
предыдущего этапа.
\end{enumerate}
Функция \textbf{lu\_factor} имеет следующие параметры (задаются в порядке перечисления):
\begin{enumerate}
\item \(a\) --- (M, N) array\_like
Матрица для разложения
\item \(overwrite\_a\) bool, необязательный
Следует ли перезаписывать данные в A (может повысить
производительность). По умолчанию \verb|False|.
\item \(check\_finite\) bool, необязательный
Проверять, содержит ли входная матрица только конечные числа.
Отключение может дать прирост производительности, но может
привести к проблемам (сбоям, незавершению), если входные данные
содержат бесконечности или NaN. По умолчанию \verb|True|.
\end{enumerate}
Функция \textbf{lu\_solve} имеет следующие параметры (задаются в порядке перечисления):
\begin{enumerate}
\item \((lu, piv)\) --- tuple
Факторизация матрицы коэффициентов a, полученная из
\textbf{lu\_factor}.
\item \(b\) --- array
Правая сторона
\item \(trans\) --- {0, 1, 2}, необязательный
Тип системы, которую необходимо решить:
\begin{tabularx}{0.8\textwidth}{|X|X|}
\hline \(trans\) & вид системы \\
\hline 0 & \(ax = b\) \\
\hline 1 & \(a^T x = b\) \\
\hline 2 & \(a^H x = b\) \\
\hline
\end{tabularx}\\
По умолчанию \verb|0|.
\item \(overwrite\_b\) --- bool, необязательный
Следует ли перезаписывать данные в \(b\) (может повысить производительность). По умолчанию \verb|False|.
\item \(check\_finite\) --- bool, необязательный
Проверять, содержат ли входные матрицы только конечные числа.
Отключение может дать прирост производительности, но может
привести к проблемам (сбоям, незавершению), если входные данные
содержат бесконечности или NaN. По умолчанию \verb|True|.
\end{enumerate}
\subsection{Метод обратной матрицы}
TODO
\subsubsection{Описание метода}
TODO
Исходная система (\ref{formula:eqn_system}) представляется в форме
\(AX=B\), тогда вектор неизвестных переменных \(X\) определяется по
формуле (\ref{formula:inv_m_method}).
\begin{equation}
X=A^{-1}B
\label{formula:inv_m_method}
\end{equation}
\subsubsection{Реализации метода в библиотеках numpy, scipy}
Отдельной функции для решения СЛУ не существует, вектор \(X\) можно
найти по формуле (\ref{formula:inv_m_method}). Для получения \(A^{-1}\)
существует функция \textbf{inv} в модуле \textbf{scipy.linalg}
\cite{links:scipy_doc} библиотеки scipy, и функция \textbf{inv} в модуле
\textbf{numpy.linalg} библиотеки numpy. Для перемножения \(A^{-1}\)
и \(B\) в языке Python есть оператор \verb|@|, начиная с версии \(3.5\)
\cite{links:numpy_doc}\cite{links:PEP465}.
В результате для получения решения СЛУ необходимо выполнить выражение
\verb|inv(A) @ B|, используя одну из вышеописанных функций.
Функция \textbf{inv} модуля \textbf{scipy.linalg} имеет следующие
параметры (задаются в порядке перечисления):
\begin{enumerate}
\item \(a\) --- array\_like
Квадратная матрица, которую необходимо инвертировать.
\item \(overwrite\_a\) --- bool, необязательный
Не запоминать состояние \(a\) (может улучшить
производительность). По умолчанию \verb|False|.
\item \(check\_finite\) --- bool, необязательный
Проверять, содержат ли входные матрицы только конечные числа.
Отключение может дать прирост производительности, но может
привести к проблемам (сбоям, незавершению), если входные данные
содержат бесконечности или NaN. По умолчанию \verb|True|.
\end{enumerate}
Функция \textbf{inv} модуля \textbf{scipy.linalg} имеет следующие
параметры (задаются в порядке перечисления):
\begin{enumerate}
\item \(a\) --- аналогичен параметру \(a\) функции из модуля \textbf{scipy.linalg}.
\end{enumerate}
\subsection{Метод прогонки}
TODO

View File

@ -1,9 +1,11 @@
\newcommand{\LiteratureAccessDate}[1][1]{%
дата~обращения: \ifcase#1\or 03.08.2023%
\or 07.08.2023%
\or 09.08.2023%
дата~обращения: \ifcase#1%
\or 03.08.2023% 1 (default)
\or 07.08.2023% 2
\or 09.08.2023% 3
\or 19.08.2023% 4
\else\@ctrerr\fi
}
}
\renewcommand\bibname{Библиографический список}
\begin{thebibliography}{00}
\addcontentsline{toc}{chapter}{Библиографический список}
@ -12,9 +14,11 @@
\bibitem{book:bahvalov} Бахвалов~Н.~С., Жидков~Н.~П.,
Кобельков~Г.~М. Численные методы. -- 7-е изд. -- М.: БИНОМ. Лаборатория знаний,
2011. -- 636 с., c илл. -- (Классический университетский учебник).
\bibitem{book:levitin} Левитин~A.~В. Алгоритмы: введение в разработку и анализ. -- Пер.~с~англ. -- М.:Издательский~дом~"Вильяме", 2006. -- 576 с., с ил.
\bibitem{book:lectures} Письменный~Д.~Т. Конспект лекций по высшей математике. 2 часть. -- М.: Рольф, 2000. -- 256 с., с илл.
\bibitem{links:numpy} Numpy. Официальный сайт проекта [Электронный ресурс] -- URL:~\url{https://numpy.org/} (\LiteratureAccessDate[2]).
\bibitem{links:numpy_doc} Numpy API Reference [Электронный ресурс] -- URL:~\url{https://numpy.org/doc/stable/reference/index.html} (\LiteratureAccessDate[3]).
\bibitem{links:PEP465} PEP 465 -- A dedicated infix operator for matrix multiplication [Электронный ресурс] -- URL:~\url{A dedicated infix operator for matrix multiplication} (\LiteratureAccessDate[4]).
\bibitem{links:python} Python. Официальный сайт проекта [Электронный ресурс] -- URL:~\url{https://www.python.org/} (\LiteratureAccessDate).
\bibitem{links:scipy} Scipy. Официальный сайт проекта [Электронный ресурс] -- URL:~\url{https://scipy.org/} (\LiteratureAccessDate[2]).
\bibitem{links:scipy_doc} Scipy API Reference [Электронный ресурс] -- URL:~\url{https://docs.scipy.org/doc/scipy/reference/index.html} (\LiteratureAccessDate[3]).