From 4887f3ba2a1eb5f830dcdb9681395ff40112c823 Mon Sep 17 00:00:00 2001 From: AVAtarMod Date: Tue, 5 Sep 2023 22:31:04 +0300 Subject: [PATCH] [content] Add 2 methods, add spline interpolation --- main.tex | 102 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 92 insertions(+), 10 deletions(-) diff --git a/main.tex b/main.tex index 9308a7e..08a2ead 100644 --- a/main.tex +++ b/main.tex @@ -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}