|
Текст подпрограммы и версий zf15r_c.zip zf15d_c.zip |
Тексты тестовых примеров tzf15r_c.zip tzf15d_c.zip |
Вычисление нуля вещественной функции на заданном интервале методом бисекции с линейной интерполяцией.
zf15r_c вычисляет нуль вещественной функции Y = F (X). Подпрограмма использует метод бисекции с линейной интерполяцией.
И.С.Березин, Н.П.Жидков, Методы вычислений, т.1, "Hаука", 1966.
int zf15r_c (R_fp f, real *a, real *b, real *eps, real *root,
integer *itmax, integer *ierr)
Параметры
| f - | имя вещественной подпрограммы - функции вычисления F (x) в любой точке интервала (a, b); |
| a, b - | заданная нижняя и верхняя границы интервала, на котоpом F (x) меняет знак (тип: вещественный); |
| eps - | заданная абсолютная погрешность вычисления нуля функции (тип: вещественный); |
| root - | вещественная переменная, значение которой в pезультате работы подпрограммы полагается равным вычисленному нулю функции F (x); |
| itmax - | целая переменная, значение которой перед началом работы подпрограммы должно быть положено равным максимальному числу итераций, ориентировочно требуемых для обеспечения сходимости; ее значение в результате работы подпрограммы полагается равным действительному числу итераций, потребовавшихся для обеспечения сходимости; |
| ierr - | целая переменная, служащая для сообщения об ошибках обнаруженных в ходе работы подпрограммы; при этом: |
| ierr=65 - | когда нуль функции не может быть посчитан в пределах заданного числа итераций; |
| ierr=66 - | когда функция не меняет знака на заданном интервале. |
Версии
| zf15d_c - | вычисление нуля вещественной функции на заданном интервале методом бисекции с линейной интерполяцией; в режиме вычислений с повышенной точностью. При этом параметры a, b, eps и root должны иметь тип double, а подпрограмма - функция вычисления F (x) должна быть оформлена как double. |
Вызываемые подпрограммы
| utzf10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы zf15r_c. |
| utzf11_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы zf15d_c. |
Замечания по использованию: нет
int main(void)
{
/* Local variables */
static int ierr;
extern int zf15r_c(R_fp, float *, float *, float *, float *,
int *, int *);
static float root, a, b;
extern float f_c();
static int itmax;
static float eps;
itmax = 20;
a = -3.3f;
b = 4.6f;
eps = 1e-5f;
zf15r_c((R_fp)f_c, &a, &b, &eps, &root, &itmax, &ierr);
printf("\n %20.7f %20.7f %20.7f \n", a, b, eps);
printf("\n %5i %5i \n", itmax, ierr);
printf("\n %20.7f \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.64575132 , itmax = 8 , ierr = 0