Текст подпрограммы и версий 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