PDA

Просмотр полной версии : Сумма ряда



Хыиуду
20.11.2008, 20:34
Исходное задание: найти сумму ряда с точностью до заданной величины eps. Иногда еще требуется найти, какой по счету член ряда перестает превышать эту заданную точность.
Здесь на ум приходят два варианта. Вариант первый - если каждый член ряда замечательно вычисляется сам по себе. Например, если ряд такой: 1, 1/2^2, 1/3^2, 1/4^2 и т.д. Здесь a(n)=1/sqr(n)

const eps=0.0001;
var s: real; n: integer;
function a(n: integer): real;
begin
a:=1/sqr(n);
end;
begin
s:=0;
n:=1;
repeat
s:=s+a(n);
n:=n+1;
until abs(a(n))<eps;
end.

В конце этого кода у вас в s будет искомая сумма ряда, а в n - номер члена ряда, который по модулю не превышает eps.
Второй вариант - гораздо более грустный, когда каждый член ряда нужно вычислять как функцию от предыдущего (потому что это удобнее, либо просто физически по-другому нельзя). Например, разложение в ряд sin(x)/x дает 1-x^2/3!+x^4/5!-...
Здесь a[1]=1, a[i]=-a[i-1]*x^2/(2*(i-1)*(2*(i-1)+1)) для всех i, больших 1.

const eps=0.0001;
var s,a: real; n: integer;
begin
s:=0;
a:=1;
n:=1;
repeat
s:=s+a;
n:=n+1;
a:=a*x^2/(2*(n-1)*(2*(n-1)+1)); //Естественно, x должен задаваться где-то извне
until abs(a)<eps;
end.

После выхода из цикла искомая сумма опять в s, последний член ряда - в a, номер последнего члена - в n

Intruder04
01.12.2008, 20:23
Очень прошу написать этот алгоритм для Си++