libdspl-2.0
Digital Signal Processing Algorithm Library
|
Functions | |
int DSPL_API | cheby_poly1 (double *x, int n, int ord, double *y) |
Chebyshev polynomial of the first kind order ord More... | |
int DSPL_API | cheby_poly2 (double *x, int n, int ord, double *y) |
Chebyshev polynomial of the second kind order ord More... | |
int DSPL_API | polyroots (double *a, int ord, complex_t *r, int *info) |
Function calculates real polynomial roots. More... | |
Detailed Description
Function Documentation
◆ cheby_poly1()
int cheby_poly1 | ( | double * | x, |
int | n, | ||
int | ord, | ||
double * | y | ||
) |
Chebyshev polynomial of the first kind order ord
Function calculates Chebyshev polynomial \( C_{ord}(x)\) of the first kind order ord
for the real vector x
(length n
) by recurrent equation:
\[ C_{ord}(x) = 2 x C_{ord-1}(x) - C_{ord-2}(x), \]
where \( C_0(x) = 1 \), \( C_1(x) = x\)
- Parameters
-
[in] x Pointer to the real argument vector x
.
Vector size is[n x 1]
.
[in] n Size of vectors x
andy
.
[in] ord Chebyshev polynomial order.
[out] y Pointer to the Chebyshev polynomial values, corresponds to the argument x
.
Vector size is[n x 1]
.
Memory must be allocated.
- Returns
RES_OK
if Chebyshev polynomial is calculated successfully.
Else code error.
Example:
Text files will be created in dat
directory:
cheby_poly1_ord1.txt cheby_poly1_ord2.txt cheby_poly1_ord3.txt cheby_poly1_ord4.txt
GNUPLOT package will create Chebyshev polynomials plot from saved text-files:
Definition at line 136 of file cheby_poly1.c.
◆ cheby_poly2()
int cheby_poly2 | ( | double * | x, |
int | n, | ||
int | ord, | ||
double * | y | ||
) |
Chebyshev polynomial of the second kind order ord
Function calculates Chebyshev polynomial \( U_ord(x)\) of the first kind order ord
for the real vector x
(length n
) by recurrent equation:
\[ U_{ord}(x) = 2 x U_{ord-1}(x) - U_{ord-2}(x), \]
where \( U_0(x) = 1 \), \( U_1(x) = 2x\)
- Parameters
-
[in] x Pointer to the real argument vector x
.
Vector size is[n x 1]
.
[in] n Size of vectors x
andy
.
[in] ord Chebyshev polynomial order.
[out] y Pointer to the Chebyshev polynomial values, corresponds to the argument x
.
Vector size is[n x 1]
.
Memory must be allocated.
- Returns
RES_OK
if Chebyshev polynomial is calculated successfully.
Else code error.
Example:#include <stdio.h>#include <stdlib.h>#include <string.h>#include "dspl.h"#define N 250int main(int argc, char* argv[]){void* hdspl; /* DSPL handle */void* hplot; /* GNUPLOT handle */double x[N], y[N];int ord;char fn[64];hdspl = dspl_load(); /* Load DSPL function */linspace(-1.0, 1.0, N, DSPL_SYMMETRIC, x);for(ord = 1; ord < 5; ord++){cheby_poly2(x, N, ord, y);sprintf(fn, "dat/cheby_poly2_ord%d.txt", ord);writetxt(x,y,N,fn);}/* plotting by GNUPLOT */gnuplot_create(argc, argv, 560, 380, "img/cheby_poly2.png", &hplot);gnuplot_cmd(hplot, "set grid");gnuplot_cmd(hplot, "set key left top");gnuplot_cmd(hplot, "set xlabel 'x'");gnuplot_cmd(hplot, "set ylabel 'U_N (x)'");gnuplot_cmd(hplot, "set yrange [-3.5:3.5]");gnuplot_cmd(hplot, "plot 'dat/cheby_poly2_ord1.txt' with lines, \\");gnuplot_cmd(hplot, " 'dat/cheby_poly2_ord2.txt' with lines, \\");gnuplot_cmd(hplot, " 'dat/cheby_poly2_ord3.txt' with lines, \\");gnuplot_cmd(hplot, " 'dat/cheby_poly2_ord4.txt' with lines");gnuplot_close(hplot);dspl_free(hdspl); /* free dspl handle */return 0;}int DSPL_API cheby_poly2(double *x, int n, int ord, double *y)Chebyshev polynomial of the second kind order ordDefinition: cheby_poly2.c:133
Text files will be created in dat
directory:
cheby_poly2_ord1.txt cheby_poly2_ord2.txt cheby_poly2_ord3.txt cheby_poly2_ord4.txt
GNUPLOT package will create Chebyshev polynomials plot from saved text-files:
Definition at line 133 of file cheby_poly2.c.
◆ polyroots()
int polyroots | ( | double * | a, |
int | ord, | ||
complex_t * | r, | ||
int * | info | ||
) |
Function calculates real polynomial roots.
Function calculates roots of the real polynomial \(P_N(x)\) order \(N\) with a
coefficient vector size [(N+1) x 1]
.
\[ P_N(x) = a_0 + a_1 x + a_2 x^2 + a_3 x^3 + ... a_N x^N. \]
The roots of the polynomial are calculated as eigenvalues of the polynomial companion matrix. To calculate the eigenvalues, a subroutine of the LAPACK package is used.
- Parameters
-
[in] a Pointer to the vector of coefficients.
Vector size is[ord+1 x 1]
.
Coefficienta[0]
corresponds to the \(a_0\) polynomial coefficient.
Coefficienta[ord]
cannot be zero.
[in] ord Polynomial order \(N\).
[out] r Pointer to the polynomial roots vector.
Vector size is[ord x 1]
.
Memory must be allocated.
The roots of a real polynomial can be either real or form simple or multiple complex conjugate pairs of roots. Therefore, the output root vector is of a complex data type.
[out] info Pointer to the LAPACK subroutine error code.
This code is returned by the LAPACK subroutine and translated through this variable for analysis..
- Returns
RES_OK
— roots are calculated successfully.
Else code error.
Example:
This program calculates the roots of the polynomial
\[ P(x) = 2 + 2x + x^2 \]
and prints the calculated roots. The result of the program:
Error code: 0x00000000 r[0] = -1.00000 1.00000 j r[1] = -1.00000-1.00000 j
Definition at line 157 of file polyroots.c.
Generated on Wed Jan 5 2022 12:44:37 for libdspl-2.0 by 1.9.2