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
|
||||
\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