Текст подпрограммы и версий
zf16r_c.zip  zf16d_c.zip 
Тексты тестовых примеров
tzf16r_c.zip  tzf16d_c.zip 

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

Назначение

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

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

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

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

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

    int zf16r_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 - когда функция не меняет знака на заданном интервале.

Версии

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

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

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

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

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

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

struct {
    int iter;
} zf16rr_;

#define zf16rr_1 zf16rr_

int main(void)
{
    /* Local variables */
    static int ierr;
    extern int zf16r_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;
    zf16r_c((R_fp)f_c, &a, &b, &eps, &root, &itmax, &ierr);

    printf("\n %16.7e \n", root);
    printf("\n %5i %5i \n", zf16rr_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.000006386669 

        iter = 19
        ierr = 0