Добавление информации о методах (№1) #2
203
main.tex
203
main.tex
@ -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}
|
||||
|
Loading…
Reference in New Issue
Block a user