Подпрограмма: zf17r_c
Назначение
Вычисление нуля вещественной функции (трансцендентного уравнения)
на заданном интервале комбинированным методом Ньютона и дихотомии.
Математическое описание
zf17r_c вычисляет нуль вещественной функции y = F (x)
на интервале (A, B), на котором F (x) меняет знак, с
заданной точностью EPS комбинированным методом Ньютона и дихотомии.
И.С.Березин, Н.П.Жидков. Методы вычислений, т.1. Изд - во
"Наука", 1966.
Использование
int zf17r_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 -
|
когда функция не меняет знака на заданном интервале.
|
Версии
zf17d_c -
|
вычисление нуля вещественной функции на заданном
интервале комбинированным методом Ньютона и
дихотомии в режиме вычислений с удвоенной точностью. При
этом параметры a, b, eps, root и формальные параметры
подпрограммы funcd должны иметь тип double.
|
Вызываемые подпрограммы
utzf10_c -
|
подпрограмма выдачи диагностических сообщений при
работе подпрограммы zf17r_c
|
utzf11_c -
|
подпрограмма выдачи диагностических сообщений при
работе подпрограммы zf17d_c
|
Замечания по использованию
|
В подпрограммах zf17r_c и zf17d_c имеется внешняя структура
с именем zf17rr_ , содержащая элемент целого типа iter. Переменная iter полагается
равной количеству итераций, выполненных при вычислении нуля функции.
|
Пример использования
struct {
int iter;
} zf17rr_;
#define zf17rr_1 zf17rr_
int main(void)
{
/* Local variables */
static int ierr;
extern int zf17r_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;
zf17r_c((U_fp)funcd_c, &a, &b, &eps, &root, &itmax, &ierr);
printf("\n %16.7e \n", root);
printf("\n %5i %5i \n", zf17rr_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.000008279458
iter = 5
ierr = 0