Добавление информации о методах (№1) #2

Merged
stud128245 merged 42 commits from dev into master 2023-10-27 08:28:22 +00:00
Showing only changes of commit a70592186a - Show all commits

203
main.tex
View File

@ -1,5 +1,6 @@
\input{vars}
\input{config}
\sloppy
\NewDocumentCommand{\MFArgs}
{}{x^{(p)}_1,x^{(p)}_2,x^{(p)}_3,\dots,x^{(p)}_n}
@ -859,30 +860,206 @@ LU-разложение \cite[с. 259]{book:levitin}. Для получения
и т.д.
\subsubsection{Реализации метода в библиотеках numpy, scipy}
Реализаций данного метода в в библиотеках numpy, scipy не найдено.
\subsection{Сплайн-интерполяция}
Перед рассмотрением метода необходимо ввести понятие интерполяционного
сплайна. Это кусочно-заданная функция, каждый фрагмент которой является
непрерывной функцией, и на концах его значение совпадает с известными
значениями функции.
Иногда выбирают фрагменты сплайна такого вида, что непрерывными будут и их
производные, вплоть до нужного порядка (например, если в роли сплайнов
выбрать полиномы 3 степени, то они будут соответствовать условиями
непрерывности вместе с 1 и 2 производными). В зависимости от цели,
на сплайны могут быть наложены и иные ограничения. Также, для упрощения
вычислений, чаще всего все фрагменты сплайна --- функции из одного
класса, например, многочленов фиксированной степени.
\subsubsection{Описание метода}
Между парами значений \((x_{i-1},y_{i-1}),(x_i,y_i)\) строятся
функции-сплайны \(f_1(x),\dots,f_n(x)\), соответствущие условиям
Между парами значений \((x_{l(j-1)},y_{l(j-1)}),(x_{l(j)},y_{l(j)})\),
где \(l \in \textbf{N}, 0 \le l_j \le n\) строятся
фрагменты сплайна \(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 \\
& f_1(x),\; x_0 \le x < x_l \\
& f_2(x),\; x_{l} \le x < x_{2l} \\
& \ \dots \qquad \quad \dots \\
& f_n(x),\; x_{jl} \le x < x_n \\
\end{aligned}
\right.
\end{equation*}
Иногда выбирают сплайны такого вида, что непрерывными будут и их
производные, вплоть до нужного порядка (например, если в роли сплайнов
выбрать полиномы 3 степени, то они будут соответствовать условиями
непрерывности вместе с 1 и 2 производными). В зависимости от цели,
на сплайны могут быть наложены и иные ограничения.
При этом
\begin{equation*}
\begin{aligned}
& f_1(x_0) = y_0, f_1(x_l) = y_l \\
& f_2(x_l) = y_l, f_2(x_{2l}) = y_{2l} \\
& \ \dots \qquad \quad \dots \\
& f_n(x_{jl}) = y_{jl},f_n(x_n) = y_n \\
\end{aligned}
\end{equation*}
Для полиномов 3 степени чаще всего \(l=3\), и в таком случае по \(l\)
точкам на каждом фрагменте строиться полином (например, интерполяционный
полином Ньютона). В общем случае \(l\) определяется исходя из условий
и ограничений поставленной перед исследователем задачи.
\subsubsection{Реализации метода в библиотеках numpy, scipy}
В библиотеке scipy существует множество реализаций данного метода,
которые отличаются используемым видом сплайна.
которые отличаются используемым видом сплайна. В модуле
\textbf{scipy.interpolate} описаны следующие объекты
\cite{links:scipy_doc}:
\begin{enumerate}
\item класс \textbf{CubicSpline};
\item класс \textbf{PchipInterpolator};
\item класс \textbf{CubicHermiteSpline};
\item класс \textbf{Akima1DInterpolator};
\item класс \textbf{RectBivariateSpline}, используется для многомерной
\item интерполяции;
\item функция \textbf{interp1d}, которая может интерполировать таблично
заданную функцию разными методами, в т.ч. сплайн-интерполяцией.
Признана устаревшей и поэтому не будет рассмотрена;
\end{enumerate}
Классы \textbf{CubicSpline}, \textbf{PchipInterpolator},
\textbf{CubicHermiteSpline}, \textbf{Akima1DInterpolator}
используются для интерполяции функций одного аргумента, и их
применение одинаково: для создания сплайна необходимо создать
экземпляр класса, для получения значений сплайна необходимо
вызвать созданный экземпляр с необходимыми входными данными
(то есть вызвать метод \verb|__call__|).
Каждый из классов имеет разное количество параметров, которые
можно задать при его создании его экземпляра; метод получения
данных сплайна, в свою очередь, имеет одинаковое количество
параметров для всех классов, поэтому он имеет смысл описать его сейчас.
Метод \verb|__call__| вышеописанных классов имеет 3 параметра:
\begin{enumerate}
\item \(x\) --- array\_like
Точки, для которых будет вычислено значения сплайна.
\item \(nu\) --- int, необязательный
Порядок производной сплайна, который необходимо использовать при
вычислении значений. Должен быть неотрицательным. По умолчанию
--- 0 (то есть вычисляется исходный сплайн).
\item \(extrapolate\) --- {bool, \verb|"periodic"|,
\verb|None|}, необязательный
Если bool, определяет, следует ли экстраполировать точки,
которые выходят за пределы границ, установленные первым и
последним интервалами или возвращать \verb|NaN|. Если
\verb|"periodic"|, используется периодическая экстраполяция.
Если \verb|None| (по умолчанию), используйте метод \textbf{extrapolate}
этого класса.
\end{enumerate}
Данный метод возвращает массив значений сплайна, соответствующих значений
\(x\).
Конструктор экземпляра класса \textbf{CubicSpline} имеет следующие
параметры:
\begin{enumerate}
\item \(x\) --- array\_like, одномерный
Одномерный массив, содержащий значения независимой переменной.
Значения должны быть действительными, конечными числами и
находиться в строго возрастающем порядке.
\item \(y\) --- array\_like
Массив, содержащий значения зависимой переменной. Он может
иметь произвольное количество измерений, но длина должна
совпадать с длиной \(x\). Значения должны быть конечными.
\item \(axis\) int, необязательный
Ось, вдоль которой предполагается изменение y. Это означает,
что для \(x[i]\) соответствующие значения равны
\verb|np.take(y, i, axis=axis)|. По умолчанию --- 0.
\item \(bc\_type\) --- string / tuple размера = 2, необязательный
Тип граничного условия. Два дополнительных уравнения, заданные
граничными условиями, необходимы для определения всех
коэффициентов многочленов на каждом отрезке.
Если \(bc\_type\) --- строка, то указанное в параметре условие
будет применено к обоим концам сплайна. Доступные условия:
\begin{itemize}
\item \verb|"not-a-knot"| (по умолчанию): первый и второй
сегменты на конце кривой представляют собой один и тот
же полином. Это хороший вариант по умолчанию, когда нет
информации о граничных условиях.
\item \verb|"periodic"|: Предполагается, что интерполируемые
функции являются периодическими с периодом
\(x[-1] \ \mbox {---}\ x[0]\).
Первое и последнее значение y должны быть идентичными:
\(y[0] == y[-1]\). Это граничное условие приведет к
тому, что \(y'[0] == y'[-1]\) и \(y''[0] == y''[-1]\).
\item \verb|"clamped"|: Первая производная на концах кривых
равна нулю. Предполагая, что y одномерный,
\(bc\_type=((1, 0.0), (1, 0.0))\) --- то же самое
условие.
\item \verb|"natural"|: Вторая производная на концах кривой
равна нулю. Предполагая, что y одномерный,
\(bc\_type=((2, 0.0), (2, 0.0))\) --- то же самое
условие.
\end{itemize}
Если \(bc\_type\) представляет собой кортеж из двух элементов,
первое и второе значения будут применены в начале и конце
кривой соответственно. Значения кортежа могут быть одной из
ранее упомянутых строк (кроме \verb|"periodic"|) или кортежем
\((order, deriv\_values)\), позволяющим указывать произвольные
производные на концах кривой:
\begin{itemize}
\item \(order\): порядок производной --- 1 или 2.
\item \(deriv\_value\): array\_like
Содержит значения производной, форма должна быть такой
же, как \(y\), за исключением измерения \(axis\).
Например, если \(y\) --- одномерный, то
\(deriv\_values\) должен быть скаляром. Если \(y\)
является трехмерным, имеет форму \((n0, n1, n2)\) и
\(axis=1\), то \(deriv\_values\) должно быть
двухмерным и иметь форму \((n0, n2)\).
\end{itemize}
\item \(extrapolate\) --- {bool, \verb|"periodic"|,
\verb|None|}, необязательный
Если bool, определяет, следует ли экстраполировать точки,
которые выходят за пределы границ, установленные первым и
последним интервалами или возвращать \verb|NaN|. Если
\verb|"periodic"|, используется периодическая экстраполяция.
Если \verb|None| (по умолчанию), параметр имеет значение
\verb|"periodic"| если \(bc\_type\)=\verb|"periodic"| и
значение \verb|True| в противном случае.
\end{enumerate}
Конструктор экземпляра класса \textbf{PchipInterpolator} имеет следующие
параметры:
\begin{enumerate}
\item
\end{enumerate}
Конструктор экземпляра класса \textbf{CubicHermiteSpline} имеет следующие
параметры:
\begin{enumerate}
\item
\end{enumerate}
Конструктор экземпляра класса \textbf{Akima1DInterpolator} имеет
следующие параметры:
\begin{enumerate}
\item
\end{enumerate}
\subsection{Сглаживание. Метод наименьших квадратов}
\subsubsection{Описание метода}
\subsubsection{Реализации метода в библиотеках numpy, scipy}