Текст подпрограммы и версий
zp34r_c.zip  zp34d_c.zip 
Тексты тестовых примеров
tzp34r_c.zip  tzp34d_c.zip 

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

Назначение

Вычисление натурального логарифма от полинома с вещественными коэффициентами.

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

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

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

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

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

у которого коэффициенты  А ( I ),  I = 1, 2, 3, ..., NР + 1 являются вещественными и  А (1) > 0.

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

    int zp34r_c (integer *np, real *a, integer *m, real *b,
            integer *ierr)

Параметры

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

Версии

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

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

utzp10_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы zp34r_c.
utzp11_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы zp34d_c.

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

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

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

    /* Local variables */
    static int ierr;
    extern int zp34r_c(int *, float *, int *, float *, int *);
    static float b[6];
    static int m, np, i__;

    np = 4;
    m = 6;
    printf("\n %5i \n", np);
    for (i__ = 1; i__ <= 5; ++i__) {
         printf("\n %16.7e \n", a[i__ - 1]);
    }
    printf("\n %5i \n", m);
    zp34r_c(&np, a, &m, b, &ierr);

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


Результаты:

       b(1) = 3.178053 ,    b(2) = - 2.083333 ,  b(3) = - 0.711556 ,
       b(4) = - 0.392554 ,  b(5) = - 0.269688 ,  b(6) = - 0.207268 , 

       ierr = 0