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