kopia lustrzana https://github.com/Dsplib/libdspl-2.0
added ellip functions docs
rodzic
4306ab98ee
commit
d3471a09c8
|
@ -0,0 +1,467 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*! ****************************************************************************
|
||||||
|
\ingroup SPEC_MATH_ELLIP_GROUP
|
||||||
|
\fn int ellip_acd(double* w, int n, double k, double* u)
|
||||||
|
\brief Обратная эллиптическая функция Якоби
|
||||||
|
\f$ u = \textrm{cd}^{-1}(w, k)\f$ вещественного аргумента
|
||||||
|
|
||||||
|
Функция рассчитывает занчения значения обратной эллиптической функции
|
||||||
|
\f$ u = \textrm{cd}^{-1}(w, k)\f$ для вещественного вектора `w`.<BR>
|
||||||
|
|
||||||
|
Для расчета используется итерационный алгоритм на основе преобразования
|
||||||
|
Ландена.<BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[in] w Указатель на массив вектора переменной \f$ w \f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
\param[in] n Размер вектора `w`. <BR><BR>
|
||||||
|
|
||||||
|
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||||
|
Эллиптический модуль -- вещественный параметр,
|
||||||
|
принимающий значения от 0 до 1. <BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[out] u Указатель на вектор значений обратной эллиптической
|
||||||
|
функции \f$ u = \textrm{cd}^{-1}(w, k)\f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\return
|
||||||
|
`RES_OK` Расчет произведен успешно.<BR>
|
||||||
|
В противном случае
|
||||||
|
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||||
|
|
||||||
|
\author
|
||||||
|
Бахурин Сергей
|
||||||
|
www.dsplib.org
|
||||||
|
|
||||||
|
***************************************************************************** */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*! ****************************************************************************
|
||||||
|
\ingroup SPEC_MATH_ELLIP_GROUP
|
||||||
|
\fn int ellip_acd_cmplx(complex_t* w, int n, double k, complex_t* u)
|
||||||
|
\brief Обратная эллиптическая функция Якоби
|
||||||
|
\f$ u = \textrm{cd}^{-1}(w, k)\f$ комплексного аргумента
|
||||||
|
|
||||||
|
Функция рассчитывает занчения значения обратной эллиптической функции
|
||||||
|
\f$ u = \textrm{cd}^{-1}(w, k)\f$ для комплексного вектора `w`.<BR>
|
||||||
|
|
||||||
|
Для расчета используется итерационный алгоритм на основе преобразования
|
||||||
|
Ландена.<BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[in] w Указатель на массив вектора переменной \f$ w \f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
\param[in] n Размер вектора `w`. <BR><BR>
|
||||||
|
|
||||||
|
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||||
|
Эллиптический модуль -- вещественный параметр,
|
||||||
|
принимающий значения от 0 до 1. <BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[out] u Указатель на вектор значений обратной эллиптической
|
||||||
|
функции \f$ u = \textrm{cd}^{-1}(w, k)\f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\return
|
||||||
|
`RES_OK` Расчет произведен успешно.<BR>
|
||||||
|
В противном случае
|
||||||
|
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||||
|
|
||||||
|
\author
|
||||||
|
Бахурин Сергей
|
||||||
|
www.dsplib.org
|
||||||
|
|
||||||
|
***************************************************************************** */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*! ****************************************************************************
|
||||||
|
\ingroup SPEC_MATH_ELLIP_GROUP
|
||||||
|
\fn int ellip_asn(double* w, int n, double k, double* u)
|
||||||
|
\brief Обратная эллиптическая функция Якоби
|
||||||
|
\f$ u = \textrm{sn}^{-1}(w, k)\f$ вещественного аргумента
|
||||||
|
|
||||||
|
Функция рассчитывает занчения значения обратной эллиптической функции
|
||||||
|
\f$ u = \textrm{sn}^{-1}(w, k)\f$ для вещественного вектора `w`.<BR>
|
||||||
|
|
||||||
|
Для расчета используется итерационный алгоритм на основе преобразования
|
||||||
|
Ландена.<BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[in] w Указатель на массив вектора переменной \f$ w \f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
\param[in] n Размер вектора `w`. <BR><BR>
|
||||||
|
|
||||||
|
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||||
|
Эллиптический модуль -- вещественный параметр,
|
||||||
|
принимающий значения от 0 до 1. <BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[out] u Указатель на вектор значений обратной эллиптической
|
||||||
|
функции \f$ u = \textrm{sn}^{-1}(w, k)\f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\return
|
||||||
|
`RES_OK` Расчет произведен успешно.<BR>
|
||||||
|
В противном случае
|
||||||
|
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||||
|
|
||||||
|
\author
|
||||||
|
Бахурин Сергей
|
||||||
|
www.dsplib.org
|
||||||
|
|
||||||
|
***************************************************************************** */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*! ****************************************************************************
|
||||||
|
\ingroup SPEC_MATH_ELLIP_GROUP
|
||||||
|
\fn int ellip_asn_cmplx(complex_t* w, int n, double k, complex_t* u)
|
||||||
|
\brief Обратная эллиптическая функция Якоби
|
||||||
|
\f$ u = \textrm{sn}^{-1}(w, k)\f$ комплексного аргумента
|
||||||
|
|
||||||
|
Функция рассчитывает занчения значения обратной эллиптической функции
|
||||||
|
\f$ u = \textrm{sn}^{-1}(w, k)\f$ для комплексного вектора `w`.<BR>
|
||||||
|
|
||||||
|
Для расчета используется итерационный алгоритм на основе преобразования
|
||||||
|
Ландена.<BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[in] w Указатель на массив вектора переменной \f$ w \f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
\param[in] n Размер вектора `w`. <BR><BR>
|
||||||
|
|
||||||
|
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||||
|
Эллиптический модуль -- вещественный параметр,
|
||||||
|
принимающий значения от 0 до 1. <BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[out] u Указатель на вектор значений обратной эллиптической
|
||||||
|
функции \f$ u = \textrm{sn}^{-1}(w, k)\f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\return
|
||||||
|
`RES_OK` Расчет произведен успешно.<BR>
|
||||||
|
В противном случае
|
||||||
|
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||||
|
|
||||||
|
\author
|
||||||
|
Бахурин Сергей
|
||||||
|
www.dsplib.org
|
||||||
|
|
||||||
|
***************************************************************************** */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*! ****************************************************************************
|
||||||
|
\ingroup SPEC_MATH_ELLIP_GROUP
|
||||||
|
\fn int ellip_cd(double* u, int n, double k, double* y)
|
||||||
|
\brief Эллиптическая функция Якоби
|
||||||
|
\f$ y = \textrm{cd}(u K(k), k)\f$ вещественного аргумента
|
||||||
|
|
||||||
|
Функция рассчитывает занчения значения эллиптической функции
|
||||||
|
\f$ y = \textrm{cd}(u K(k), k)\f$ для вещественного вектора `u` и
|
||||||
|
эллиптического модуля `k`.<BR>
|
||||||
|
|
||||||
|
Для расчета используется итерационный алгоритм на основе преобразования
|
||||||
|
Ландена.<BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[in] u Указатель на массив вектора переменной \f$ u \f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
\param[in] n Размер вектора `u`. <BR><BR>
|
||||||
|
|
||||||
|
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||||
|
Эллиптический модуль -- вещественный параметр,
|
||||||
|
принимающий значения от 0 до 1. <BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[out] y Указатель на вектор значений эллиптической
|
||||||
|
функции \f$ y = \textrm{cd}(u K(k), k)\f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\return
|
||||||
|
`RES_OK` Расчет произведен успешно.<BR>
|
||||||
|
В противном случае
|
||||||
|
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||||
|
|
||||||
|
\author
|
||||||
|
Бахурин Сергей
|
||||||
|
www.dsplib.org
|
||||||
|
|
||||||
|
***************************************************************************** */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*! ****************************************************************************
|
||||||
|
\ingroup SPEC_MATH_ELLIP_GROUP
|
||||||
|
\fn int ellip_cd_cmplx(complex_t* u, int n, double k, complex_t* y)
|
||||||
|
\brief Эллиптическая функция Якоби
|
||||||
|
\f$ y = \textrm{cd}(u K(k), k)\f$ комплексного аргумента
|
||||||
|
|
||||||
|
Функция рассчитывает занчения значения эллиптической функции
|
||||||
|
\f$ y = \textrm{cd}(u K(k), k)\f$ для комплексного вектора `u` и
|
||||||
|
эллиптического модуля `k`.<BR>
|
||||||
|
|
||||||
|
Для расчета используется итерационный алгоритм на основе преобразования
|
||||||
|
Ландена.<BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[in] u Указатель на массив вектора переменной \f$ u \f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
\param[in] n Размер вектора `u`. <BR><BR>
|
||||||
|
|
||||||
|
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||||
|
Эллиптический модуль -- вещественный параметр,
|
||||||
|
принимающий значения от 0 до 1. <BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[out] y Указатель на вектор значений эллиптической
|
||||||
|
функции \f$ y = \textrm{cd}(u K(k), k)\f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\return
|
||||||
|
`RES_OK` Расчет произведен успешно.<BR>
|
||||||
|
В противном случае
|
||||||
|
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||||
|
|
||||||
|
\author
|
||||||
|
Бахурин Сергей
|
||||||
|
www.dsplib.org
|
||||||
|
|
||||||
|
***************************************************************************** */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*! ****************************************************************************
|
||||||
|
\ingroup SPEC_MATH_ELLIP_GROUP
|
||||||
|
\fn int ellip_landen(double k, int n, double* y)
|
||||||
|
\brief Расчет коэффициентов \f$ k_i \f$ ряда полного эллиптического интеграла.
|
||||||
|
|
||||||
|
|
||||||
|
Полный эллиптический интеграл \f$ K(k) \f$ может быть представлен рядом:
|
||||||
|
|
||||||
|
\f[
|
||||||
|
K(k) = \frac{\pi}{2} \prod_{i = 1}^{\infty}(1+k_i),
|
||||||
|
\f]
|
||||||
|
|
||||||
|
где \f$ k_i \f$ вычисляется итерационно при начальных условиях \f$ k_0 = k\f$:
|
||||||
|
|
||||||
|
\f[
|
||||||
|
k_i =
|
||||||
|
\left(
|
||||||
|
\frac{k_{i-1}}
|
||||||
|
{
|
||||||
|
1+\sqrt{1-k_{i-1}^2}
|
||||||
|
}
|
||||||
|
\right)^2
|
||||||
|
\f]
|
||||||
|
|
||||||
|
Данная функция рассчитывает ряд первых `n` значений \f$ k_i \f$, которые в
|
||||||
|
дальнейшем могут быть использованы для расчета эллиптического интеграла и
|
||||||
|
эллиптических функций.
|
||||||
|
|
||||||
|
|
||||||
|
\param[in] k Эллиптический модуль \f$ k \f$.<BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[in] n Размер вектора `y` соответсвующих
|
||||||
|
коэффициентам \f$ k_i \f$. <BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\param[out] y Указатель на вектор значений
|
||||||
|
коэффициентов \f$ k_i \f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\return
|
||||||
|
`RES_OK` Расчет произведен успешно.<BR>
|
||||||
|
В противном случае
|
||||||
|
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||||
|
|
||||||
|
Пример использования функции `ellip_landen`:
|
||||||
|
|
||||||
|
\include ellip_landen_test.c
|
||||||
|
|
||||||
|
Результат работы программы:
|
||||||
|
|
||||||
|
\verbatim
|
||||||
|
i k[i]
|
||||||
|
|
||||||
|
1 4.625e-01
|
||||||
|
2 6.009e-02
|
||||||
|
3 9.042e-04
|
||||||
|
4 2.044e-07
|
||||||
|
5 1.044e-14
|
||||||
|
6 2.727e-29
|
||||||
|
7 1.859e-58
|
||||||
|
8 8.640e-117
|
||||||
|
9 1.866e-233
|
||||||
|
10 0.000e+00
|
||||||
|
11 0.000e+00
|
||||||
|
12 0.000e+00
|
||||||
|
13 0.000e+00
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
\note Ряд полного эллиптического интеграла сходится при значениях
|
||||||
|
эллиптического модуля \f$ k<1 \f$. При этом сходимость ряда достаточно
|
||||||
|
быстрая и для практический приложений достаточно от 10 до 20 значений
|
||||||
|
\f$ k_i \f$ для обеспечения погрешности при расчете полного
|
||||||
|
эллиптического интеграла в пределах машинной точности.
|
||||||
|
|
||||||
|
\author
|
||||||
|
Бахурин Сергей
|
||||||
|
www.dsplib.org
|
||||||
|
|
||||||
|
***************************************************************************** */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*! ****************************************************************************
|
||||||
|
\ingroup SPEC_MATH_ELLIP_GROUP
|
||||||
|
\fn int ellip_sn(double* u, int n, double k, double* y)
|
||||||
|
\brief Эллиптическая функция Якоби
|
||||||
|
\f$ y = \textrm{sn}(u K(k), k)\f$ вещественного аргумента
|
||||||
|
|
||||||
|
Функция рассчитывает занчения значения эллиптической функции
|
||||||
|
\f$ y = \textrm{sn}(u K(k), k)\f$ для вещественного вектора `u` и
|
||||||
|
эллиптического модуля `k`.<BR>
|
||||||
|
|
||||||
|
Для расчета используется итерационный алгоритм на основе преобразования
|
||||||
|
Ландена.<BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[in] u Указатель на массив вектора переменной \f$ u \f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
\param[in] n Размер вектора `u`. <BR><BR>
|
||||||
|
|
||||||
|
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||||
|
Эллиптический модуль -- вещественный параметр,
|
||||||
|
принимающий значения от 0 до 1. <BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[out] y Указатель на вектор значений эллиптической
|
||||||
|
функции \f$ y = \textrm{sn}(u K(k), k)\f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\return
|
||||||
|
`RES_OK` Расчет произведен успешно.<BR>
|
||||||
|
В противном случае
|
||||||
|
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||||
|
|
||||||
|
\author
|
||||||
|
Бахурин Сергей
|
||||||
|
www.dsplib.org
|
||||||
|
|
||||||
|
***************************************************************************** */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*! ****************************************************************************
|
||||||
|
\ingroup SPEC_MATH_ELLIP_GROUP
|
||||||
|
\fn int ellip_sn_cmplx(complex_t* u, int n, double k, complex_t* y)
|
||||||
|
\brief Эллиптическая функция Якоби
|
||||||
|
\f$ y = \textrm{sn}(u K(k), k)\f$ комплексного аргумента
|
||||||
|
|
||||||
|
Функция рассчитывает занчения значения эллиптической функции
|
||||||
|
\f$ y = \textrm{sn}(u K(k), k)\f$ для комплексного вектора `u` и
|
||||||
|
эллиптического модуля `k`.<BR>
|
||||||
|
|
||||||
|
Для расчета используется итерационный алгоритм на основе преобразования
|
||||||
|
Ландена.<BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[in] u Указатель на массив вектора переменной \f$ u \f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
\param[in] n Размер вектора `u`. <BR><BR>
|
||||||
|
|
||||||
|
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||||
|
Эллиптический модуль -- вещественный параметр,
|
||||||
|
принимающий значения от 0 до 1. <BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\param[out] y Указатель на вектор значений эллиптической
|
||||||
|
функции \f$ y = \textrm{sn}(u K(k), k)\f$.<BR>
|
||||||
|
Размер вектора `[n x 1]`.<BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
|
||||||
|
\return
|
||||||
|
`RES_OK` Расчет произведен успешно.<BR>
|
||||||
|
В противном случае
|
||||||
|
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||||
|
|
||||||
|
\author
|
||||||
|
Бахурин Сергей
|
||||||
|
www.dsplib.org
|
||||||
|
|
||||||
|
***************************************************************************** */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -367,6 +367,11 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*! ****************************************************************************
|
/*! ****************************************************************************
|
||||||
\ingroup IIR_FILTER_DESIGN_GROUP
|
\ingroup IIR_FILTER_DESIGN_GROUP
|
||||||
\fn int filter_zp2ab( complex_t *z, int nz, complex_t *p, int np, int ord,
|
\fn int filter_zp2ab( complex_t *z, int nz, complex_t *p, int np, int ord,
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "dspl.h"
|
||||||
|
|
||||||
|
#define N 14
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
void* handle; // DSPL handle
|
||||||
|
handle = dspl_load(); // Load DSPL function
|
||||||
|
|
||||||
|
double k[N];
|
||||||
|
int i, err;
|
||||||
|
|
||||||
|
err = ellip_landen(0.93, N, k);
|
||||||
|
if(err != RES_OK)
|
||||||
|
{
|
||||||
|
printf("Error code: %8x\n", err);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf(" i%8sk[i]\n\n", "");
|
||||||
|
for(i = 1; i < N; i++)
|
||||||
|
printf("%2d %11.3e\n", i, k[i]);
|
||||||
|
|
||||||
|
dspl_free(handle); // free dspl handle
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue