From 3b0be1e278e904a3cf88ca778839012b45511552 Mon Sep 17 00:00:00 2001 From: AVAtarMod Date: Tue, 15 Aug 2023 12:12:30 +0300 Subject: [PATCH 1/3] Fix titlepage text; Add titlepage dynamic fields --- titlepage.tex | 14 +++++++------- vars.tex | 4 ++++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/titlepage.tex b/titlepage.tex index 59a988a..9d0f511 100644 --- a/titlepage.tex +++ b/titlepage.tex @@ -31,17 +31,17 @@ }} \vspace{2em} - Курсовой проект по дисциплине <<Численные методы>> + Курсовой проект по дисциплине <<\cwdiscipline>> \end{center} \vfill \begin{table}[ht] \centering - \begin{tabularx}{\textwidth}{>{\raggedright}p{.5\textwidth}X} - Выполнил студент группы \mbox{ПМИб-3301-52-00} \vspace{1mm} & { {\rule{3cm}{0.1mm}}~/\cwauthor}/ \\ - К.п.н. \mbox{кафедры} ПМИ \vspace{1cm} & {{\rule{3cm}{0.1mm}}~/А.Н.~Соколова/} \\ - Работа защищена с оценкой & {\rule{3cm}{0.1mm}} \hfill {\rule{1cm}{0.1mm}}.{\rule{1cm}{0.1mm}} \the\year\ г. \vspace{1cm} \\ - Члены комиссии \vspace{2mm} & {\rule{3cm}{0.1mm}} \hfill /{\rule{3.5cm}{0.1mm}}/ \\ - \null & {\rule{3cm}{0.1mm}} \hfill /{\rule{3.5cm}{0.1mm}}/ \\ + \begin{tabularx}{\textwidth}{>{\raggedright\arraybackslash}X>{\raggedright\arraybackslash}X} + Выполнил студент группы \mbox{\cwauthorPosition} \vspace{1mm} & {{\rule{3cm}{0.1mm}}~/\cwauthor}/ \\ + \cwdirectorPosition \vspace{10mm} & {{\rule{3cm}{0.1mm}}~/\cwdirector/} \\ + Работа защищена с оценкой & {\rule{3cm}{0.1mm}} \hspace{3mm} {\rule{1cm}{0.1mm}}.{\rule{1cm}{0.1mm}} \the\year\ г. \vspace{1cm} \\ + Члены комиссии \vspace{2mm} & {\rule{3cm}{0.1mm}} \hspace{3mm} /{\rule{3.5cm}{0.1mm}}/ \\ + \null & {\rule{3cm}{0.1mm}} \hspace{3mm} /{\rule{3.5cm}{0.1mm}}/ \\ \end{tabularx} \end{table} \vfill diff --git a/vars.tex b/vars.tex index 3d9dd4e..54642bd 100644 --- a/vars.tex +++ b/vars.tex @@ -1,2 +1,6 @@ \newcommand{\cwtitle}[0]{Исследование возможностей библиотек numpy и scipy для реализации численных методов} +\newcommand{\cwauthorPosition}[0]{ПМИб-3301-52-00} \newcommand{\cwauthor}[0]{Г.Е.~Ступников} +\newcommand{\cwdirectorPosition}[0]{Руководитель к.пед.н., доцент \mbox{кафедры ПМИ}} +\newcommand{\cwdirector}[0]{А.Н.~Соколова} +\newcommand{\cwdiscipline}[0]{Численные методы} From d6d49c20c82a34b24f95e900a9085df03d04e513 Mon Sep 17 00:00:00 2001 From: AVAtarMod Date: Tue, 15 Aug 2023 12:13:17 +0300 Subject: [PATCH 2/3] Add structure info to intro --- intro.tex | 3 +++ 1 file changed, 3 insertions(+) diff --git a/intro.tex b/intro.tex index 6665971..dd87dd7 100644 --- a/intro.tex +++ b/intro.tex @@ -42,3 +42,6 @@ Python \cite{links:python} --- один из самых популярных н В данной работе используются язык Python, библиотеки numpy и scipy версий \(3.11\), \(1.25\) и \(1.11\) соответственно. + +Курсовой проект включает введение, две главы, +заключение, библиографический список и приложение. From 5ab4a6e67c2948b3f7b0742938b3c7ebb457cdc6 Mon Sep 17 00:00:00 2001 From: AVAtarMod Date: Tue, 15 Aug 2023 12:20:32 +0300 Subject: [PATCH 3/3] Fix punctuation; style. Replace math symbols --- main.tex | 70 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/main.tex b/main.tex index 5285968..ee5ad5e 100644 --- a/main.tex +++ b/main.tex @@ -27,20 +27,20 @@ \section{Численное решение нелинейных уравнений} При решении некоторых практических задач или проведении исследований может быть получена математическая модель, которая включает -непрерывную функцию \(F(x), x \in \Re\), и необходимо определить корни уравнения +непрерывную функцию \(F(x), x \in \textbf{R}\), и необходимо определить корни уравнения \(F(x) = 0\). Если данное уравнение не имеет вид \(ax + b = 0\), где \(a,b\) -- константы, то оно будет нелинейным. Для решения нелинейных уравнений существует несколько методов, в данной работе будут рассмотрены итерационные. Каждый из итерационных методов, перечисленных ниже, соответствует -следующему алгоритму из двух этапов \cite[с. 15]{book:nm-examples}: +следующему алгоритму из двух этапов \cite[с. 15]{book:nm-examples}. \begin{enumerate} - \item отыскание приближенного значения корня или содержащего - его отрезка; - \item уточнения значения до некоторой степени точности. + \item Отыскание приближенного значения корня или содержащего + его отрезка. + \item Уточнения значения до некоторой степени точности. \end{enumerate} -Начальное приближение определяется исходя из физических соображений +Начальное приближение определяется, исходя из физических соображений решений похожих задач или графических методов. Если ни один из этих способов не доступен или не позволяет получить начальное приближение, удовлетворяющее требованиям, то применяют следующий алгоритм @@ -54,7 +54,10 @@ отрезка. \end{enumerate} -Так как выполняется условие \(F(a) \cdot F(b) < 0\) и \(F(x)\) непрерывна, то обязательно найдется такое \(x_k \in (a,b)\), что \(F(x_k) = 0\) либо \(|F(x_k)| < \epsilon\), где \(\epsilon\) --- погрешность искомого решения. +Так как выполняется условие \(F(a) \cdot F(b) < 0\) и \(F(x)\) +непрерывна, то обязательно найдется такое \(x_k \in (a,b)\), что +\(F(x_k) = 0\) либо \(|F(x_k)| < \varepsilon\), где \(\varepsilon\) +--- погрешность искомого решения. \subsection{Метод деления отрезка пополам} Данный метод использует технику поиска решения, похожую на бинарный поиск. @@ -65,11 +68,13 @@ применяем следующий алгоритм: \begin{enumerate} \item Рассмотрим отрезки \([a;x_i], [x_i;b]\), \(i = 0 \dots k\) - --- номер итерации. На первой итерации \(i = 0\). \label{list:hls_begin} + --- номер итерации. На первой итерации \(i = 0\). + \label{list:hls_begin} \item Из рассмотренных отрезков берем те, что удовлетворяют условию - \(F(a) \cdot F(b) < 0\), где \(a,b\) --- границы отрезка. \label{list:hls_test} + \(F(a) \cdot F(b) < 0\), где \(a,b\) --- границы отрезка. + \label{list:hls_test} \item Для каждого из взятых в п.\ref{list:hls_test} отрезков - вычисляем их длину \(l\). Если \(l < \epsilon\), + вычисляем их длину \(l\). Если \(l < \varepsilon\), тогда дальнейшее выполнение данного алгоритма для данного отрезка прекращается. За решение уравнения принимается число \((a+b)/2\), округленное с учетом заданной погрешности. @@ -79,25 +84,28 @@ устанавливаем значения \(a,b,x_{i+1}\). Для левого отрезка эти значения будут равны \(a = a,b = x_i,x_{i+1} = (a+x_i)/2\), для правого --- - \(a = x_i,b = b,x_{i+1} = (b+x_i)/2\). \label{list:hls_prepare} - \item Для каждого из взятых отрезков переходим к п.\ref{list:hls_begin}, - с увеличением номера итерации на \(1\) и установленными - относительно взятого отрезка значениями из п.\ref{list:hls_prepare}. + \(a = x_i,b = b,x_{i+1} = (b+x_i)/2\). + \label{list:hls_prepare} + \item Для каждого из взятых отрезков переходим к + п.\ref{list:hls_begin}, с увеличением номера итерации + на \(1\) и установленными относительно взятого + отрезка значениями из п.\ref{list:hls_prepare}. \end{enumerate} После применение метода на заданных входных данных получим множество -решений уравнения \(Ans = \{x, x \in \Re\}, |Ans| \geq 1\). +решений уравнения \(Ans = \{x, x \in \textbf{R}\}, |Ans| \geq 1\). \subsubsection{Реализации метода в библиотеках numpy, scipy} Библиотека scipy содержит функцию \textbf{bisect} из модуля -\textbf{scipy.optimize}\cite{links:scipy_doc}, которая реализует +\textbf{scipy.optimize} \cite{links:scipy_doc}, которая реализует данный метод. Функция имеет следующие параметры (задаются в порядке перечисления): \begin{enumerate} \item \(f\) --- function - Функция Python, возвращающая число. \(f\) должна быть непрерывной, а \(f(a)\) и \(f(b)\) должны иметь противоположные знаки. - + Функция Python, возвращающая число.\(f\) должна быть + непрерывной, а \(f(a)\) и \(f(b)\) должны иметь + противоположные знаки. \item \(a\) --- scalar Первый конец интервала \([a,b]\). @@ -106,22 +114,36 @@ Второй конец интервала \([a,b]\). \item \(xtol\) --- number, необязательный - Вычисленный корень \(x0\) будет удовлетворять \verb|np.allclose(x, x0,| \verb|atol=xtol,| \verb|rtol=rtol)|, где \(x\) --- точный корень. Параметр должен быть положительным. + Вычисленный корень \(x0\) будет удовлетворять + \verb|np.allclose(x, x0,| \verb|atol=xtol,| + \verb|rtol=rtol)|, где \(x\) --- точный корень. + Параметр должен быть положительным. \item \(rtol\) --- number, необязательный - Вычисленный корень \(x0\) будет удовлетворять \verb|np.allclose(x, x0,| \verb|atol=xtol, rtol=rtol)|, где \(x\) --- точный корень. Параметр не может быть меньше значения по умолчанию \verb|4*np.finfo(float).eps|. + Вычисленный корень \(x0\) будет удовлетворять + \verb|np.allclose(x, x0,| \verb|atol=xtol, rtol=rtol)|, + где \(x\) --- точный корень. Параметр не может быть + меньше значения по умолчанию \verb|4*np.finfo(float).eps|. \item \(maxiter\) --- int, необязательный - Если сходимость не достигается в итерациях \(maxiter\), возникает ошибка. Должен быть \(\geq 0\). + Если сходимость не достигается в итерациях \(maxiter\), + возникает ошибка. Должен быть \(\geq 0\). \item \(args\) --- tuple, необязательный - Содержит дополнительные аргументы для функции \(f\). \(f\) вызывается с помощью \verb|apply(f, (x)+args)|. + Содержит дополнительные аргументы для функции \(f\). + \(f\) вызывается с помощью \verb|apply(f, (x)+args)|. \item \(full\_output\) --- bool, необязательный - Если \(full\_output\) имеет значение \verb|False|, возвращается корень. Если \(full\_output\) имеет значение \verb|True|, возвращаемое значение равно \verb|(x, r)|, где \(x\) --- это корень, а \(r\) --- объект \verb|RootResults|. + Если \(full\_output\) имеет значение \verb|False|, + возвращается корень. Если \(full\_output\) имеет значение + \verb|True|, возвращаемое значение равно \verb|(x, r)|, где + \(x\) --- это корень, а \(r\) --- объект \verb|RootResults|. \item \(disp\) --- bool, необязательный - Если \verb|True|, будет сгенерировано исключение \verb|RuntimeError|, если алгоритм не сошелся. В противном случае статус сходимости записывается в возвращаемый объект \verb|RootResults|. + Если \verb|True|, будет сгенерировано исключение + \verb|RuntimeError|, если алгоритм не сошелся. В противном + случае статус сходимости записывается в возвращаемый объект + \verb|RootResults|. \end{enumerate} \subsection{Метод Ньютона (метод касательных)}