libdspl-2.0
Библиотека алгоритмов цифровой обработки сигналов
Эллиптические функции Якоби

Функции

int ellip_acd (double *w, int n, double k, double *u)
 Обратная эллиптическая функция Якоби \( u = \textrm{cd}^{-1}(w, k)\) вещественного аргумента Подробнее...
 
int ellip_acd_cmplx (complex_t *w, int n, double k, complex_t *u)
 Обратная эллиптическая функция Якоби \( u = \textrm{cd}^{-1}(w, k)\) комплексного аргумента Подробнее...
 
int ellip_asn (double *w, int n, double k, double *u)
 Обратная эллиптическая функция Якоби \( u = \textrm{sn}^{-1}(w, k)\) вещественного аргумента Подробнее...
 
int ellip_asn_cmplx (complex_t *w, int n, double k, complex_t *u)
 Обратная эллиптическая функция Якоби \( u = \textrm{sn}^{-1}(w, k)\) комплексного аргумента Подробнее...
 
int ellip_cd (double *u, int n, double k, double *y)
 Эллиптическая функция Якоби \( y = \textrm{cd}(u K(k), k)\) вещественного аргумента Подробнее...
 
int ellip_cd_cmplx (complex_t *u, int n, double k, complex_t *y)
 Эллиптическая функция Якоби \( y = \textrm{cd}(u K(k), k)\) комплексного аргумента Подробнее...
 
int ellip_landen (double k, int n, double *y)
 Расчет коэффициентов \( k_i \) ряда полного эллиптического интеграла.
Подробнее...
 
int ellip_sn (double *u, int n, double k, double *y)
 Эллиптическая функция Якоби \( y = \textrm{sn}(u K(k), k)\) вещественного аргумента Подробнее...
 
int ellip_sn_cmplx (complex_t *u, int n, double k, complex_t *y)
 Эллиптическая функция Якоби \( y = \textrm{sn}(u K(k), k)\) комплексного аргумента Подробнее...
 

Подробное описание

Эллиптические функции Якоби вещественного и комплексного аргумента

Функции

◆ ellip_acd()

int ellip_acd ( double *  w,
int  n,
double  k,
double *  u 
)

Обратная эллиптическая функция Якоби \( u = \textrm{cd}^{-1}(w, k)\) вещественного аргумента



Функция рассчитывает значения обратной эллиптической функции \( u = \textrm{cd}^{-1}(w, k)\) для вещественного вектора w.
Для расчета используется итерационный алгоритм на основе преобразования Ландена.

Аргументы
[in]wУказатель на массив вектора переменной \( w \).
Размер вектора [n x 1].
Память должна быть выделена.

[in]nРазмер вектора w.
[in]kЗначение эллиптического модуля \( k \). Эллиптический модуль – вещественный параметр, принимающий значения от 0 до 1.

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

Возвращает
RES_OK Расчет произведен успешно.
В противном случае код ошибки.
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле ellipj.c строка 103

◆ ellip_acd_cmplx()

int ellip_acd_cmplx ( complex_t w,
int  n,
double  k,
complex_t u 
)

Обратная эллиптическая функция Якоби \( u = \textrm{cd}^{-1}(w, k)\) комплексного аргумента



Функция рассчитывает значения значения обратной эллиптической функции \( u = \textrm{cd}^{-1}(w, k)\) для комплексного вектора w.
Для расчета используется итерационный алгоритм на основе преобразования Ландена.

Аргументы
[in]wУказатель на массив вектора переменной \( w \).
Размер вектора [n x 1].
Память должна быть выделена.

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

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

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

Возвращает
RES_OK Расчет произведен успешно.
В противном случае код ошибки.
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле ellipj.c строка 211

◆ ellip_asn()

int ellip_asn ( double *  w,
int  n,
double  k,
double *  u 
)

Обратная эллиптическая функция Якоби \( u = \textrm{sn}^{-1}(w, k)\) вещественного аргумента



