Текст подпрограммы и версий
zp39r_c.zip  zp39d_c.zip 
Тексты тестовых примеров
tzp39r_c.zip  tzp39d_c.zip 

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

Назначение

Деление двух полиномов с вещественными коэффициентами.

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

zp39r_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 zp39r_c (integer *np, real *a, integer *l, real *b,
            integer *m, 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.

Версии

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

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

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

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

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

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

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

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


Результаты:

       c__(1) = 1. ,    c__(2) = 0. ,       c__(3) = - 3. ,    c__(4) = 6. ,
       c__(5) = - 3.,   c__(6) = - 12. ,
       k = - 1