Текст подпрограммы и версий
zf21r_c.zip  zf21d_c.zip 
Тексты тестовых примеров
tzf21r_c.zip  tzf21d_c.zip 

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

Назначение

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

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

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

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

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

    int zf21r_c (S_fp funcd, real *a, real *b, real *eps,
            real *root, integer *itmax, integer *ierr)

Параметры

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

Версии

zf21d_c - вычисление нуля вещественной функции на заданном интервале методом Ньютона в режиме вычислений с удвоенной точностью. При этом параметры a, b, eps, root и формальные параметры подпрограммы funcd должны иметь тип double.

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

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

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

  В подпрограммах zf21r_c и zf21d_c имеется внешняя структура с именем zf21rr_ , содержащая элемент целого типа с именем iter. Переменная iter полагается равной количеству итераций, выполненных при вычислении нуля функции.

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

struct {
    int iter;
} zf21rr_;

#define zf21rr_1 zf21rr_

int main(void)
{
    /* Local variables */
    static int ierr;
    extern int zf21r_c(U_fp, float *, float *, float *, float *,
                       int *, int *);
    static float root, a, b;
    extern int funcd_c();
    static int itmax;
    static float eps;

    a = -2.57f;
    b = 1.57f;
    eps = 1e-5f;
    itmax = 30;
    zf21r_c((U_fp)funcd_c, &a, &b, &eps, &root, &itmax, &ierr);

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

int funcd_c(float *x, float *f, float *df)
{
    /* Builtin functions */
    double sin(double), cos(double);

    *f = (float)sin(*x);
    *df = (float)cos(*x);
    return 0;
} /* funcd_c */


 Результаты:  root  =  0.0 ,   iter  =  4 ,   ierr  =  0