[content] Add spline definition, library info
This commit is contained in:
parent
4887f3ba2a
commit
a70592186a
201
main.tex
201
main.tex
@ -1,5 +1,6 @@
|
|||||||
\input{vars}
|
\input{vars}
|
||||||
\input{config}
|
\input{config}
|
||||||
|
\sloppy
|
||||||
|
|
||||||
\NewDocumentCommand{\MFArgs}
|
\NewDocumentCommand{\MFArgs}
|
||||||
{}{x^{(p)}_1,x^{(p)}_2,x^{(p)}_3,\dots,x^{(p)}_n}
|
{}{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}
|
\subsubsection{Реализации метода в библиотеках numpy, scipy}
|
||||||
Реализаций данного метода в в библиотеках numpy, scipy не найдено.
|
Реализаций данного метода в в библиотеках numpy, scipy не найдено.
|
||||||
|
|
||||||
\subsection{Сплайн-интерполяция}
|
\subsection{Сплайн-интерполяция}
|
||||||
|
Перед рассмотрением метода необходимо ввести понятие интерполяционного
|
||||||
|
сплайна. Это кусочно-заданная функция, каждый фрагмент которой является
|
||||||
|
непрерывной функцией, и на концах его значение совпадает с известными
|
||||||
|
значениями функции.
|
||||||
|
|
||||||
|
Иногда выбирают фрагменты сплайна такого вида, что непрерывными будут и их
|
||||||
|
производные, вплоть до нужного порядка (например, если в роли сплайнов
|
||||||
|
выбрать полиномы 3 степени, то они будут соответствовать условиями
|
||||||
|
непрерывности вместе с 1 и 2 производными). В зависимости от цели,
|
||||||
|
на сплайны могут быть наложены и иные ограничения. Также, для упрощения
|
||||||
|
вычислений, чаще всего все фрагменты сплайна --- функции из одного
|
||||||
|
класса, например, многочленов фиксированной степени.
|
||||||
\subsubsection{Описание метода}
|
\subsubsection{Описание метода}
|
||||||
Между парами значений \((x_{i-1},y_{i-1}),(x_i,y_i)\) строятся
|
Между парами значений \((x_{l(j-1)},y_{l(j-1)}),(x_{l(j)},y_{l(j)})\),
|
||||||
функции-сплайны \(f_1(x),\dots,f_n(x)\), соответствущие условиям
|
где \(l \in \textbf{N}, 0 \le l_j \le n\) строятся
|
||||||
|
фрагменты сплайна \(f_1(x),\dots,f_n(x)\), соответствущие условиям
|
||||||
непрерывности. Комбинация таких функций образует исходную:
|
непрерывности. Комбинация таких функций образует исходную:
|
||||||
\begin{equation*}
|
\begin{equation*}
|
||||||
\widetilde{y}(x) = \left\{
|
\widetilde{y}(x) = \left\{
|
||||||
\begin{aligned}
|
\begin{aligned}
|
||||||
& f_1(x),\; x_0 \le x < x_1 \\
|
& f_1(x),\; x_0 \le x < x_l \\
|
||||||
& f_2(x),\; x_1 \le x < x_2 \\
|
& f_2(x),\; x_{l} \le x < x_{2l} \\
|
||||||
& \ \dots \qquad \quad \dots \\
|
& \ \dots \qquad \quad \dots \\
|
||||||
& f_n(x),\; x_{n-1} \le x < x_n \\
|
& f_n(x),\; x_{jl} \le x < x_n \\
|
||||||
\end{aligned}
|
\end{aligned}
|
||||||
\right.
|
\right.
|
||||||
\end{equation*}
|
\end{equation*}
|
||||||
|
При этом
|
||||||
Иногда выбирают сплайны такого вида, что непрерывными будут и их
|
\begin{equation*}
|
||||||
производные, вплоть до нужного порядка (например, если в роли сплайнов
|
\begin{aligned}
|
||||||
выбрать полиномы 3 степени, то они будут соответствовать условиями
|
& f_1(x_0) = y_0, f_1(x_l) = y_l \\
|
||||||
непрерывности вместе с 1 и 2 производными). В зависимости от цели,
|
& 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}
|
\subsubsection{Реализации метода в библиотеках numpy, scipy}
|
||||||
В библиотеке 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{Сглаживание. Метод наименьших квадратов}
|
\subsection{Сглаживание. Метод наименьших квадратов}
|
||||||
\subsubsection{Описание метода}
|
\subsubsection{Описание метода}
|
||||||
\subsubsection{Реализации метода в библиотеках numpy, scipy}
|
\subsubsection{Реализации метода в библиотеках numpy, scipy}
|
||||||
|
Loading…
Reference in New Issue
Block a user