При решении некоторых практических задач или проведении исследований
может быть получена математическая модель, которая включает
непрерывную функцию \(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{Метод деления отрезка пополам}
Данный метод использует технику поиска решения, похожую на бинарный
\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| \geq1\).
решений уравнения \(Ans =\{x, x \in\textbf{R}\}, |Ans| \geq1\).
\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|.
где \(x\) --- точный корень. Параметр не может быть
меньше значения по умолчанию \verb|4*np.finfo(float).eps|.
\item\(maxiter\) --- int, необязательный
Если сходимость не достигается в итерациях \(maxiter\), возникает ошибка. Должен быть \(\geq0\).
Если сходимость не достигается в итерациях \(maxiter\),
возникает ошибка. Должен быть \(\geq0\).
\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|, если алгоритм не сошелся. В противном
случае статус сходимости записывается в возвращаемый объект
\newcommand{\cwdirectorPosition}[0]{Руководитель к.пед.н., доцент \mbox{кафедры ПМИ}}
\newcommand{\cwdirector}[0]{А.Н.~Соколова}
\newcommand{\cwdiscipline}[0]{Численные методы}
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.