diff --git a/dspl/dox/ru/ellipj.dox b/dspl/dox/ru/ellipj.dox index e69de29..915fa9e 100644 --- a/dspl/dox/ru/ellipj.dox +++ b/dspl/dox/ru/ellipj.dox @@ -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`.
+ +Для расчета используется итерационный алгоритм на основе преобразования +Ландена.
+ + +\param[in] w Указатель на массив вектора переменной \f$ w \f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ +\param[in] n Размер вектора `w`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
+ Эллиптический модуль -- вещественный параметр, + принимающий значения от 0 до 1.

+ + +\param[out] u Указатель на вектор значений обратной эллиптической + функции \f$ u = \textrm{cd}^{-1}(w, k)\f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ + +\return + `RES_OK` Расчет произведен успешно.
+ В противном случае + \ref ERROR_CODE_GROUP "код ошибки".
+ +\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`.
+ +Для расчета используется итерационный алгоритм на основе преобразования +Ландена.
+ + +\param[in] w Указатель на массив вектора переменной \f$ w \f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ +\param[in] n Размер вектора `w`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
+ Эллиптический модуль -- вещественный параметр, + принимающий значения от 0 до 1.

+ + +\param[out] u Указатель на вектор значений обратной эллиптической + функции \f$ u = \textrm{cd}^{-1}(w, k)\f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ + +\return + `RES_OK` Расчет произведен успешно.
+ В противном случае + \ref ERROR_CODE_GROUP "код ошибки".
+ +\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`.
+ +Для расчета используется итерационный алгоритм на основе преобразования +Ландена.
+ + +\param[in] w Указатель на массив вектора переменной \f$ w \f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ +\param[in] n Размер вектора `w`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
+ Эллиптический модуль -- вещественный параметр, + принимающий значения от 0 до 1.

+ + +\param[out] u Указатель на вектор значений обратной эллиптической + функции \f$ u = \textrm{sn}^{-1}(w, k)\f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ + +\return + `RES_OK` Расчет произведен успешно.
+ В противном случае + \ref ERROR_CODE_GROUP "код ошибки".
+ +\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`.
+ +Для расчета используется итерационный алгоритм на основе преобразования +Ландена.
+ + +\param[in] w Указатель на массив вектора переменной \f$ w \f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ +\param[in] n Размер вектора `w`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
+ Эллиптический модуль -- вещественный параметр, + принимающий значения от 0 до 1.

+ + +\param[out] u Указатель на вектор значений обратной эллиптической + функции \f$ u = \textrm{sn}^{-1}(w, k)\f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ + +\return + `RES_OK` Расчет произведен успешно.
+ В противном случае + \ref ERROR_CODE_GROUP "код ошибки".
+ +\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`.
+ +Для расчета используется итерационный алгоритм на основе преобразования +Ландена.
+ + +\param[in] u Указатель на массив вектора переменной \f$ u \f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ +\param[in] n Размер вектора `u`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
+ Эллиптический модуль -- вещественный параметр, + принимающий значения от 0 до 1.

+ + +\param[out] y Указатель на вектор значений эллиптической + функции \f$ y = \textrm{cd}(u K(k), k)\f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ + +\return + `RES_OK` Расчет произведен успешно.
+ В противном случае + \ref ERROR_CODE_GROUP "код ошибки".
+ +\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`.
+ +Для расчета используется итерационный алгоритм на основе преобразования +Ландена.
+ + +\param[in] u Указатель на массив вектора переменной \f$ u \f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ +\param[in] n Размер вектора `u`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
+ Эллиптический модуль -- вещественный параметр, + принимающий значения от 0 до 1.

+ + +\param[out] y Указатель на вектор значений эллиптической + функции \f$ y = \textrm{cd}(u K(k), k)\f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ + +\return + `RES_OK` Расчет произведен успешно.
+ В противном случае + \ref ERROR_CODE_GROUP "код ошибки".
+ +\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$.
+ + +\param[in] n Размер вектора `y` соответсвующих + коэффициентам \f$ k_i \f$.

+ + + +\param[out] y Указатель на вектор значений + коэффициентов \f$ k_i \f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ + +\return + `RES_OK` Расчет произведен успешно.
+ В противном случае + \ref ERROR_CODE_GROUP "код ошибки".
+ +Пример использования функции `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`.
+ +Для расчета используется итерационный алгоритм на основе преобразования +Ландена.
+ + +\param[in] u Указатель на массив вектора переменной \f$ u \f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ +\param[in] n Размер вектора `u`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
+ Эллиптический модуль -- вещественный параметр, + принимающий значения от 0 до 1.

+ + +\param[out] y Указатель на вектор значений эллиптической + функции \f$ y = \textrm{sn}(u K(k), k)\f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ + +\return + `RES_OK` Расчет произведен успешно.
+ В противном случае + \ref ERROR_CODE_GROUP "код ошибки".
+ +\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`.
+ +Для расчета используется итерационный алгоритм на основе преобразования +Ландена.
+ + +\param[in] u Указатель на массив вектора переменной \f$ u \f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ +\param[in] n Размер вектора `u`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
+ Эллиптический модуль -- вещественный параметр, + принимающий значения от 0 до 1.

+ + +\param[out] y Указатель на вектор значений эллиптической + функции \f$ y = \textrm{sn}(u K(k), k)\f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ + +\return + `RES_OK` Расчет произведен успешно.
+ В противном случае + \ref ERROR_CODE_GROUP "код ошибки".
+ +\author + Бахурин Сергей + www.dsplib.org + +***************************************************************************** */ + + + + diff --git a/dspl/dox/ru/filter_ap.dox b/dspl/dox/ru/filter_ap.dox index 737a56d..66de975 100644 --- a/dspl/dox/ru/filter_ap.dox +++ b/dspl/dox/ru/filter_ap.dox @@ -367,6 +367,11 @@ + + + + + /*! **************************************************************************** \ingroup IIR_FILTER_DESIGN_GROUP \fn int filter_zp2ab( complex_t *z, int nz, complex_t *p, int np, int ord, diff --git a/test/src/ellip_landen_test.c b/test/src/ellip_landen_test.c new file mode 100644 index 0000000..70bdf20 --- /dev/null +++ b/test/src/ellip_landen_test.c @@ -0,0 +1,30 @@ +#include +#include +#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; +} + +