Текст подпрограммы и версий
zf17r_c.zip  zf17d_c.zip 
Тексты тестовых примеров
tzf17r_c.zip  tzf17d_c.zip 

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

Назначение

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

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

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

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

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

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

Версии

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

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

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

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

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

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

struct {
    int iter;
} zf17rr_;

#define zf17rr_1 zf17rr_

int main(void)
{
    /* Local variables */
    static int ierr;
    extern int zf17r_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;
    zf17r_c((U_fp)funcd_c, &a, &b, &eps, &root, &itmax, &ierr);

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

        iter = 5
        ierr = 0