Функция рассчитывает значения значения обратной эллиптической функции \( u = \textrm{sn}^{-1}(w, k)\) для вещественного вектора w.
Для расчета используется итерационный алгоритм на основе преобразования Ландена.

Аргументы
[in]wУказатель на массив вектора переменной \( w \).
Размер вектора [n x 1].
Память должна быть выделена.

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

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

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

Возвращает
RES_OK Расчет произведен успешно.
В противном случае код ошибки.
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле ellipj.c строка 339

◆ ellip_asn_cmplx()

int ellip_asn_cmplx ( complex_t w,
int  n,
double  k,
complex_t u 
)

Обратная эллиптическая функция Якоби \( u = \textrm{sn}^{-1}(w, k)\) комплексного аргумента



Функция рассчитывает значения значения обратной эллиптической функции \( u = \textrm{sn}^{-1}(w, k)\) для комплексного вектора w.
Для расчета используется итерационный алгоритм на основе преобразования Ландена.

Аргументы
[in]wУказатель на массив вектора переменной \( w \).
Размер вектора [n x 1].
Память должна быть выделена.

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

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

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

Возвращает
RES_OKРасчет произведен успешно.
В противном случае код ошибки.
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле ellipj.c строка 447

Используется в ellip_ap_zp().

◆ ellip_cd()

int ellip_cd ( double *  u,
int  n,
double  k,
double *  y 
)

Эллиптическая функция Якоби \( y = \textrm{cd}(u K(k), k)\) вещественного аргумента



Функция рассчитывает значения значения эллиптической функции \( y = \textrm{cd}(u K(k), k)\) для вещественного вектора u и эллиптического модуля k.
Для расчета используется итерационный алгоритм на основе преобразования Ландена.

Аргументы
[in]uУказатель на массив вектора переменной \( u \).
Размер вектора [n x 1].
Память должна быть выделена.

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

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

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

Возвращает
RES_OK Расчет произведен успешно.
В противном случае код ошибки.
Пример представлен в следующем листинге:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dspl.h"
#define N 500
int main(int argc, char* argv[])
{
void* hdspl; /* DSPL handle */
void* hplot; /* GNUPLOT handle */
hdspl = dspl_load(); /* Load DSPL function */
double u[N];
double y[N];
/* fill u*K(k) vector from -4 to 4.
We will have 2 periods sn(uK(k), k) */
linspace(-4.0, 4.0, N, DSPL_PERIODIC, u);
/* sn(uK(0), 0) */
ellip_cd(u, N, 0.0, y);
writetxt(u,y,N,"dat/ellip_cd_0p00.txt");
/* sn(uK(0.9), 0.9) */
ellip_cd(u, N, 0.9, y);
writetxt(u,y,N,"dat/ellip_cd_0p90.txt");
/* sn(uK(0.99), 0.99) */
ellip_cd(u, N, 0.99, y);
writetxt(u,y,N,"dat/ellip_cd_0p99.txt");
/* plotting by GNUPLOT */
gnuplot_create(argc, argv, 560, 360, "img/ellip_cd.png", &hplot);
gnuplot_cmd(hplot, "set grid");
gnuplot_cmd(hplot, "set xlabel 'u'");
gnuplot_cmd(hplot, "set ylabel 'y = cd(u, k)'");
gnuplot_cmd(hplot, "set yrange [-1.2:1.2]");
gnuplot_cmd(hplot, "plot 'dat/ellip_cd_0p00.txt' w l,\\");
gnuplot_cmd(hplot, " 'dat/ellip_cd_0p90.txt' w l,\\");
gnuplot_cmd(hplot, " 'dat/ellip_cd_0p99.txt' w l");
gnuplot_close(hplot);
/* free dspl handle */
dspl_free(hdspl);
return RES_OK;
}

