Compare commits

...

2 Commits

Author SHA1 Message Date
AVAtarMod
4887f3ba2a
[content] Add 2 methods, add spline interpolation 2023-09-05 22:31:04 +03:00
AVAtarMod
9315741d73
config: Add math environment 2023-09-05 21:01:06 +03:00
2 changed files with 97 additions and 10 deletions

View File

@ -182,3 +182,8 @@
% ОФОРМЛЕНИЕ ТЕКСТА
\renewcommand{\baselinestretch}{1.5}
\MakeOuterQuote{"}
\newenvironment{nospaceflalign*}
{\setlength{\abovedisplayskip}{0pt}\setlength{\belowdisplayskip}{0pt}%
\csname flalign*\endcsname}
{\csname endflalign*\endcsname\ignorespacesafterend}

102
main.tex
View File

@ -729,13 +729,14 @@ LU-разложение \cite[с. 259]{book:levitin}. Для получения
\subsection{Метод Ньютона решения систем нелинейных уравнений}
\subsubsection{Описание метода}
На каждой итерации \(p, p = 1,2,3,\dots,k\) вычисляются значения
\(\Delta x^{(p)}_1, \Delta x^{(p)}_2, \Delta x^{(p)}_3, \dots,
\(\Delta x^{(p)}_1,\) \( \Delta x^{(p)}_2, \Delta x^{(p)}_3, \dots,
\Delta x^{(p)}_n \).
Для этого исходная система уравнений раскладывается в ряд Тейлора по
\(\Delta x^{(p)}_1, \Delta x^{(p)}_2, \Delta x^{(p)}_3, \dots,
\Delta x^{(p)}_n \). Сохранив линейные по данным значениям части, получим
СЛУ:
\begin{equation}
\begin{aligned}
& \splitdfrac{\frac{\partial F_1(\MFArgs)}{\partial x_1} \Delta x^{(p)}_1 +
@ -745,12 +746,16 @@ LU-разложение \cite[с. 259]{book:levitin}. Для получения
\frac{\partial F_2(\MFArgs)}{\partial x_2} \Delta x^{(p)}_2 + \dots +}
{\frac{\partial F_2(\MFArgs)}{\partial x_n} \Delta x^{(p)}_n = -F_2(\MFArgs)} \\
& \dots\dots\dots\dots\dots\dots\dots\dots\dots\dots\dots\dots\dots\dots\dots \\
& \splitdfrac{\frac{\partial F_n(\MFArgs)}{\partial x_1} \Delta x^{(p)}_1 +
\frac{\partial F_n(\MFArgs)}{\partial x_2} \Delta x^{(p)}_2 + \dots +}
{\frac{\partial F_n(\MFArgs)}{\partial x_n} \Delta x^{(p)}_n = -F_n(\MFArgs)} \\
\end{aligned}
\label{formula:SnLE-Newton-sys}
\end{equation}
\begin{equation*}
\begin{aligned}
& \splitdfrac{\frac{\partial F_n(\MFArgs)}{\partial x_1} \Delta x^{(p)}_1 +
\frac{\partial F_n(\MFArgs)}{\partial x_2} \Delta x^{(p)}_2 + \dots +}
{\frac{\partial F_n(\MFArgs)}{\partial x_n} \Delta x^{(p)}_n = -F_n(\MFArgs)} \\
\end{aligned}
\end{equation*}
Данную систему можно решить любым наиболее подходящим с учетом доступных
ресурсов методом.
@ -784,23 +789,100 @@ LU-разложение \cite[с. 259]{book:levitin}. Для получения
с помощью подходящего метода.
Для определения коэффициентов существует два основных подхода ---
интерполяция (когда \(y_i = \widetilde{x_i}\)), и сглаживание, когда
интерполяция (когда \(\widetilde{y}(x_i) = y_i\)), и сглаживание, когда
требуется лишь минимизировать отклонение от известных значений.
Первые три метода решают поставленную задачу с помощью интерполяции,
последний --- с помощью сглаживания.
\subsection{Интерполяционный полином в форме Лагранжа}
\subsection{Интерполяционный полином Лагранжа}
\subsubsection{Описание метода}
\subsubsection{Реализации метода в библиотеках numpy, scipy}
Для известных пар значений \((x_i,y_i), x_i \in [a,b]; i = 1,2,3,\dots,n\)
строится полином \(P(x)\), удовлетворяющий условию \(P(x_i) = y_i\).
\subsection{Интерполяционный полином в форме Ньютона}
Полином \(P(x)\) определяется следующей формулой:
\begin{equation*}
P(x) = L_{n-1}(x) = \sum_{i=1}^{n}y_i\cdot l_i(x)
\end{equation*}
\(l_i(x)\) --- фундаментальные полиномы Лагранжа, которые удовлетворяют равенству (\ref{formula:ip-lagr-eq1}), и имеют следующий вид:
\begin{equation*}
l_i(x) = \frac{(x-x_1)\dots (x-x_{i-1})(x-x_{i+1})\dots(x-x_n)}{(x_i-x_1)\dots(x_i-x_{i-1})(x_i-x_{i+1})\dots(x_i-x_n)}
\end{equation*}
\begin{equation}
l_k(x_i) = \left\{
\begin{aligned}
& 1, i = k \\
& 0, i \ne k. \\
\end{aligned}
\right.
\label{formula:ip-lagr-eq1}
\end{equation}
Из формулы полинома видно, что его степень не превышает \(n-1\).
Данное свойство сохранится и для следующего метода.
\subsubsection{Реализации метода в библиотеках numpy, scipy}
Данный метод реализован в библиотеке scipy в виде функции
\textbf{lagrange} в модуле \textbf{scipy.interpolate}.
Одной из ее особенностей является низкая устойчивость --- авторы не
рекомендуют запускать алгоритм на более чем 20 парах \((x,y)\) входных
значений \cite{links:scipy_doc}.
Данная функция имеет следующие параметры:
\begin{enumerate}
\item \(x\) --- array\_like
\(x\) представляет координаты \(x\) набора точек данных.
\item \(w\) --- array\_like
\(w\) представляет координаты \(y\) набора точек данных,
т. е. \(f(x)\).
\end{enumerate}
Данная функция возвращает полином (тип --- \verb|poly1d| из
библиотеки \textbf{numpy} \cite{links:numpy_doc}).
\subsection{Интерполяционный полином Ньютона}
\subsubsection{Описание метода}
Интерполяционный полином Ньютона имеет вид
\begin{align*}
N_{n-1}(x) = \Delta^{0}(x_{1}) + \Delta^{1}(x_{1},x_{2})(x-x_{1}) + \Delta^{2}(x_{1},x_{2},x_{3})(x-x_{1})(x-x_{2}) + \\
+ \dots + \Delta^{n-1}(x_{1},x_{2},\dots,x_{n-1})(x-x_{1})(x-x_{2})\dots(x-x_{n-1})
\end{align*}
где \(\Delta^{0}(x_{1})\dots\Delta^{n-1}(x_{1},x_{2},\dots,x_{n-1})\) ---
конечные разницы порядка \(0,\dots, n-1\), которые вычисляются следующим
образом:
\begin{nospaceflalign*}
& \Delta^{0}(x_i) = y_i & \\
& \Delta^{1}(x_i,x_k) = \frac{\Delta^{0}(x_i) - \Delta^{0}(x_k)}{x_i-x_k} & \\
& \Delta^{2}(x_i,x_j,x_k) = \frac{\Delta^{1}(x_i,x_j) - \Delta^{1}(x_j,x_k)}{x_i-x_k}
\end{nospaceflalign*}
и т.д.
\subsubsection{Реализации метода в библиотеках numpy, scipy}
Реализаций данного метода в в библиотеках numpy, scipy не найдено.
\subsection{Сплайн-интерполяция}
\subsubsection{Описание метода}
\subsubsection{Реализации метода в библиотеках numpy, scipy}
Между парами значений \((x_{i-1},y_{i-1}),(x_i,y_i)\) строятся
функции-сплайны \(f_1(x),\dots,f_n(x)\), соответствущие условиям
непрерывности. Комбинация таких функций образует исходную:
\begin{equation*}
\widetilde{y}(x) = \left\{
\begin{aligned}
& f_1(x),\; x_0 \le x < x_1 \\
& f_2(x),\; x_1 \le x < x_2 \\
& \ \dots \qquad \quad \dots \\
& f_n(x),\; x_{n-1} \le x < x_n \\
\end{aligned}
\right.
\end{equation*}
Иногда выбирают сплайны такого вида, что непрерывными будут и их
производные, вплоть до нужного порядка (например, если в роли сплайнов
выбрать полиномы 3 степени, то они будут соответствовать условиями
непрерывности вместе с 1 и 2 производными). В зависимости от цели,
на сплайны могут быть наложены и иные ограничения.
\subsubsection{Реализации метода в библиотеках numpy, scipy}
В библиотеке scipy существует множество реализаций данного метода,
которые отличаются используемым видом сплайна.
\subsection{Сглаживание. Метод наименьших квадратов}
\subsubsection{Описание метода}
\subsubsection{Реализации метода в библиотеках numpy, scipy}