/*! ****************************************************************************
\ingroup SPEC_MATH_COMMON_GROUP
\fn int polyroots(double* a, int ord, complex_t* r, int* info)

\brief
Расчет корней вещественного полинома

Функция рассчитывает корни полинома \f$P_N(x)\f$  \f$N-\f$ого 
порядка, заданного вектором коэффициентов `a`. 

\f[
  P_N(x) = a_0 + a_1 x + a_2  x^2 + a_3  x^3 + ... a_N  x^N.
\f]

Корни полинома рассчитываются как собственные числа характеристической 
матрицы полинома. Для расчета собственных чисел используется подпрограмма 
пакета LAPACK.


\param[in]  a
Указатель на вектор вещественных коэффициентов полинома. \n
Размер вектора `[ord+1 x 1]`. \n
Коэффициент `a[0]` соответствует коэффициенту полинома \f$a_0\f$. \n 
Коэффициент `a[ord]` не должен быть равен нулю. \n  
\n

\param[in]  ord
Порядок полинома \f$N\f$.  \n 
\n

\param[out]  r
Указатель на вектор комплексных корней полинома.  \n
Размер вектора `[ord x 1]`. \n
Память должна быть выделена. \n 
\n

\param[out]  info
Указатель наа код возврата пакета LAPACK. \n 
Данный код возвращается подпрограммой LAPACK и транслируется через данную 
переменную для возможности анализа. \n
\n


\return
`RES_OK` --- корни полинома рассчитаны успешно.  \n  
В противном случае \ref ERROR_CODE_GROUP "код ошибки".


Пример расчета корней полинома:

Пример использования функции `bilinear`:

\include polyroots_test.c

Данная программа производит расчет корней полинома
\f[
P(x) = 2 + 2x + x^2
\f]
и выводит рассчитанные корни на печать.
Результат работы программы:

\verbatim
Error code: 0x00000000
r[0] = -1.00000 1.00000 j
r[1] = -1.00000-1.00000 j
\endverbatim

Получили пару комплексно-сопряженных корней полинома.

\author
Бахурин Сергей. 
www.dsplib.org
***************************************************************************** */





/*! ****************************************************************************
\ingroup SPEC_MATH_COMMON_GROUP
\fn int polyval(double* a, int ord, double* x, int n, double* y)

\brief
Расчет вещественного полинома

Функция рассчитывает полином \f$P_N(x)\f$  \f$N-\f$ого порядка для вещественного
аргумента, заданного вектором `x`. 

\f[
  P_N(x) = a_0 + a_1 \cdot x + a_2 \cdot x^2 + a_3 \cdot x^3 + ... a_N \cdot x^N.
\f]

Для расчета используется формула Горнера:

\f[
  P_N(x) = a_0 + x \cdot (a_1 + x \cdot (a_2 + \cdot 
  ( \ldots x \cdot (a_{N-1} + x\cdot a_N) \ldots ))) 
\f]

\param[in]  a
Указатель на вектор вещественных коэффициентов полинома. \n
Размер вектора `[ord+1 x 1]`. \n
Коэффициент `a[0]` соответствует коэффициенту полинома \f$a_0\f$. \n 
\n

\param[in]  ord
Порядок полинома \f$N\f$.  \n 
\n

\param[in]  x
Указатель на вектор аргумента полинома.  \n
Размер вектора `[n x 1]`. \n
Значения полинома будут расчитаны для всех значений аргумента вектора `x`. \n 
\n

\param[in]  n
Размер вектора агрумента полинома.  \n 
\n

\param[out]  y
Указатель на значения полинома для аргумента `x`. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n
\n

\return
`RES_OK` --- полином рассчитан успешно.  \n  
В противном случае \ref ERROR_CODE_GROUP "код ошибки".

\author
Бахурин Сергей. 
www.dsplib.org
***************************************************************************** */




/*! ****************************************************************************
\ingroup SPEC_MATH_COMMON_GROUP
\fn int polyval_cmplx(complex_t* a, int ord, complex_t* x, int n, complex_t* y)

\brief
Расчет комплексного полинома

Функция рассчитывает полином \f$P_N(x)\f$ \f$N\f$-го порядка 
комплексного аргумента, заданного вектором `x`. \n

\f[
P_N(x) = a_0 + a_1 \cdot x + a_2 \cdot x^2 + a_3 \cdot x^3 + ... a_N \cdot x^N.
\f]

Для расчета используется формула Горнера: \n

\f[
  P_N(x) = a_0 + x \cdot (a_1 + x \cdot (a_2 + \cdot 
  ( \ldots x \cdot (a_{N-1} + x\cdot a_N) \ldots ))) 
\f]

\param[in]  a
Указатель на вектор комплексных коэффициентов полинома. \n
Размер вектора `[ord+1 x 1]`. \n
Коэффициент `a[0]` соответствует коэффициенту полинома \f$a_0\f$. \n 
\n


\param[in]  ord
Порядок полинома \f$N\f$.  \n 
\n

\param[in]  x
Указатель на вектор аргумента полинома. \n
Размер вектора `[n x 1]`. \n
Значения полинома будут расчитаны для всех значений аргумента вектора `x`. \n \n

\param[in]  n
Размер вектора агрумента полинома. \n
\n

\param[out]  y
Указатель вектор значения полинома для аргумента `x`. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n 
\n

\return
`RES_OK` --- полином расчитан успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки".

\author
Бахурин Сергей. 
www.dsplib.org
***************************************************************************** */



