Текст подпрограммы и версий
zf11r_c.zip  zf11d_c.zip 
Тексты тестовых примеров
tzf11r_c.zip  tzf11d_c.zip 

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

Назначение

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

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

zf11r_c вычисляет нуль вещественной функции Y = F (X), меняющей знак на заданном интервале (A, B), т.е.   F (A) * F (B) < 0, используя метод секущих.

И.С.Березин, Н.П.Жидков, Методы вычислений, т.2, M., 1962.

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

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

Параметры

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

Версии

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

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

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

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

 

Пусть  xi - 1 и  xi являются двумя последовательными приближениями к нулю функции  F (x). Тогда  xi принимается за искомый нуль, если выполнен один из двух критериев сходимости

       | F(xi) | ≤ | eps |   или   | xi-1 - xi | < | xi | * 10 (- ndig ) . 
При обращении к подпрограмме может быть задан только первый критерий сходимости (тогда ndig задается равным 0), либо только второй критерий (тогда eps задается равным 0), либо оба критерия одновременно.

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

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

    eps = 1e-5f;
    ndig = 6;
    a = -3.3f;
    b = 4.6f;
    itmax = 20;
    zf11r_c((R_fp)f_c, &a, &b, &eps, &ndig, &itmax, &root, &ierr);

    printf("\n %16.7e %16.7e %16.7e \n", a, b, eps);
    printf("\n %5i %5i \n", ndig, itmax);
    printf("\n %5i \n", ierr);
    printf("\n %16.7e \n", root);
    return 0;
} /* main */

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

    ret_val = *x * *x + *x * 2.f - 6.f;
    return ret_val;
} /* f_c */


Результаты:    root  = 1.645750595 ,  itmax  =  17 ,   ierr  =  0