[content] Add spline classes and least_squares method
This commit is contained in:
parent
a70592186a
commit
e885a649b2
389
main.tex
389
main.tex
@ -219,8 +219,8 @@
|
|||||||
и \(x0\) --- не скаляр, возвращаемое значение равно
|
и \(x0\) --- не скаляр, возвращаемое значение равно
|
||||||
\verb|(x, converged, zero_der)|, где:
|
\verb|(x, converged, zero_der)|, где:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item converged --- ndarray из значений bool. Указывает, какие элементы сошлись успешно.
|
\item converged --- \verb|ndarray| из значений bool. Указывает, какие элементы сошлись успешно.
|
||||||
\item zero\_der --- ndarray из значений bool. Указывает, какие элементы имеют нулевую производную.
|
\item zero\_der --- \verb|ndarray| из значений bool. Указывает, какие элементы имеют нулевую производную.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
\item \(disp\) --- bool, необязательный
|
\item \(disp\) --- bool, необязательный
|
||||||
|
|
||||||
@ -904,7 +904,8 @@ LU-разложение \cite[с. 259]{book:levitin}. Для получения
|
|||||||
и ограничений поставленной перед исследователем задачи.
|
и ограничений поставленной перед исследователем задачи.
|
||||||
\subsubsection{Реализации метода в библиотеках numpy, scipy}
|
\subsubsection{Реализации метода в библиотеках numpy, scipy}
|
||||||
В библиотеке scipy существует множество реализаций данного метода,
|
В библиотеке scipy существует множество реализаций данного метода,
|
||||||
которые отличаются используемым видом сплайна. В модуле
|
которые отличаются используемым видом сплайна а также поддерживаемой
|
||||||
|
размерностью функции. В модуле
|
||||||
\textbf{scipy.interpolate} описаны следующие объекты
|
\textbf{scipy.interpolate} описаны следующие объекты
|
||||||
\cite{links:scipy_doc}:
|
\cite{links:scipy_doc}:
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
@ -912,8 +913,9 @@ LU-разложение \cite[с. 259]{book:levitin}. Для получения
|
|||||||
\item класс \textbf{PchipInterpolator};
|
\item класс \textbf{PchipInterpolator};
|
||||||
\item класс \textbf{CubicHermiteSpline};
|
\item класс \textbf{CubicHermiteSpline};
|
||||||
\item класс \textbf{Akima1DInterpolator};
|
\item класс \textbf{Akima1DInterpolator};
|
||||||
\item класс \textbf{RectBivariateSpline}, используется для многомерной
|
\item классы \textbf{RectBivariateSpline},
|
||||||
\item интерполяции;
|
\textbf{LSQBivariateSpline}, используются для многомерной
|
||||||
|
интерполяции;
|
||||||
\item функция \textbf{interp1d}, которая может интерполировать таблично
|
\item функция \textbf{interp1d}, которая может интерполировать таблично
|
||||||
заданную функцию разными методами, в т.ч. сплайн-интерполяцией.
|
заданную функцию разными методами, в т.ч. сплайн-интерполяцией.
|
||||||
Признана устаревшей и поэтому не будет рассмотрена;
|
Признана устаревшей и поэтому не будет рассмотрена;
|
||||||
@ -964,13 +966,11 @@ LU-разложение \cite[с. 259]{book:levitin}. Для получения
|
|||||||
Одномерный массив, содержащий значения независимой переменной.
|
Одномерный массив, содержащий значения независимой переменной.
|
||||||
Значения должны быть действительными, конечными числами и
|
Значения должны быть действительными, конечными числами и
|
||||||
находиться в строго возрастающем порядке.
|
находиться в строго возрастающем порядке.
|
||||||
|
|
||||||
\item \(y\) --- array\_like
|
\item \(y\) --- array\_like
|
||||||
|
|
||||||
Массив, содержащий значения зависимой переменной. Он может
|
Массив, содержащий значения зависимой переменной. Он может
|
||||||
иметь произвольное количество измерений, но длина должна
|
иметь произвольное количество измерений, но длина должна
|
||||||
совпадать с длиной \(x\). Значения должны быть конечными.
|
совпадать с длиной \(x\). Значения должны быть конечными.
|
||||||
|
|
||||||
\item \(axis\) int, необязательный
|
\item \(axis\) int, необязательный
|
||||||
|
|
||||||
Ось, вдоль которой предполагается изменение y. Это означает,
|
Ось, вдоль которой предполагается изменение y. Это означает,
|
||||||
@ -989,19 +989,16 @@ LU-разложение \cite[с. 259]{book:levitin}. Для получения
|
|||||||
сегменты на конце кривой представляют собой один и тот
|
сегменты на конце кривой представляют собой один и тот
|
||||||
же полином. Это хороший вариант по умолчанию, когда нет
|
же полином. Это хороший вариант по умолчанию, когда нет
|
||||||
информации о граничных условиях.
|
информации о граничных условиях.
|
||||||
|
|
||||||
\item \verb|"periodic"|: Предполагается, что интерполируемые
|
\item \verb|"periodic"|: Предполагается, что интерполируемые
|
||||||
функции являются периодическими с периодом
|
функции являются периодическими с периодом
|
||||||
\(x[-1] \ \mbox {---}\ x[0]\).
|
\(x[-1] \ \mbox {---}\ x[0]\).
|
||||||
Первое и последнее значение y должны быть идентичными:
|
Первое и последнее значение y должны быть идентичными:
|
||||||
\(y[0] == y[-1]\). Это граничное условие приведет к
|
\(y[0] == y[-1]\). Это граничное условие приведет к
|
||||||
тому, что \(y'[0] == y'[-1]\) и \(y''[0] == y''[-1]\).
|
тому, что \(y'[0] == y'[-1]\) и \(y''[0] == y''[-1]\).
|
||||||
|
|
||||||
\item \verb|"clamped"|: Первая производная на концах кривых
|
\item \verb|"clamped"|: Первая производная на концах кривых
|
||||||
равна нулю. Предполагая, что y одномерный,
|
равна нулю. Предполагая, что y одномерный,
|
||||||
\(bc\_type=((1, 0.0), (1, 0.0))\) --- то же самое
|
\(bc\_type=((1, 0.0), (1, 0.0))\) --- то же самое
|
||||||
условие.
|
условие.
|
||||||
|
|
||||||
\item \verb|"natural"|: Вторая производная на концах кривой
|
\item \verb|"natural"|: Вторая производная на концах кривой
|
||||||
равна нулю. Предполагая, что y одномерный,
|
равна нулю. Предполагая, что y одномерный,
|
||||||
\(bc\_type=((2, 0.0), (2, 0.0))\) --- то же самое
|
\(bc\_type=((2, 0.0), (2, 0.0))\) --- то же самое
|
||||||
@ -1017,7 +1014,6 @@ LU-разложение \cite[с. 259]{book:levitin}. Для получения
|
|||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item \(order\): порядок производной --- 1 или 2.
|
\item \(order\): порядок производной --- 1 или 2.
|
||||||
|
|
||||||
\item \(deriv\_value\): array\_like
|
\item \(deriv\_value\): array\_like
|
||||||
|
|
||||||
Содержит значения производной, форма должна быть такой
|
Содержит значения производной, форма должна быть такой
|
||||||
@ -1028,7 +1024,6 @@ LU-разложение \cite[с. 259]{book:levitin}. Для получения
|
|||||||
\(axis=1\), то \(deriv\_values\) должно быть
|
\(axis=1\), то \(deriv\_values\) должно быть
|
||||||
двухмерным и иметь форму \((n0, n2)\).
|
двухмерным и иметь форму \((n0, n2)\).
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\item \(extrapolate\) --- {bool, \verb|"periodic"|,
|
\item \(extrapolate\) --- {bool, \verb|"periodic"|,
|
||||||
\verb|None|}, необязательный
|
\verb|None|}, необязательный
|
||||||
|
|
||||||
@ -1041,29 +1036,385 @@ LU-разложение \cite[с. 259]{book:levitin}. Для получения
|
|||||||
значение \verb|True| в противном случае.
|
значение \verb|True| в противном случае.
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
|
|
||||||
Конструктор экземпляра класса \textbf{PchipInterpolator} имеет следующие
|
Класс \textbf{PchipInterpolator} представляет из себя кубический
|
||||||
параметры:
|
эрмитов сплайн, поэтому является дочерним классом
|
||||||
|
\textbf{CubicHermiteSpline}. Конструктор экземпляра класса имеет
|
||||||
|
следующие параметры:
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item
|
\item \(x\) --- ndarray, вида (xlen,1), то есть одномерный
|
||||||
|
|
||||||
|
Одномерный массив монотонно возрастающих действительных
|
||||||
|
значений. Не может включать повторяющиеся значения (иначе
|
||||||
|
сплайн будет слишком конкретизированный)
|
||||||
|
\item \(y\) --- ndarray, вида (...,xlen,...)
|
||||||
|
|
||||||
|
N-мерный массив действительных значений. Длина \(y\) по оси
|
||||||
|
интерполяции должна быть равна длине \(x\). Используйте
|
||||||
|
параметр \(axis\), чтобы выбрать ось интерполяции.
|
||||||
|
\item \(axis\) int, необязательный
|
||||||
|
|
||||||
|
См. описание одноименного метода родительского класса.
|
||||||
|
\item \(extrapolate\) --- bool, необязательный
|
||||||
|
|
||||||
|
Определяет, следует ли экстраполировать точки,
|
||||||
|
которые выходят за пределы границ, установленные первым и
|
||||||
|
последним интервалами или возвращать \verb|NaN|.
|
||||||
|
По умолчанию \verb|None|, значение см. в пункте
|
||||||
|
\ref{list:CubicHermiteSpline-extrapolate} описания
|
||||||
|
конструктора родительского класса.
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
|
|
||||||
Конструктор экземпляра класса \textbf{CubicHermiteSpline} имеет следующие
|
Конструктор экземпляра класса \textbf{CubicHermiteSpline} имеет следующие
|
||||||
параметры:
|
параметры:
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item
|
\item \(x\) --- array\_like, вида (n,), то есть одномерный
|
||||||
|
|
||||||
|
Одномерный массив, содержащий значения независимой переменной. Значения должны быть действительными, конечными и находиться в строго возрастающем порядке.
|
||||||
|
\item \(y\) --- array\_like
|
||||||
|
|
||||||
|
Массив, содержащий значения зависимой переменной.
|
||||||
|
Он может иметь произвольное количество измерений, но длина по
|
||||||
|
оси \(axis\) должна совпадать с длиной \(x\).
|
||||||
|
Значения должны быть конечными.
|
||||||
|
\item \(dydx\) --- array\_like
|
||||||
|
|
||||||
|
Массив, содержащий производные зависимой переменной. Он может
|
||||||
|
иметь произвольное количество измерений, но длина по оси
|
||||||
|
\(axis\) должна совпадать с длиной \(x\). Значения должны быть
|
||||||
|
конечными.
|
||||||
|
\item \(axis\) --- int, необязательный
|
||||||
|
|
||||||
|
Ось, вдоль которой предполагается изменение y. Это означает, что для \(x[i]\) соответствующие значения равны
|
||||||
|
\verb|np.take(y, i, axis=axis)|.
|
||||||
|
По умолчанию --- 0.
|
||||||
|
\item \(extrapolate\) --- {bool, \verb|"periodic"|,
|
||||||
|
\verb|None|}, необязательный
|
||||||
|
|
||||||
|
Если bool, определяет, следует ли экстраполировать точки,
|
||||||
|
которые выходят за пределы границ, установленные первым и
|
||||||
|
последним интервалами или возвращать \verb|NaN|. Если
|
||||||
|
\verb|"periodic"|, используется периодическая экстраполяция.
|
||||||
|
Если \verb|None| (по умолчанию), используйте метод \textbf{extrapolate}
|
||||||
|
этого класса.
|
||||||
|
\label{list:CubicHermiteSpline-extrapolate}
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
|
|
||||||
Конструктор экземпляра класса \textbf{Akima1DInterpolator} имеет
|
Конструктор экземпляра класса \textbf{Akima1DInterpolator} имеет
|
||||||
следующие параметры:
|
следующие параметры:
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item
|
\item \(x\) --- ndarray, вида (n, 1)
|
||||||
|
|
||||||
|
Одномерный массив монотонно возрастающих действительных
|
||||||
|
значений.
|
||||||
|
\item \(y\) --- ndarray, вида (..., n, ...)
|
||||||
|
|
||||||
|
N-мерный массив реальных значений. Длина \(y\) по оси
|
||||||
|
интерполяции должна быть равна длине \(x\). Используйте
|
||||||
|
параметр \(axis\), чтобы выбрать ось интерполяции.
|
||||||
|
\item \(axis\) --- int, необязательный
|
||||||
|
|
||||||
|
Ось в массиве \(y\), соответствующая значениям координаты
|
||||||
|
\(x\). По умолчанию --- 0.
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
|
|
||||||
|
|
||||||
\subsection{Сглаживание. Метод наименьших квадратов}
|
\subsection{Сглаживание. Метод наименьших квадратов}
|
||||||
|
С помощью метода наименьших квадратов (далее, МНК) осуществляется
|
||||||
|
интерполяция функции с помощью сглаживания.
|
||||||
\subsubsection{Описание метода}
|
\subsubsection{Описание метода}
|
||||||
\subsubsection{Реализации метода в библиотеках numpy, scipy}
|
Задача метода --- минимизировать отклонение от исходных данных:
|
||||||
|
\begin{equation}
|
||||||
|
S = \sum_{i=1}^{n}(\widetilde{y}(x_i,a)-y_i)^2 \rightarrow \min
|
||||||
|
\label{formula:mnk}
|
||||||
|
\end{equation}
|
||||||
|
где \(a\) --- неизвестные параметры; \(n\) --- количество известных
|
||||||
|
пар значений (\(x,y\)); \(x_i,y_i\) --- значения \(i\) пары.
|
||||||
|
|
||||||
|
В качестве \(\widetilde{y}(x)\) необходимо выбрать функцию вида,
|
||||||
|
который лучше всего подходит под исходные данные. Этот процесс
|
||||||
|
называют выбором зависимости.
|
||||||
|
|
||||||
|
Примеры зависимостей (\(a,b,c,d\) --- неизвестные параметры):
|
||||||
|
\begin{alignat*}{2}
|
||||||
|
& ax + b & \ & \text{--- линейная}; \\
|
||||||
|
& ax^2 + bx + c & \ & \text{--- полиномиальная}; \\
|
||||||
|
& a \ln(x) + b & \ & \text{--- логарифмическая}; \\
|
||||||
|
& be^{ax} & \ & \text{--- экспоненциальная};
|
||||||
|
\end{alignat*}
|
||||||
|
|
||||||
|
В результате подстановки выбранной зависимости и известных данных
|
||||||
|
в (\ref{formula:mnk}) задача минимизации сводится к нахождению
|
||||||
|
экстремумов функции \(S(a)\), и выбору подходящего из них.
|
||||||
|
\subsubsection{Реализации метода в библиотеках numpy, scipy}
|
||||||
|
В модуле \textbf{scipy.optimize} библиотеки scipy существует
|
||||||
|
несколько реализаций данного метода, каждая из которых имеет свою
|
||||||
|
специализацию.
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \textbf{curve\_fit} --- функция, предназначенная для поиска
|
||||||
|
значения параметра \(a\) произвольной зависимости \(\widetilde
|
||||||
|
{y}(x_i,a)\), при котором выполняется условие
|
||||||
|
(\ref{formula:mnk}).
|
||||||
|
\item \textbf{least\_squares} --- функция, которая отличается от
|
||||||
|
\textbf{curve\_fit} возможностью задать собственный критерий
|
||||||
|
близости, область допустимых решений; позволяет задать больше
|
||||||
|
параметров точности.
|
||||||
|
\item \textbf{leastsq} --- функция, которая является устаревшей
|
||||||
|
версией \textbf{least\_squares}, поэтому ее подробного
|
||||||
|
рассмотрения не будет.
|
||||||
|
\item \textbf{lsq\_linear} --- функция, предназначенная для
|
||||||
|
минимизации выражения \(||ax-b||^2\), где \(a,b\) --- матрицы
|
||||||
|
параметров; функция \textbf{nnls} отличается от нее
|
||||||
|
ограничением на положительность искомых значений.
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
Функция \textbf{curve\_fit} имеет следующий набор параметров:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \(f\) --- callable
|
||||||
|
|
||||||
|
Модельная функция \(f(x,\dots)\). Она должен принимать независимую переменную в качестве первого аргумента, а параметры --- в качестве оставшихся.
|
||||||
|
\item \(xdata\) --- array\_like
|
||||||
|
|
||||||
|
Значения независимой переменной. Обычно это должна быть последовательность длины \(M\) или массив \((k,M)\)-образной формы для функций с \(k\) предикторами, и каждый элемент должен быть конвертируемым в \(float\), если это объект, подобный массиву.
|
||||||
|
\item \(ydata\) --- array\_like
|
||||||
|
|
||||||
|
Значения зависимой переменной, массив длиной M.
|
||||||
|
При найденных параметрах \(f\) совпадает с значением
|
||||||
|
\(f(xdata, \dots)\).
|
||||||
|
\item \(p0\) --- array\_like, необязательный
|
||||||
|
|
||||||
|
Начальное значение параметров \(f\) (длины N). Если
|
||||||
|
\verb|None| (значение по умолчанию), то все начальные
|
||||||
|
значения будут равны \verb|1| (если количество параметров
|
||||||
|
функции можно определить с помощью интроспекции, в противном
|
||||||
|
случае генерируется исключение \verb|ValueError|).
|
||||||
|
\item \(sigma\) --- \verb|None| / sequence длины M / массив MxM, необязательный
|
||||||
|
|
||||||
|
Задает неопределенность в \(ydata\). Если мы определим
|
||||||
|
остатки как \(r = ydata - f(xdata, *popt)\), то интерпретация
|
||||||
|
значения \(sigma\) будет зависеть от ее количества измерений:
|
||||||
|
\begin{itemize}
|
||||||
|
\item одномерная \(sigma\) должна содержать значения
|
||||||
|
стандартных отклонений ошибок в \(ydata\). Используется
|
||||||
|
при вычислении параметра
|
||||||
|
\verb|chisq = sum((r/sigma)**2)|;
|
||||||
|
\item двухмерная \(sigma\) должна содержать ковариационную
|
||||||
|
матрицу ошибок в \(ydata\). Используется
|
||||||
|
при вычислении параметра
|
||||||
|
\verb|chisq = r.T @ inv(sigma) @ r|.
|
||||||
|
\end{itemize}
|
||||||
|
\item \(absolute\_sigma\) --- bool, необязательный
|
||||||
|
|
||||||
|
Если значение \verb|True|, \(sigma\) используется в абсолютном смысле, и предполагаемая ковариация параметра \(pcov\) отражает эти абсолютные значения.
|
||||||
|
|
||||||
|
Если значение \verb|False| (по умолчанию), имеют значение
|
||||||
|
только относительные величины значений \(sigma\).
|
||||||
|
Ковариационная матрица возвращаемого параметра \(pcov\)
|
||||||
|
основана на масштабировании \(sigma\) постоянным
|
||||||
|
коэффициентом. Эта константа устанавливается требованием, чтобы
|
||||||
|
приведенный выше \(chisq\) для параметров
|
||||||
|
\(popt\) при использовании масштабированной \(sigma\) был равен
|
||||||
|
единице. Другими словами, \(sigma\) масштабируется так, чтобы
|
||||||
|
соответствовать выборочной дисперсии остатков после подгонки.
|
||||||
|
Математически,
|
||||||
|
\verb|pcov(absolute_sigma=False) = pcov(absolute_sigma=True)|
|
||||||
|
\verb| * chisq(popt)/(M-N)|.
|
||||||
|
\item \(check\_finite\) --- bool, необязательный
|
||||||
|
|
||||||
|
Если \verb|True|, то входные массивы проверяются на содержание
|
||||||
|
значений \verb|NaN| или \verb|Inf|, и если они содержат, то
|
||||||
|
генерируется исключение \verb|ValueError|.
|
||||||
|
|
||||||
|
Значение \verb|False| может привести к выдаче бессмысленных
|
||||||
|
результатов, если входные массивы содержат \verb|NaN|.
|
||||||
|
|
||||||
|
По умолчанию установлено значение \verb|True|, если
|
||||||
|
\(nan\_policy\) не указано явно, и значение \verb|False| в
|
||||||
|
противном случае.
|
||||||
|
\item \(bounds\) --- tuple из двух array\_like / \verb|Bounds|,
|
||||||
|
необязательный
|
||||||
|
|
||||||
|
Нижняя и верхняя границы параметров \(f\). По умолчанию нет ограничений. Есть два способа указать границы:
|
||||||
|
\begin{itemize}
|
||||||
|
\item через экземпляр класса \verb|Bounds|;
|
||||||
|
|
||||||
|
\item \verb|tuple| из двух array\_like, где каждый элемент
|
||||||
|
кортежа должен быть либо массивом с длиной, равной
|
||||||
|
количеству параметров, либо скаляром (в этом случае
|
||||||
|
граница считается одинаковой для всех параметров).
|
||||||
|
Используйте \verb|np.inf| с соответствующим знаком,
|
||||||
|
чтобы отключить ограничения для всех или некоторых
|
||||||
|
параметров.
|
||||||
|
\end{itemize}
|
||||||
|
\item \(method\) --- \{\verb|"lm"|, \verb|"trf"|, \verb|"dogbox"|\}, необязательный
|
||||||
|
|
||||||
|
Метод, используемый для вычисления параметров. См. описание
|
||||||
|
аналогичного параметра функции \textbf{least\_squares} для
|
||||||
|
получения более подробной информации. По умолчанию используется
|
||||||
|
\verb|"lm"| для задач без ограничений и \verb|"trf"|, если
|
||||||
|
указано значение \(bounds\).
|
||||||
|
\item \(jac\) --- callable / string / \verb|None|, необязательный
|
||||||
|
|
||||||
|
Функция с сигнатурой \(jac(x, ...)\), которая вычисляет матрицу
|
||||||
|
Якоби модельной функции относительно параметров как плотную
|
||||||
|
array\_like структуру. Он будет масштабироваться в
|
||||||
|
соответствии с предоставленным параметром \(sigma\). Если
|
||||||
|
\verb|False| (по умолчанию), якобиан будет оцениваться
|
||||||
|
численно. Строковые ключевые слова для методов \verb|"trf"| и
|
||||||
|
\verb|"dogbox"| можно использовать для выбора
|
||||||
|
конечно-разностной схемы, см. описание
|
||||||
|
\textbf{least\_squares}.
|
||||||
|
\item \(full\_output\) --- boolean, необязательный
|
||||||
|
|
||||||
|
Если значение = \verb|True|, эта функция возвращает дополнительную информацию: \(infodict\), \(mesg\) и \(ier\). По умолчанию
|
||||||
|
\verb|False|.
|
||||||
|
\item \(nan\_policy\) --- {\verb|"raise"|, \verb|"omit"|, \verb|None|}, необязательный
|
||||||
|
|
||||||
|
Определяет, как действовать, если входные данные содержат nan. Доступны следующие параметры (по умолчанию — \verb|None|):
|
||||||
|
\begin{itemize}
|
||||||
|
\item \verb|"raise"|: выдает ошибку
|
||||||
|
|
||||||
|
\item \verb|"omit"|: выполняет вычисления, игнорируя
|
||||||
|
значения \verb|NaN|.
|
||||||
|
|
||||||
|
\item \verb|None|: никакая специальная обработка \verb|NaN|
|
||||||
|
не выполняется (кроме того, что делается с помощью
|
||||||
|
\(check\_finite\)); поведение при наличии
|
||||||
|
\verb|NaN| зависит от реализации и может измениться.
|
||||||
|
|
||||||
|
\end{itemize}
|
||||||
|
Обратите внимание: если значение указано явно (не \verb|None|),
|
||||||
|
для \(check\_finite\) будет установлено значение \verb|False|.
|
||||||
|
\item \(**kwargs\)
|
||||||
|
|
||||||
|
Именованные параметры, которые передаются в \textbf{leastsq}
|
||||||
|
для \(method\)='lm' или \textbf{least\_squares} в противном
|
||||||
|
случае.
|
||||||
|
\end{enumerate}
|
||||||
|
Данная функция возвращает результат в виде
|
||||||
|
\((popt,pcov,infodict,mesg,ier)\), где
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \(popt\) --- вычисленные параметры
|
||||||
|
\(f\), при которых выполняется условие
|
||||||
|
\(f(xdata, *popt) - ydata \rightarrow \min\).
|
||||||
|
\item \(pcov\) --- 2-D array
|
||||||
|
|
||||||
|
Вычисленная приблизительная ковариация \(popt\).
|
||||||
|
\item \(infodict\) --- dict
|
||||||
|
|
||||||
|
По ключу \(nfev\)
|
||||||
|
хранится значение количества вызовов функции. Методы \("trf"\)
|
||||||
|
и \("dogbox"\) не учитывают вызовы функций для численной
|
||||||
|
аппроксимации якобиана, в отличие от метода \("lm"\).
|
||||||
|
По ключам \(fvec\), \(fjac\), \(ipvt\), \(qtf\) можно получить
|
||||||
|
дополнительную информацию о работе алгоритма.
|
||||||
|
\item \(mesg\) --- str
|
||||||
|
|
||||||
|
Cтроковое сообщение с информацией о решении.
|
||||||
|
\item \(ier\) --- int
|
||||||
|
|
||||||
|
Целочисленный флаг. Если он равен 1, 2, 3 или 4, решение
|
||||||
|
найдено. В противном случае решение не было найдено. \(mesg\)
|
||||||
|
предоставляет дополнительную информацию о решении.
|
||||||
|
\end{enumerate}
|
||||||
|
Разработчики отмечают, что входные данные \(xdata\), \(ydata\) и
|
||||||
|
выходные данные \(f\) должны иметь формат \(float64\), иначе данная
|
||||||
|
функция может вернуть неверные результаты \cite{links:scipy_doc}.
|
||||||
|
|
||||||
|
Функция \textbf{least\_squares} предназначена для решения следующей
|
||||||
|
задачи минимизации \(F(x)\), где
|
||||||
|
\verb|F(x) = 0.5 * sum(rho(f_i(x)**2), i = 0, ..., m - 1)|
|
||||||
|
при ограничениях \(lb \leq x \leq ub\). То есть, \(f\) должна принимать
|
||||||
|
на вход значение параметров \(a\) и возвращать значение \(f(x,a) - y\).
|
||||||
|
|
||||||
|
Данная функция имеет следующий набор параметров:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \(fun\) --- callable
|
||||||
|
Функция, которая вычисляет вектор остатков, имеет сигнатуру
|
||||||
|
\(fun(x, *args, **kwargs)\), т.е. минимизация продолжается
|
||||||
|
относительно ее первого аргумента. Аргумент \(x\),
|
||||||
|
передаваемый этой функции, представляет собой N-мерный массив размерности \((N,K)\) (никогда не скаляр, даже для \(N=1\)). \(fun\) должна вернуть одномерный массив типа array \((m,)\) или скаляр. Если \(x \in \textbf{C}\) или функция \(fun\) возвращает комплексные числа, ее необходимо обернуть действительнозначной функцией от действительнозначных аргументов.
|
||||||
|
\item \(x_0\) --- array\_like размерности (N,K) / float
|
||||||
|
|
||||||
|
Начальное значение \(x\). Если параметр имеет тип float, он
|
||||||
|
будет рассматриваться как одномерный массив с одним элементом.
|
||||||
|
\item \(jac\) --- \{\verb|"2-point"|, \verb|"3-point"|, \verb|"cs"|, callable\}, необязательный
|
||||||
|
|
||||||
|
Метод вычисления матрицы Якоби (матрица размером \(m \times n\), где элемент \((i, j)\) является частной производной f[i] по x[j]). Ключевые слова выбирают схему конечных разностей для числовой оценки. Схема \verb|"3-point"| более точная, но требует в два раза больше операций, чем \verb|"2-point"| (по умолчанию). Схема \verb|"cs"| использует комплексные шаги и, хотя потенциально является наиболее точной, она применима только тогда, когда \(fun\) правильно обрабатывает комплекснозначные входные данные и может быть аналитически продолжена на комплексную плоскость. \(method\) \verb|"lm"| всегда использует схему \verb|"2-point"|. Если параметр имеет тип \verb|callable|, он используется как \verb|jac(x, *args, **kwargs)| и должен возвращать хорошее приближение (или точное значение) для якобиана в виде array\_like (к выводу \(jac\) будет применен \verb|np.atleast_2d|), разреженной матрицы (предпочтительна \verb|csr_matrix| для производительности) или \verb|scipy.sparse.linalg.LinearOperator|.
|
||||||
|
\item \(bounds\) --- tuple из 2 array\_like / \verb|Bounds|, необязательный
|
||||||
|
|
||||||
|
Есть два способа указать границы:
|
||||||
|
\begin{itemize}
|
||||||
|
\item через экземпляр класса \verb|Bounds|;
|
||||||
|
|
||||||
|
\item \verb|tuple| из двух array\_like, где каждый элемент
|
||||||
|
кортежа должен быть либо массивом с размерностью
|
||||||
|
\(x0\), либо скаляром (в этом случае
|
||||||
|
граница считается одинаковой для всех параметров).
|
||||||
|
Используйте \verb|np.inf| с соответствующим знаком,
|
||||||
|
чтобы отключить ограничения для всех или некоторых
|
||||||
|
параметров.
|
||||||
|
\end{itemize}
|
||||||
|
\item \(method\) --- \{\verb|"lm"|, \verb|"trf"|, \verb|"dogbox"|\}, необязательный
|
||||||
|
|
||||||
|
Допустимое отклонение на завершение по норме градиента.
|
||||||
|
По умолчанию --- 1e-8. Точное состояние зависит от используемого
|
||||||
|
значения \(method\):
|
||||||
|
\begin{itemize}
|
||||||
|
\item Для \verb|"trf"|: \(norm(g\_scaled, ord=np.inf) < gtol\), где \(g\_scaled\) --- значение градиента, масштабированное для учета наличия границ.
|
||||||
|
\item Для \verb|"dogbox"|: \(norm(g_free, ord=np.inf) < gtol\), где \(g_free\) --- градиент по отношению к переменным, которые не находятся в оптимальном состоянии на границе.
|
||||||
|
\item Для \verb|"lm"|: максимальное абсолютное значение косинуса углов между столбцами якобиана и вектором невязки меньше \(gtol\), или вектор невязки равен нулю.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Если \verb|None| и \(method\) не \verb|"lm"|, завершение по этому условию отключено. Если \(method\) --- \verb|"lm"|, этот допуск должен быть выше, чем машинный эпсилон.
|
||||||
|
\item \(x\_scale\) --- array\_like / \verb|"jac"|
|
||||||
|
|
||||||
|
Характеристический масштаб каждой переменной.
|
||||||
|
Установка \(x\_scale\) эквивалентна переформулировке проблемы
|
||||||
|
в масштабированных переменных \(xs = x/x\_scale\).
|
||||||
|
Альтернативная точка зрения состоит в том, что размер
|
||||||
|
доверительной области по j-му измерению пропорционален
|
||||||
|
\(x\_scale[j]\). Улучшения сходимости можно достичь, установив
|
||||||
|
\(x\_scale\) таким образом, чтобы шаг заданного размера по
|
||||||
|
любой из масштабируемых переменных имел аналогичный эффект на
|
||||||
|
функцию стоимости. Если установлено значение \verb|"jac"|,
|
||||||
|
масштаб итеративно обновляется с использованием обратных норм
|
||||||
|
столбцов матрицы Якоби.
|
||||||
|
\item \(loss\) --- str / callable, необязательный
|
||||||
|
|
||||||
|
Определяет функцию потерь. Допускаются следующие значения ключевых слов:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \verb|"linear"| (по умолчанию) : \verb|rho(z) = z|. Дает стандартную задачу наименьших квадратов.
|
||||||
|
\item \verb|"soft_l1"| : \verb|rho(z) = 2 * ((1 + z)**0.5 - 1)|. Гладкая аппроксимация потерь l1 (абсолютное значение). Обычно хороший выбор для надежного метода наименьших квадратов.
|
||||||
|
\item \verb|"huber"| : \verb|rho(z) = z if z <= 1 else 2*z**0.5 - 1|. Работает аналогично \verb|"soft_l1"|.
|
||||||
|
\item \verb|"cauchy"| : \verb|rho(z) = ln(1 + z)|. Сильно ослабляет влияние выбросов, но может вызвать трудности в процессе оптимизации.
|
||||||
|
\item \verb|"arctan"| : \verb|rho(z) = arctan(z)|. Ограничивает максимальный убыток по одному остатку, имеет свойства, аналогичные \verb|"cauchy"|.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Если параметр имеет тип \verb|callable|, он должен принимать
|
||||||
|
одномерный \verb|ndarray| \verb|z=f**2| и возвращать
|
||||||
|
array\_like с формой \((3, m)\), где строка 0 содержит значения функции, строка 1 содержит первые производные, а строка 2 содержит вторые производные. \(method\) \verb|lm| поддерживает только \verb|"linear"| \(loss\).
|
||||||
|
|
||||||
|
\item \(f\_scale\) --- float, необязательный
|
||||||
|
|
||||||
|
Значение границы между ошибками данных и выбросами в данных,
|
||||||
|
по умолчанию - 1,0. Значение функции потерь оценивается
|
||||||
|
следующим образом: \verb|rho_(f**2) = C**2 * rho(f**2 / C**2)|,
|
||||||
|
где C --- это \(f\_scale\), а \(rho\) определяется параметром
|
||||||
|
\(loss\). Этот параметр не имеет никакого эффекта при
|
||||||
|
\(loss\)=\verb|"linear"|, но для других значений потерь он имеет решающее
|
||||||
|
значение.
|
||||||
|
\item \(max\_nfev\) --- \verb|None| / int, необязательный
|
||||||
|
|
||||||
|
Максимальное количество выполнений функции перед завершением работы. Если \verb|None| (по умолчанию), значение выбирается автоматически:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Для \verb|"trf"| и \verb|"dogbox"|: \(100 \cdot n\).
|
||||||
|
|
||||||
|
\item Для \verb|"lm"|: \(100 \cdot n\), если \(jac\) является вызываемым, и \(100 \cdot n \cdot (n + 1)\) в противном случае (поскольку \verb|"lm"| учитывает вызовы функций в оценке Якобиана).
|
||||||
|
\end{itemize}
|
||||||
|
\item \(diff\_step\) --- \verb|None| / array\_like, необязательный
|
||||||
|
|
||||||
|
|
||||||
|
\item
|
||||||
|
\end{enumerate}
|
||||||
\section{Численное интегрирование}
|
\section{Численное интегрирование}
|
||||||
\subsection{Метод прямоугольников}
|
\subsection{Метод прямоугольников}
|
||||||
\subsubsection{Описание метода}
|
\subsubsection{Описание метода}
|
||||||
|
Loading…
Reference in New Issue
Block a user