Текст подпрограммы и версий
zp33r_c.zip  zp33d_c.zip 
Тексты тестовых примеров
tzp33r_c.zip  tzp33d_c.zip 

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

Назначение

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

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

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

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

обратного заданному полиному степени NР

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

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

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

    int zp33r_c (integer *np, real *a, integer *m, real *b,
            integer *k)

Параметры

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

Версии

zp33d_c - вычисление с повышенной точностью m первых коэффициентов полинома, который является обратным заданному полиному с вещественными коэффициентами. При этом векторы 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 zp33r_c(int *, float *, int *, float *, int *);
    static float b[6];
    static int k, m, np, i__;

    np = 4;
    m = 6;
    zp33r_c(&np, a, &m, b, &k);

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


Результаты:

       b(1) = 0.041667 ,   b(2) = 0.0868056 ,   b(3) = 0.120081 ,
       b(4) = 0.140938 ,   b(5) = 0.152937 ,     b(6) = 0.159499