|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/r_htm_c/rcr1r_c.htm
Дата изменения: Tue Oct 28 17:50:14 2014 Дата индексирования: Sun Apr 10 00:59:02 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий rcr1r_c.zip , rcr1d_c.zip |
Тексты тестовых примеров trcr1r_c.zip , trcr1d_c.zip |
Суммирование знакопеременных рядов при помощи преобразования Эйлера
Подпрограмма rcr1r_c накапливает частичную сумму SUM знакопеременного ряда по заданному текущему члену TERM ряда и его номеру JTERM. При первом обращении к подпрограмме на вход подается первый член ряда (JTERM = 1), при втором обращении на вход подается второй член ряда (JTERM = 2) со знаком, противоположным знаку первого члена, и т.д. При суммировании используется преобразование Эйлера
Справочник по специальным функциям. Под ред. Абрамовица М. и Стигана И. Изд - во "Наука", 1979.
int rcr1r_c (real *sum, real *term, integer *jterm, real *rab)
Параметры
| sum - | вещественная переменная, содержащая на выходе из подпрограммы текущее значение частичной суммы знакопеременного ряда; |
| term - | значение члена ряда с номером jterm (тип: вещественный); |
| jterm - | значение номера текущего члена ряда (тип: целый); |
| rab - | вещественный рабочий вектор, длина которого равна максимальному количеству членов ряда, предназначенных для суммирования |
Версии
| rcr1d_c - | суммирование знакопеременных рядов при помощи преобразования Эйлера в режиме удвоенной точности; при этом параметры sum, term и rab должны иметь тип double |
Вызываемые подпрограммы: нет
Замечания по использованию
| Данная подпрограмма может быть применена не только для сходящихся знакопеременных рядов. Ее можно применять для суммирования асимптотических рядов |
В данном примере суммируются 10 членов ряда:
ln (1 + x) = x - x2/2 + x3/3 - ... , | x | ≤ 1 , x ≠ - 1
int main(void)
{
/* System generated locals */
int i__1;
/* Builtin functions */
double log(double);
int pow_ii(int *, int *);
double pow_ri(float *, int *);
/* Local variables */
static float term, test;
extern int rcr1r_c(float *, float *, int *, float *);
static int k;
static float x;
static int jterm;
static float rab[10], sum;
x = .5f;
test = (float)log((float)(x + 1.f));
for (k = 1; k <= 10; ++k) {
i__1 = k - 1;
term = pow_ii(&c_n1, &i__1) * (float)pow_ri(&x, &k) / k;
jterm = k;
rcr1r_c(&sum, &term, &jterm, rab);
printf("\n %16.7e \n", sum);
printf("\n %16.7e \n", test);
/* l1: */
}
return 0;
} /* main */
Результат: sum = 0.4054769