Compare commits
3 Commits
a8e7135654
...
eef44ba60d
Author | SHA1 | Date | |
---|---|---|---|
|
eef44ba60d | ||
|
267497e79c | ||
|
587dd77d25 |
@ -20,6 +20,7 @@
|
|||||||
\usepackage{xstring}
|
\usepackage{xstring}
|
||||||
\usepackage{tabularx}
|
\usepackage{tabularx}
|
||||||
\usepackage{enumitem}
|
\usepackage{enumitem}
|
||||||
|
\usepackage[strict=true]{csquotes}
|
||||||
\usepackage[abspath]{currfile}
|
\usepackage[abspath]{currfile}
|
||||||
\usepackage[hidelinks,linktoc=all]{hyperref}
|
\usepackage[hidelinks,linktoc=all]{hyperref}
|
||||||
|
|
||||||
@ -179,3 +180,4 @@
|
|||||||
|
|
||||||
% ОФОРМЛЕНИЕ ТЕКСТА
|
% ОФОРМЛЕНИЕ ТЕКСТА
|
||||||
\renewcommand{\baselinestretch}{1.5}
|
\renewcommand{\baselinestretch}{1.5}
|
||||||
|
\MakeOuterQuote{"}
|
||||||
|
154
main.tex
154
main.tex
@ -58,6 +58,7 @@
|
|||||||
непрерывна, то обязательно найдется такое \(x_k \in (a,b)\), что
|
непрерывна, то обязательно найдется такое \(x_k \in (a,b)\), что
|
||||||
\(F(x_k) = 0\) либо \(|F(x_k)| < \varepsilon\), где \(\varepsilon\)
|
\(F(x_k) = 0\) либо \(|F(x_k)| < \varepsilon\), где \(\varepsilon\)
|
||||||
--- погрешность искомого решения.
|
--- погрешность искомого решения.
|
||||||
|
|
||||||
\subsection{Метод деления отрезка пополам}
|
\subsection{Метод деления отрезка пополам}
|
||||||
Данный метод использует технику поиска решения, похожую на бинарный
|
Данный метод использует технику поиска решения, похожую на бинарный
|
||||||
поиск.
|
поиск.
|
||||||
@ -219,7 +220,14 @@
|
|||||||
\end{itemize}
|
\end{itemize}
|
||||||
\item \(disp\) --- bool, необязательный
|
\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}
|
\end{enumerate}
|
||||||
|
|
||||||
\subsection{Метод простой итерации}
|
\subsection{Метод простой итерации}
|
||||||
@ -229,7 +237,8 @@
|
|||||||
Уравнение \(F(x)=0\) приводим к виду \(x = \varphi(x)\), например
|
Уравнение \(F(x)=0\) приводим к виду \(x = \varphi(x)\), например
|
||||||
\(x-F(x)/M\), где \(M\) --- константа.
|
\(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,\)
|
Таким образом, для итерации \(i, i = 1\dots k,\)
|
||||||
@ -242,17 +251,150 @@
|
|||||||
В библиотеках numpy, scipy не найдено реализаций данного метода.
|
В библиотеках numpy, scipy не найдено реализаций данного метода.
|
||||||
|
|
||||||
\section{Методы решения систем линейных алгебраических уравнений}
|
\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{Метод Гаусса}
|
\subsection{Метод Гаусса}
|
||||||
TODO
|
|
||||||
\subsubsection{Описание метода}
|
\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}
|
\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{Метод обратной матрицы}
|
\subsection{Метод обратной матрицы}
|
||||||
TODO
|
|
||||||
\subsubsection{Описание метода}
|
\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}
|
\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{Метод прогонки}
|
\subsection{Метод прогонки}
|
||||||
TODO
|
TODO
|
||||||
|
12
sources.tex
12
sources.tex
@ -1,9 +1,11 @@
|
|||||||
\newcommand{\LiteratureAccessDate}[1][1]{%
|
\newcommand{\LiteratureAccessDate}[1][1]{%
|
||||||
дата~обращения: \ifcase#1\or 03.08.2023%
|
дата~обращения: \ifcase#1%
|
||||||
\or 07.08.2023%
|
\or 03.08.2023% 1 (default)
|
||||||
\or 09.08.2023%
|
\or 07.08.2023% 2
|
||||||
|
\or 09.08.2023% 3
|
||||||
|
\or 19.08.2023% 4
|
||||||
\else\@ctrerr\fi
|
\else\@ctrerr\fi
|
||||||
}
|
}
|
||||||
\renewcommand\bibname{Библиографический список}
|
\renewcommand\bibname{Библиографический список}
|
||||||
\begin{thebibliography}{00}
|
\begin{thebibliography}{00}
|
||||||
\addcontentsline{toc}{chapter}{Библиографический список}
|
\addcontentsline{toc}{chapter}{Библиографический список}
|
||||||
@ -12,9 +14,11 @@
|
|||||||
\bibitem{book:bahvalov} Бахвалов~Н.~С., Жидков~Н.~П.,
|
\bibitem{book:bahvalov} Бахвалов~Н.~С., Жидков~Н.~П.,
|
||||||
Кобельков~Г.~М. Численные методы. -- 7-е изд. -- М.: БИНОМ. Лаборатория знаний,
|
Кобельков~Г.~М. Численные методы. -- 7-е изд. -- М.: БИНОМ. Лаборатория знаний,
|
||||||
2011. -- 636 с., c илл. -- (Классический университетский учебник).
|
2011. -- 636 с., c илл. -- (Классический университетский учебник).
|
||||||
|
\bibitem{book:levitin} Левитин~A.~В. Алгоритмы: введение в разработку и анализ. -- Пер.~с~англ. -- М.:Издательский~дом~"Вильяме", 2006. -- 576 с., с ил.
|
||||||
\bibitem{book:lectures} Письменный~Д.~Т. Конспект лекций по высшей математике. 2 часть. -- М.: Рольф, 2000. -- 256 с., с илл.
|
\bibitem{book:lectures} Письменный~Д.~Т. Конспект лекций по высшей математике. 2 часть. -- М.: Рольф, 2000. -- 256 с., с илл.
|
||||||
\bibitem{links:numpy} Numpy. Официальный сайт проекта [Электронный ресурс] -- URL:~\url{https://numpy.org/} (\LiteratureAccessDate[2]).
|
\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: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:python} Python. Официальный сайт проекта [Электронный ресурс] -- URL:~\url{https://www.python.org/} (\LiteratureAccessDate).
|
||||||
\bibitem{links:scipy} Scipy. Официальный сайт проекта [Электронный ресурс] -- URL:~\url{https://scipy.org/} (\LiteratureAccessDate[2]).
|
\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]).
|
\bibitem{links:scipy_doc} Scipy API Reference [Электронный ресурс] -- URL:~\url{https://docs.scipy.org/doc/scipy/reference/index.html} (\LiteratureAccessDate[3]).
|
||||||
|
Loading…
Reference in New Issue
Block a user