Текст подпрограммы и версий
zp40r_c.zip  zp40d_c.zip 
Тексты тестовых примеров
tzp40r_c.zip  tzp40d_c.zip 

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

Назначение

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

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

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

       B(X)  =  B(1) + B(2)*Y + B(3)*Y2 + ... + B(NP + 1)*YNP , 

получающегося из данного полинома с вещественными коэффициентами

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

линейным изменением аргумента Y = u * Х + v.

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

    int zp40r_c (integer *np, real *a, real *b, real *u, real *v,
            real *rab)

Параметры

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

Версии

zp40d_c - вычисление коэффициентов полинома, получающегося из данного полинома с вещественными коэффициентами линейным изменением аргумента с повышенной точностью. При этом векторы a, b, rab, а также u и v должны иметь тип double.

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

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

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

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

int main(void)
{
    /* Initialized data */
    static float a[3] = { 1.f,2.f,3.f };

    /* Local variables */
    extern int zp40r_c(int *, float *, float *, float *, float *, float *);
    static float b[3], u, v;
    static int np;
    static float rab[4];

    np = 2;
    u = 2.f;
    v = 3.f;
    zp40r_c(&np, a, b, &u, &v, rab);

    printf("\n %5i \n", np);
    printf("\n %15.3f %15.3f \n", u, v);
    printf("\n %20.3f %20.3f %20.3f \n", a[0], a[1], a[2]);
    printf("\n %20.3f %20.3f %20.3f \n", b[0], b[1], b[2]);
    printf("\n %18.3f %18.3f %18.3f %18.3f \n",
           rab[0], rab[1], rab[2], rab[3]);
    return 0;
} /* main */


Результаты:    b(1) = 4.75 ,   b(2) = - 3.5 ,   b(3) = 0.75