Программа рассчитывает два периода эллиптической функции \( y = \textrm{cd}(u K(k), k)\) для k = 0, k= 0.9 и k = 0.99, а также выводит графики данных функций

Автор
Бахурин Сергей www.dsplib.org

См. определение в файле ellipj.c строка 594

Используется в ellip_ap_zp().

◆ ellip_cd_cmplx()

int ellip_cd_cmplx ( complex_t u,
int  n,
double  k,
complex_t y 
)

Эллиптическая функция Якоби \( y = \textrm{cd}(u K(k), k)\) комплексного аргумента


Функция рассчитывает значения значения эллиптической функции \( y = \textrm{cd}(u K(k), k)\) для комплексного вектора u и эллиптического модуля k.
Для расчета используется итерационный алгоритм на основе преобразования Ландена.

Аргументы
[in]uУказатель на массив вектора переменной \( u \).
Размер вектора [n x 1].
Память должна быть выделена.

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

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

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

Возвращает
RES_OK Расчет произведен успешно.
В противном случае код ошибки.
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле ellipj.c строка 701

Используется в ellip_ap_zp().

◆ ellip_landen()

int ellip_landen ( double  k,
int  n,
double *  y 
)

Расчет коэффициентов \( k_i \) ряда полного эллиптического интеграла.


Полный эллиптический интеграл \( K(k) \) может быть представлен рядом:

\[ K(k) = \frac{\pi}{2} \prod_{i = 1}^{\infty}(1+k_i), \]

где \( k_i \) вычисляется итерационно при начальных условиях \( k_0 = k\):

\[ k_i = \left( \frac{k_{i-1}}{1+\sqrt{1-k_{i-1}^2}}\right)^2 \]

Данная функция рассчитывает ряд первых n значений \( k_i \), которые в дальнейшем могут быть использованы для расчета эллиптического интеграла и эллиптических функций.

Аргументы
[in]kЭллиптический модуль \( k \).
[in]nРазмер вектора y соответствующих коэффициентам \( k_i \).

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

Возвращает
RES_OK Расчет произведен успешно.
В противном случае код ошибки.
Пример использования функции ellip_landen:
#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;
}

Результат работы программы:

 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
Заметки
Ряд полного эллиптического интеграла сходится при значениях эллиптического модуля \( k<1 \). При этом сходимость ряда достаточно быстрая и для практический приложений достаточно от 10 до 20 значений \( k_i \) для обеспечения погрешности при расчете полного эллиптического интеграла в пределах машинной точности.
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле ellipj.c строка 889

Используется в ellip_acd(), ellip_acd_cmplx(), ellip_asn(), ellip_asn_cmplx(), ellip_cd(), ellip_cd_cmplx(), ellip_sn() и ellip_sn_cmplx().

◆ ellip_sn()

int ellip_sn ( double *  u,
int  n,
double  k,
double *  y 
)

Эллиптическая функция Якоби \( y = \textrm{sn}(u K(k), k)\) вещественного аргумента



Функция рассчитывает значения значения эллиптической функции \( y = \textrm{sn}(u K(k), k)\) для вещественного вектора u и эллиптического модуля k.
Для расчета используется итерационный алгоритм на основе преобразования Ландена.

Аргументы
[in]uУказатель на массив вектора переменной \( u \).
Размер вектора [n x 1].
Память должна быть выделена.

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

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

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

Возвращает
RES_OK Расчет произведен успешно.
В противном случае код ошибки.

