Текст подпрограммы и версий
zp37r_c.zip  zp37d_c.zip 
Тексты тестовых примеров
tzp37r_c.zip  tzp37d_c.zip 

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

Назначение

Возведение в степень полинома с вещественными коэффициентами.

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

zp37r_c вычисляет М первых коэффициентов полинома

       B(X)  =  XS*(B(1) + B(2)*X + ... + B(M)*X(M - 1) + ...)  , 

такого, что  В (Х) = (А (Х))R, где  А (Х) - заданный полином, степени NР

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

у которого коэффициенты  А ( I ),  I = 1, 2, 3, ..., NР + 1 являются вещественными. Здесь S = К * R, где К - число первых коэффициентов полинома  А (Х), равных 0.

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

    int zp37r_c (integer *np, real *a, integer *m, real *b,
            real *r, real *s)

Параметры

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

Версии

zp37d_c - возведение в степень полинома с вещественными коэффициентами с повышенной точностью. При этом векторы a и b должны иметь тип double.

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

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

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

int main(void)
{
    /* Initialized data */
    static float a[5] = { 24.f,-50.f,35.f,-10.f,1.f };

    /* Local variables */
    extern int zp37r_c(int *, float *, int *, float *, float *, float *);
    static float b[4];
    static int m;
    static float r__, s;
    static int np, i__;

    r__ = 2.f;
    np = 4;
    m = 4;
    zp37r_c(&np, a, &m, b, &r__, &s);

    printf("\n %5i %5i \n", np, m);
    printf("\n %16.7e %16.7e \n", r__, s);
    for (i__ = 1; i__ <= 5; ++i__) {
         printf("\n %16.7e \n", a[i__ - 1]);
    }
    for (i__ = 1; i__ <= 4; ++i__) {
         printf("\n   %16.7e \n", b[i__ - 1]);
    }
    return 0;
} /* main */


Результаты:

       b(1) = 576. ,    b(2) = - 2400. ,   b(3) = 4180. ,  b(4)  =  - 3980. ,
       s  =  0.