Сумма ряда

Алгоритмы: от сортировки пузырьком до численных методов

Модераторы: C_O_D_E, DeeJayC

Ответить
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

20 ноя 2008, 20:34

Исходное задание: найти сумму ряда с точностью до заданной величины eps. Иногда еще требуется найти, какой по счету член ряда перестает превышать эту заданную точность.
Здесь на ум приходят два варианта. Вариант первый - если каждый член ряда замечательно вычисляется сам по себе. Например, если ряд такой: 1, 1/2^2, 1/3^2, 1/4^2 и т.д. Здесь a(n)=1/sqr(n)
[syntax=Delphi]
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.
[/syntax]
В конце этого кода у вас в s будет искомая сумма ряда, а в n - номер члена ряда, который по модулю не превышает eps.
Второй вариант - гораздо более грустный, когда каждый член ряда нужно вычислять как функцию от предыдущего (потому что это удобнее, либо просто физически по-другому нельзя). Например, разложение в ряд sin(x)/x дает 1-x^2/3!+x^4/5!-...
Здесь a[1]=1, a=-a[i-1]*x^2/(2*(i-1)*(2*(i-1)+1)) для всех i, больших 1.
[syntax=Delphi]
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.
[/syntax]
После выхода из цикла искомая сумма опять в s, последний член ряда - в a, номер последнего члена - в n
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Intruder04
Сообщения: 13
Зарегистрирован: 25 дек 2007, 13:00

01 дек 2008, 20:23

Очень прошу написать этот алгоритм для Си++
Ответить