Текст подпрограммы и версий
zf20r_c.zip  zf20d_c.zip 
Тексты тестовых примеров
tzf20r_c.zip  tzf20d_c.zip 

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

Назначение

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

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

zf20r_c вычисляет нуль вещественной функции  F (x) на интервале (A, B), на котором  F (x) меняет знак, с заданной точностью EPS методом хорд.

И.С.Березин, Н.П.Жидков. Методы вычислений, т.1. Изд - во "Наука", 1966.

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

    int zf20r_c (R_fp f, real *a, real *b, real *eps, real *root,
            integer *itmax, integer *ierr)

Параметры

f - имя вещественной подпрограммы - функции вычисления  F (x) в любой точке интервала (a, b);
a, b - заданные нижняя и верхняя границы интервала, на котором  F (x) меняет знак (тип: вещественный);
eps - заданная абсолютная погрешность вычисления нуля функции (тип: вещественный);
root - вещественная переменная, значение которой в результате работы подпрограммы полагается равным вычисленному нулю функции  F (x);
itmax - целая переменная, значение которой перед началом работы подпрограммы должно быть положено равным максимальному числу операций, ориентировочно требуемых для обеспечения сходимости к нулю функции;
ierr - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом
ierr=65 - когда нуль функции не может быть посчитан в пределах заданного числа итераций;
ierr=66 - когда функция не меняет знака на заданном интервале.

Версии

zf20d_c - вычисление нуля вещественной функции на заданном интервале методом хорд в режиме вычислений с удвоенной точностью. При этом параметры  a, b, eps и root должны иметь тип double, а подпрограмма - функция вычисления  F (x) должна быть оформлена как double.

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

utzf10_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы zf20r_c
utzf11_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы zf20d_c

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

  В подпрограммах zf20r_c и zf20d_c имеется внешняя структура с именем zf20rr_ , содержащая элемент целого типа с именем iter. Переменная iter полагается равной количеству итераций, выполненных при вычислении нуля функции  F (x)

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

struct {
    integer iter;
} zf20rr_;

#define zf20rr_1 zf20rr_

int main(void)
{
    /* Local variables */
    static int ierr;
    extern int zf20r_c(R_fp, float *, float *, float *, float *,
                       int *, int *);
    static float root, a, b;
    extern float f_c();
    static int itmax;
    static float eps;

    a = -2.57f;
    b = 1.57f;
    eps = 1e-5f;
    itmax = 30;
    zf20r_c((R_fp)f_c, &a, &b, &eps, &root, &itmax, &ierr);

    printf("\n %16.7e \n", root);
    printf("\n %5i %5i \n", zf20rr_1.iter, ierr);
    return 0;
} /* main */

float f_c(float *x)
{
    /* System generated locals */
    float ret_val;

    /* Builtin functions */
    double sin(double);

    ret_val = (float)sin(*x);
    return ret_val;
} /* f_c */


Результаты:

       root = - 0.968786e - 16   

       iter = 7
       ierr = 0