Подпрограмма: 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