Текст подпрограммы и версий
zp32r_c.zip  zp32d_c.zip 
Тексты тестовых примеров
tzp32r_c.zip  tzp32d_c.zip 

Подпрограмма:  zp32r_c

Назначение

Вычисление коэффициентов полинома, проходящего через заданные точки плоскости.

Математическое описание

zp32r_c вычисляет коэффициенты полинома степени NР

        A(1) + A(2)*X + A(3)*X2 + ... + A(NP + 1)*XNP  , 

проходящего через заданные точки плоскости (Х ( I ), Y ( I )),  I = 1, 2, 3, ..., NР + 1.

Другими словами, коэффициенты полинома вычисляются по заданным соотношениям:

                    NP+1 
       Y( I ) =    ∑    A( J )*X( I )(J - 1)  ,    I = 1, 2, 3, ..., NP+1
                      J=1 

Использование

    int zp32r_c (integer *np, real *x, real *y, real *a,
            real *rab1, real *rab2)

Параметры

np - заданная степень полинома (тип: целый);
x, y - вещественные векторы длины np + 1, содержащие координаты заданных точек плоскости;
a - вещественный вектор длины np + 1, содержащий вычисленные коэффициенты полинома в порядке возрастания степеней;
  rab1 -
  rab2  
вещественные векторы длины np + 1, используемые в подпрограмме как рабочие.

Версии

zp32d_c - вычисление коэффициентов полинома, проходящего через заданные точки плоскости, с повышенной точностью. Параметры x, y, a, rab1, rab2 имеют тип double.

Вызываемые подпрограммы

zp30r_c - вычисление значения полинома с вещественными коэффициентами от заданного вещественного аргумента. Используется в подпрограмме zp32r_c.
zp31r_c - вычисление коэффициентов полинома по заданным его вещественным корням. Используется в подпрограмме zp32r_c.
zp30d_c - вычисление значения полинома с вещественными коэффициентами от заданного вещественного аргумента с повышенной точностью. Используется в подпрограмме zp32d_c.
zp31d_c - вычисление коэффициентов полинома по заданным его вещественным корням с повышенной точностью. Используется в подпрограмме zp32d_c.

Замечания по использованию: нет

Пример использования

int main(void)
{
    /* Initialized data */
    static float x[5] = { 0.f,1.f,2.f,3.f,4.f };
    static float y[5] = { 24.f,0.f,0.f,0.f,0.f };

    /* Local variables */
    extern int zp32r_c(int *, float *, float *, float *, float *, float *);
    static float a[5];
    static int np, i__;
    static float rab1[5], rab2[5];

    np = 4;
    zp32r_c(&np, x, y, a, rab1, rab2);

    printf("\n %5i \n", np);
    for (i__ = 1; i__ <= 5; ++i__) {
         printf("\n %16.7e \n", x[i__ - 1]);
    }
    for (i__ = 1; i__ <= 5; ++i__) {
         printf("\n   %16.7e \n", y[i__ - 1]);
    }
    for (i__ = 1; i__ <= 5; ++i__) {
         printf("\n %16.7e \n", a[i__ - 1]);
    }
    for (i__ = 1; i__ <= 5; ++i__) {
         printf("\n   %16.7e \n", rab1[i__ - 1]);
    }
    for (i__ = 1; i__ <= 5; ++i__) {
         printf("\n %16.7e \n", rab2[i__ - 1]);
    }
    return 0;
} /* main */


Результаты:

       a(1) = 24.0 ,    a(2) = - 50.0 ,   a(3) = 35.0 ,
       a(4) = - 10.0 ,  a(5) = 1.0