Пример представлен в следующем листинге:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dspl.h"
#define N 500
int main(int argc, char* argv[])
{
void* hdspl; /* DSPL handle */
void* hplot; /* GNUPLOT handle */
hdspl = dspl_load(); /* Load DSPL function */
double u[N];
double y[N];
/* fill u*K(k) vector from -4 to 4.
We will have 2 periods sn(uK(k), k) */
linspace(-4.0, 4.0, N, DSPL_PERIODIC, u);
/* sn(uK(0), 0) */
ellip_sn(u, N, 0.0, y);
writetxt(u,y,N,"dat/ellip_sn_0p00.txt");
/* sn(uK(0.9), 0.9) */
ellip_sn(u, N, 0.9, y);
writetxt(u,y,N,"dat/ellip_sn_0p90.txt");
/* sn(uK(0.99), 0.99) */
ellip_sn(u, N, 0.99, y);
writetxt(u,y,N,"dat/ellip_sn_0p99.txt");
/* plotting by GNUPLOT */
gnuplot_create(argc, argv, 560, 360, "img/ellip_sn.png", &hplot);
gnuplot_cmd(hplot, "set grid");
gnuplot_cmd(hplot, "set xlabel 'u'");
gnuplot_cmd(hplot, "set ylabel 'y = sn(u, k)'");
gnuplot_cmd(hplot, "set yrange [-1.2:1.2]");
gnuplot_cmd(hplot, "plot 'dat/ellip_sn_0p00.txt' w l,\\");
gnuplot_cmd(hplot, " 'dat/ellip_sn_0p90.txt' w l,\\");
gnuplot_cmd(hplot, " 'dat/ellip_sn_0p99.txt' w l");
gnuplot_close(hplot);
/* free dspl handle */
dspl_free(hdspl);
return RES_OK;
}

Программа рассчитывает два периода эллиптической функции \( y = \textrm{sn}(u K(k), k)\) для k = 0, k= 0.9 и k = 0.99, а также выводит графики данных функций

Автор
Бахурин Сергей www.dsplib.org

См. определение в файле ellipj.c строка 1111

◆ ellip_sn_cmplx()

int ellip_sn_cmplx ( complex_t u,
int  n,
double  k,
complex_t y 
)

Эллиптическая функция Якоби \( y = \textrm{sn}(u K(k), k)\) комплексного аргумента


Функция рассчитывает значения значения эллиптической функции \( y = \textrm{sn}(u K(k), k)\) для комплексного вектора u и эллиптического модуля k.
Для расчета используется итерационный алгоритм на основе преобразования Ландена.

Аргументы
[in]uУказатель на массив вектора переменной \( u \).
Размер вектора [n x 1].
Память должна быть выделена.

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

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

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

Возвращает
RES_OK Расчет произведен успешно.
В противном случае код ошибки.
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле ellipj.c строка 1216

Используется в ellip_ap_zp().

int ellip_cd(double *u, int n, double k, double *y)
Эллиптическая функция Якоби вещественного аргумента
Definition: ellipj.c:594
void gnuplot_close(void *h)
Закрыть хэндл GNUPLOT.
Definition: gnuplot.c:325
void * dspl_load()
Произвести динамическую линковку и загрузить функции libdspl-2.0.
int ellip_sn(double *u, int n, double k, double *y)
Эллиптическая функция Якоби вещественного аргумента
Definition: ellipj.c:1111
void gnuplot_cmd(void *h, char *cmd)
Функция посылает команду cmd пакету GNUPLOT, для построения или оформления графика,...
Definition: gnuplot.c:390
int writetxt(double *x, double *y, int n, char *fn)
Сохранить вещественные данные в текстовый файл
Definition: inout.c:491
void dspl_free(void *handle)
Очищает связанную ранее динамическую библиотеку DSPL-2.0.
#define RES_OK
Функция завершилась корректно. Ошибки отсутствуют.
Definition: dspl.h:497
int linspace(double x0, double x1, int n, int type, double *x)
Функция заполняет массив линейно-нарастающими, равноотстоящими значениями от x0 до x1
Definition: array.c:1009
int ellip_landen(double k, int n, double *y)
Расчет коэффициентов ряда полного эллиптического интеграла.
Definition: ellipj.c:889
int gnuplot_create(int argc, char *argv[], int w, int h, char *fn_png, void **hplot)
Создать график GNUPLOT.
Definition: gnuplot.c:200