Текст подпрограммы и версий
zp38r_c.zip  zp38d_c.zip 
Тексты тестовых примеров
tzp38r_c.zip  tzp38d_c.zip 

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

Назначение

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

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

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

        C(X)  =  XK*( C(1) + C(2)*X + ... + C(M)*X(M - 1) + ... )  , 

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

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

        B(X)  =   B(1) + B(2)*X + B(3)*X2 + ... + B(L + 1)*XL  , 

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

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

    int zp38r_c (integer *np, real *a, integer *m, real *b,
            integer *l, real *c, integer *k)

Параметры

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

Версии

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

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

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

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

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

    /* Local variables */
    extern int zp38r_c(int *, float *, int *, float *, int *,
                       float *, int *);
    static float c__[5];
    static int k, l, m, np, i__;

    np = 2;
    m = 4;
    l = 2;
    zp38r_c(&np, a, &l, b, &m, c__, &k);

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


Результаты:

       c__(1) = 24. ,    c__(2) = - 50. ,    c__(3) = 35. ,
       c__(4) = - 10. ,  c__(5) = 1. ,
       k = 0