Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/zf_htm_c/zf19r_c.htm
Дата изменения: Tue Apr 28 08:30:31 2015 Дата индексирования: Sun Apr 10 02:00:53 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