[content] Add spline classes and least_squares method

This commit is contained in:
AVAtarMod 2023-10-03 07:00:37 +03:00
parent a70592186a
commit e885a649b2
Signed by: stud128245
GPG Key ID: 43198AE4D0774328

389
main.tex
View File

@ -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
роковое сообщение с информацией о решении.
\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{Описание метода}