Подпрограмма: zf21r_c
Назначение
Вычисление нуля вещественной функции на заданном интервале
методом Ньютона.
Математическое описание
zf21r_c вычисляет нуль вещественной функции
y = F (X) на интервале (A, B) с заданной
точностью EPS методом Ньютона.
И.С.Березин, Н.П.Жидков. Методы вычислений, т.1. Изд-во "Наука",
1966.
Использование
int zf21r_c (S_fp funcd, real *a, real *b, real *eps,
real *root, integer *itmax, integer *ierr)
Параметры
funcd -
|
имя подпрограммы вычисления заданной функции и ее
производной в точке x; оформляется в виде
подпрограммы с тремя формальными параметрами:
|
x -
|
точка, в которой вычисляется значение функции и
ее производной (тип: вещественный);
|
f -
|
вещественная переменная, значение которой
полагается равной значению функции в точке x;
|
df -
|
вещественная переменная, значение которой
полагается равной значению производной функции в точке x
|
a, b -
|
заданные нижняя и верхняя границы интервала, на
котором ведется поиск нуля функции (тип: вещественный);
|
eps -
|
заданная абсолютная погрешность вычисления нуля
функции (тип: вещественный);
|
root -
|
вещественная переменная, значение которой в
результате работы подпрограммы полагается равным
вычисленному нулю функции;
|
itmax -
|
целая переменная, значение которой перед началом
работы подпрограммы должно быть положено равным
максимальному числу итераций, ориентировочно требуемых
для обеспечения сходимости к нулю функции;
|
ierr -
|
целая переменная, служащая для сообщения об ошибках,
обнаруженных в ходе работы подпрограммы; при этом
|
ierr = 65 -
|
когда нуль функции не может быть посчитан
в пределах заданного числа итераций;
|
ierr = 66 -
|
когда произошел выход за границы заданного интервала.
|
Версии
zf21d_c -
|
вычисление нуля вещественной функции на заданном
интервале методом Ньютона в режиме вычислений с
удвоенной точностью. При этом параметры a, b, eps, root
и формальные параметры подпрограммы funcd должны
иметь тип double.
|
Вызываемые подпрограммы
utzf10_c -
|
подпрограмма выдачи диагностических сообщений при
работе подпрограммы zf21r_c
|
utzf11_c -
|
подпрограмма выдачи диагностических сообщений при
работе подпрограммы zf21d_c
|
Замечания по использованию
|
В подпрограммах zf21r_c и zf21d_c имеется внешняя структура
с именем zf21rr_ , содержащая элемент целого типа с именем iter.
Переменная iter полагается
равной количеству итераций, выполненных при вычислении нуля
функции.
|
Пример использования
struct {
int iter;
} zf21rr_;
#define zf21rr_1 zf21rr_
int main(void)
{
/* Local variables */
static int ierr;
extern int zf21r_c(U_fp, float *, float *, float *, float *,
int *, int *);
static float root, a, b;
extern int funcd_c();
static int itmax;
static float eps;
a = -2.57f;
b = 1.57f;
eps = 1e-5f;
itmax = 30;
zf21r_c((U_fp)funcd_c, &a, &b, &eps, &root, &itmax, &ierr);
printf("\n %16.7e \n", root);
printf("\n %5i %5i \n", zf21rr_1.iter, ierr);
return 0;
} /* main */
int funcd_c(float *x, float *f, float *df)
{
/* Builtin functions */
double sin(double), cos(double);
*f = (float)sin(*x);
*df = (float)cos(*x);
return 0;
} /* funcd_c */
Результаты: root = 0.0 , iter = 4 , ierr = 0