Вычисление суммы степенного ряда
При вычислении сумм рядов, слагаемые которых включают в себя степени аргумента и факториалы, может быть также использован итерационный цикл. В этом цикле значение очередного слагаемого ряда вычисляется умножением предыдущего слагаемого на некоторый коэффициент, что позволяет избавиться от повторного вычисления степеней и факториалов. Сам коэффициент вычисляется таким образом :
.
Y = S0(x) + S1(x) + S2(x) +...+ Sn-1(x) + Sn(x) + ...
k(x,n) = Sn / Sn-1
Так, например для ряда, вычисляющего sin(x), коэффициент и функция его вычисления имеют вид:
.
3 5 7 n 2n+1
sin(x)=x - x/3! + x/5! - x/7! +...+ (-1) x / (2n+1)!
.
S0 S1 S2 S3 ... Sn
.
2
k(x,n) = Sn / Sn-1 = - x / (2n (2n+1))
Соответствующая программа выгладит так:
//------------------------------------------------------bk33-04.cpp
//--- Вычисление значения функции sin через степенной ряд
#include <iostream.h>
#include <math.h>
double sum(double x,double eps)
{
double s,sn; // Сумма и текущее слагаемое ряда
int n;
for (s=0., sn = x, n=1; fabs(sn) > eps; n++)
{
s += sn;
sn = - sn * x * x / (2. * n * (2. * n + 1));
}
return s;
}
// Вычисление степенного ряда для x в диапазоне от 0.1 до 1 с шагом 0.1
void main()
{
double x;
for (x=0.1; x <= 1.; x += 0.1)
cout << "x=" << x << " sum=" << sum(x,0.0001) << " sin=" << sin(x) << endl;
}