kopia lustrzana https://github.com/Dsplib/libdspl-2.0
added documentation for polyroots and ones
rodzic
66ab45251c
commit
85c170cdb6
|
@ -1,4 +1,78 @@
|
|||
|
||||
|
||||
/*! ****************************************************************************
|
||||
\ingroup SPEC_MATH_COMMON_GROUP
|
||||
\fn int array_scale_lin(double* x, int n,
|
||||
double xmin, double xmax, double dx,
|
||||
double h, double* y)
|
||||
\brief Линейное растяжение вектора данных `x`
|
||||
Функция производит преобразование значений \f$x(i)\f$, \f$i = 0,1,\ldots n\f$
|
||||
в значения \f$y(i)\f$, в соответствии с формулой:
|
||||
|
||||
\f[
|
||||
y(i) = k_x x(i) + d_x, \qquad k_x =
|
||||
\frac{h}{x_{\textrm{max}} - x_{\textrm{min}}}.
|
||||
\f]
|
||||
|
||||
Таким образом, все значения входного вектора `x` в диапазоне от
|
||||
\f$x_{\textrm{min}}\f$ до \f$x_{\textrm{max}}\f$, линейно растягиваются в
|
||||
значения вектора `y` в диапазоне от \f$d_x\f$ до \f$h + d_x\f$.
|
||||
Заметим, что \f$d_x\f$ задает линейное смещение значений вектора `y`.
|
||||
|
||||
Данная функция удобна для перевода величин разных размерностей, в частности,
|
||||
для переноса значений вектора `x` на график высоты `h`, где высота может
|
||||
быть задана в количестве пикселей, в сантиметрах и т.д.
|
||||
|
||||
\param[in] x
|
||||
Указатель на вектор входных значений `x`. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
\n
|
||||
|
||||
\param[in] n
|
||||
Размер вектора `x`. \n
|
||||
\n
|
||||
|
||||
\param[in] xmin
|
||||
Нижняя граница диапазона трансформации. \n
|
||||
\n
|
||||
|
||||
\param[in] xmax
|
||||
Верхняя граница диапазона трансформации. \n
|
||||
Значение `xmax` должно быть строго больше значения `xmin`. \n
|
||||
\n
|
||||
|
||||
\param[in] dx
|
||||
Смещение после трансформации. \n
|
||||
Данный параметр должен иметь размерность выходного вектора `y`. \n
|
||||
\n
|
||||
|
||||
\param[in] h
|
||||
Диапазон значений вектора `y` после трансформации от `dx` до `h+dx`. \n
|
||||
\n
|
||||
|
||||
\param[out] y
|
||||
Указатель на вектора данных после трансформации. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n
|
||||
\note
|
||||
Указатель `y` может совпадать с `x`, в этом случае,
|
||||
данные вектора `x` будут перезаписаны линейно измененными в соответствии
|
||||
с формулой выше. \n
|
||||
\n
|
||||
|
||||
\return
|
||||
`RES_OK` если функция выполнена успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
|
||||
|
||||
\author
|
||||
Бахурин Сергей
|
||||
www.dsplib.org
|
||||
**************************************************************************** */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*! ****************************************************************************
|
||||
\ingroup SPEC_MATH_COMMON_GROUP
|
||||
\fn int concat(void* a, size_t na, void* b, size_t nb, void* c)
|
||||
|
@ -329,71 +403,39 @@ www.dsplib.org
|
|||
|
||||
|
||||
|
||||
|
||||
/*! ****************************************************************************
|
||||
\ingroup SPEC_MATH_COMMON_GROUP
|
||||
\fn int array_scale_lin(double* x, int n,
|
||||
double xmin, double xmax, double dx,
|
||||
double h, double* y)
|
||||
\brief Линейное растяжение вектора данных `x`
|
||||
Функция производит преобразование значений \f$x(i)\f$, \f$i = 0,1,\ldots n\f$
|
||||
в значения \f$y(i)\f$, в соответствии с формулой:
|
||||
\fn int ones(double* x, int n)
|
||||
\brief Функция заполнения вещественного массива единицами
|
||||
|
||||
\f[
|
||||
y(i) = k_x x(i) + d_x, \qquad k_x =
|
||||
\frac{h}{x_{\textrm{max}} - x_{\textrm{min}}}.
|
||||
\f]
|
||||
|
||||
Таким образом, все значения входного вектора `x` в диапазоне от
|
||||
\f$x_{\textrm{min}}\f$ до \f$x_{\textrm{max}}\f$, линейно растягиваются в
|
||||
значения вектора `y` в диапазоне от \f$d_x\f$ до \f$h + d_x\f$.
|
||||
Заметим, что \f$d_x\f$ задает линейное смещение значений вектора `y`.
|
||||
|
||||
Данная функция удобна для перевода величин разных размерностей, в частности,
|
||||
для переноса значений вектора `x` на график высоты `h`, где высота может
|
||||
быть задана в количестве пикселей, в сантиметрах и т.д.
|
||||
|
||||
\param[in] x
|
||||
Указатель на вектор входных значений `x`. \n
|
||||
\param[in, out] x
|
||||
Указатель на вещественный вектор `x`. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Значения данного вектора будут установлены в единицу. \n
|
||||
\n
|
||||
|
||||
\param[in] n
|
||||
Размер вектора `x`. \n
|
||||
\n
|
||||
|
||||
\param[in] xmin
|
||||
Нижняя граница диапазона трансформации. \n
|
||||
\n
|
||||
|
||||
\param[in] xmax
|
||||
Верхняя граница диапазона трансформации. \n
|
||||
Значение `xmax` должно быть строго больше значения `xmin`. \n
|
||||
\n
|
||||
|
||||
\param[in] dx
|
||||
Смещение после трансформации. \n
|
||||
Данный параметр должен иметь размерность выходного вектора `y`. \n
|
||||
\n
|
||||
|
||||
\param[in] h
|
||||
Диапазон значений вектора `y` после трансформации от `dx` до `h+dx`. \n
|
||||
\n
|
||||
|
||||
\param[out] y
|
||||
Указатель на вектора данных после трансформации. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n
|
||||
\note
|
||||
Указатель `y` может совпадать с `x`, в этом случае,
|
||||
данные вектора `x` будут перезаписаны линейно измененными в соответствии
|
||||
с формулой выше. \n
|
||||
\n
|
||||
|
||||
\return
|
||||
`RES_OK` если функция выполнена успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
|
||||
|
||||
Пример:
|
||||
\code{.cpp}
|
||||
double y[5] = {0};
|
||||
int i;
|
||||
ones(y, 5);
|
||||
for(i = 0; i < 5; i++)
|
||||
printf("%6.1f% ", y[i]);
|
||||
\endcode
|
||||
\n
|
||||
Результат выполнения:
|
||||
\verbatim
|
||||
1.0 1.0 1.0 1.0 1.0
|
||||
\endverbatim
|
||||
|
||||
\author
|
||||
Бахурин Сергей
|
||||
www.dsplib.org
|
||||
|
@ -402,7 +444,6 @@ www.dsplib.org
|
|||
|
||||
|
||||
|
||||
|
||||
/*! ****************************************************************************
|
||||
\ingroup SPEC_MATH_COMMON_GROUP
|
||||
\fn int verif(double* x, double* y, size_t n, double eps, double* err)
|
||||
|
|
|
@ -1,3 +1,80 @@
|
|||
/*! ****************************************************************************
|
||||
\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
|
||||
|
|
|
@ -520,7 +520,7 @@ int DSPL_API logspace(double x0, double x1, int n, int type, double* x)
|
|||
|
||||
|
||||
/*******************************************************************************
|
||||
Oned double array
|
||||
Ones double array
|
||||
*******************************************************************************/
|
||||
int DSPL_API ones(double* x, int n)
|
||||
{
|
||||
|
|
|
@ -21,7 +21,7 @@ int main(int argc, char* argv[])
|
|||
|
||||
/* roots calculation */
|
||||
err = polyroots(a, N, r, &info);
|
||||
printf("Error code: %.8x\n");
|
||||
printf("Error code: 0x%.8x\n", err);
|
||||
|
||||
/* print roots */
|
||||
for(n = 0; n < N; n++)
|
||||
|
|
Ładowanie…
Reference in New Issue