Подпрограмма: zf18r_c
Назначение
Выделение интервала, на котором вещественная функция меняет знак.
Математическое описание
zf18r_c определяет границы интервала (A, B), на котором вещественная
функция y = F (x) меняет знак. На входе в
подпрограмму задаются предположительные границы интервала (A, B),
длина которого увеличивается в FACT раз до тех пор, пока не будет
получен интервал (A, B), на котором F (x) меняет знак,
либо пока не будет превзойдено заданное количество итераций.
Использование
int zf18r_c (R_fp f, real *a, real *b, real *fact, integer *n,
integer *ierr)
Параметры
f -
|
имя вещественной подпрограммы - функции вычисления
F (x);
|
a, b -
|
вещественные переменные, содержащие на входе в
подпрограмму предположительные границы интервала, а на
выходе - найденные границы интервала, на котором F (x)
меняет знак;
|
fact -
|
множитель, определяющий, во сколько раз должен
увеличиваться текущий интервал (a, b) на каждом шаге
итерации, fact > 1 (тип: вещественный);
|
n -
|
заданное максимальное количество увеличений
первоначального интервала (a, b) (тип: вещественный);
|
ierr -
|
целая переменная, служащая для сообщения об ошибках,
обнаруженных в ходе работы подпрограммы; при этом
|
ierr=65 -
|
когда границы первоначального интервала совпадают;
|
ierr=66 -
|
когда интервал, на котором F (x) меняет
знак, не найден за заданное количество итераций n .
|
Версии
zf18d_c -
|
определение интервала, на котором вещественная
функция меняет знак, в режиме вычислений с удвоенной
точностью. При этом параметры a, b и fact должны
иметь тип double, а подпрограмма - функция
вычисления F (x) должна быть оформлена как
double.
|
Вызываемые подпрограммы
utzf10_c -
|
подпрограмма выдачи диагностических сообщений при
работе подпрограммы zf18r_c
|
utzf11_c -
|
подпрограмма выдачи диагностических сообщений при
работе подпрограммы zf18d_c
|
Замечания по использованию
|
В подпрограммах zf18r_c и zf18d_c имеется внешняя структура
с именем zf18rr_ , содержащая элемент целого типа nreal.
Переменная nreal полагается равной
выполненному количеству увеличений первоначального интервала
(a, b) .
|
Пример использования
struct {
int nreal;
} zf18rr_;
#define zf18rr_1 zf18rr_
int main(void)
{
/* Local variables */
static float fact;
static int ierr;
extern int zf18r_c(R_fp, float *, float *, float *, int *, int *);
static float a, b;
extern float f_c();
static int n;
fact = 1.1f;
n = 50;
a = 1.f;
b = 1.1f;
zf18r_c((R_fp)f_c, &a, &b, &fact, &n, &ierr);
printf("\n %16.7e %16.7e \n", a, b);
printf("\n %5i %5i \n", zf18rr_1.nreal, 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 */
Результаты:
a = - 0.8448105
b = 1.1
nreal = 5
ierr = 0