|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/zf_htm_c/zf19r_c.htm
Дата изменения: Tue Apr 28 08:30:31 2015 Дата индексирования: Sun Apr 10 02:40:16 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий zf19r_c.zip zf19d_c.zip |
Тексты тестовых примеров tzf19r_c.zip tzf19d_c.zip |
Выделение заданного числа интервалов, на которых вещественная функция меняет знак.
zf19r_c внутри заданного интервала (A, B) выделяет NB интервалов, на которых вещественная функция y = F (x) меняет знаки. Интервал (A, B) делится на N частей, после чего на границах каждого из полученных интервалов проверяются знаки F (x). Границы интервалов, на которых функция меняет знаки, запоминаются в одномерных массивах A1 и B1, а их число помещается в переменную NROOT.
int zf19r_c (R_fp f, real *a, real *b, integer *n, real *a1,
real *b1, integer *nb, integer *nroot)
Параметры
| f - | имя вещественной подпрограммы - функции вычисления F (x); |
| a, b - | границы интервала, внутри которого выделяются искомые интервалы (тип: вещественный); |
| n - | заданное количество разбиений исходного интервала (a, b) (тип: целый); |
| a1, b1 - | вещественные вектора длины nb, в которых помещаются левые и правые границы выделенных интервалов, соответственно; |
| nb - | заданное количество искомых интервалов (тип: целый); |
| nroot - | целая переменная, значение которой полагается равным количеству выделенных интервалов. |
Версии
| zf19d_c - | выделение заданного числа интервалов, на которых вещественная функция меняет знак, в режиме вычислений с удвоенной точностью. При этом параметры a, b, a1 и b1 должны иметь тип double, а подпрограмма - функция вычисления F (x) должна быть оформлена как double. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void)
{
/* System generated locals */
int i__1;
/* Local variables */
extern int zf19r_c(R_fp, float *, float *, int *, float *, float *,
int *, int *);
static float a, b;
extern float f_c();
static int i__, n;
static float a1[50], b1[50];
static int nroot, nb;
a = -6.2999999999999998f;
b = 6.2999999999999998f;
n = 100;
nb = 50;
zf19r_c((R_fp)f_c, &a, &b, &n, a1, b1, &nb, &nroot);
i__1 = nroot;
for (i__ = 1; i__ <= i__1; ++i__) {
printf("\n %13.3e \n", a1[i__ - 1]);
}
i__1 = nroot;
for (i__ = 1; i__ <= i__1; ++i__) {
printf("\n %13.3e \n", b1[i__ - 1]);
}
printf("\n %5i \n", nroot);
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 */
Результаты:
a1 = ( - 6.3, - 3.15, - 0.235*10 - 5, 3.02, 6.17 )
b1 = ( - 6.17, - 3.02, 0.126, 3.15, 6.3 )
nroot = 5