|
Текст подпрограммы и версий rcr2r_c.zip , rcr2d_c.zip |
Тексты тестовых примеров trcr2r_c.zip , trcr2d_c.zip |
Суммирование рядов при помощи преобразования Эйлера
Подпрограмма rcr2r_c находит сумму ряда по I от нуля до бесконечности, I - й член которого вычисляется задаваемой пользователем подпрограммой - функцией fterm (I). Суммирование ряда осуществляется до тех пор, пока NTERM раз подряд абсолютные значения членов ряда не будут меньше заданного числа EPS.
Подпрограмма rcr2r_c, использующая метод Эйлера для преобразования рядов, может быть использована для суммирования медленно сходящихся или расходящихся рядов
int rcr2r_c (real *sum, R_fp fterm, integer *nterm, real *eps)
Параметры
| sum - | вещественная переменная, значение которой полагается равным вычисленной сумме ряда; |
| fterm - |
имя вещественной подпрограммы - функции вычисления
I - ого члена ряда; ее заголовок имеет вид:
float fterm(int *i__) где i__ - номер вычисляемого члена ряда; |
| nterm - | количество требуемых подряд идущих членов ряда, таких, что каждый из них по абсолютной величине меньше eps (тип: целый); |
| eps - | заданное число, определяющее критерий останова при суммировании ряда |
Версии
| rcr2d_c - | суммирование рядов при помощи преобразования Эйлера в режиме удвоенной точности; при этом параметры sum и eps должны иметь тип double, а подпрограмма - функция fterm должна быть описана как double |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void)
{
/* Local variables */
extern int rcr2r_c(float *, R_fp, int *, float *);
extern float fterm_c();
static int nterm;
static float eps, sum;
nterm = 4;
eps = 1e-5f;
rcr2r_c(&sum, (R_fp)fterm_c, &nterm, &eps);
printf("\n %16.7e \n", sum);
return 0;
} /* main */
float fterm_c(int *i__)
{
/* System generated locals */
float ret_val;
/* Builtin functions */
double pow_ri(float *, int *);
ret_val = (float)pow_ri(&c_b6, i__);
return ret_val;
} /* fterm_c */
Результат: sum = 1.999999