Исправление замечаний (№1) #1
@ -42,3 +42,6 @@ Python \cite{links:python} --- один из самых популярных н
|
||||
|
||||
В данной работе используются язык Python, библиотеки numpy и
|
||||
scipy версий \(3.11\), \(1.25\) и \(1.11\) соответственно.
|
||||
|
||||
Курсовой проект включает введение, две главы,
|
||||
заключение, библиографический список и приложение.
|
||||
|
70
main.tex
70
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{Метод Ньютона (метод касательных)}
|
||||
|
@ -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
|
||||
|
4
vars.tex
4
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]{Численные методы}
|
||||
|
Loading…
Reference in New Issue
Block a user