Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/zf_htm_c/zf18r_c.htm
Дата изменения: Tue Apr 28 08:30:29 2015 Дата индексирования: Sun Apr 10 02:00:49 2016 Кодировка: Windows-1251 |
Текст подпрограммы и версий zf18r_c.zip zf18d_c.zip |
Тексты тестовых примеров tzf18r_c.zip tzf18d_c.zip |
Выделение интервала, на котором вещественная функция меняет знак.
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