Помощь - Поиск - Пользователи - Календарь
Полная версия: Задачка на факториал
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Warn
Здравствуйте! Помогите, пожалуйста, решить задачу.
Код

        n   2n-1
∞   (-1)   x                            -5
∑   −−−−−−−−−−−−    , E (эпсилон)=0,2*10    , |x|≤1
n=1   (2n)!

Извините за плохое оформление, так получилось.

Я пробовал решить:

Код

Program Factor;
Const e=1E-5;
Var n,x:Integer; Ai,S,Fact:Real; Minus:Boolean;
Begin
WriteLn('BBeDuTe 4ucLo');
 ReadLn(x);
 n:=1;
 Minus:=True;
 Fact:=1;
 S:=0;
 Ai:=0;
Repeat
 Fact:=Fact*2*n;
 Ai:=Exp((2*n-1)*Ln(x))/Fact;
 If Minus Then Ai:=Ai*(-1);
 S:=S+Ai;
 Minus:=Not Minus;
 n:=n+1;
Until
 Abs(Ai)<e;
Writeln('S = ',s);
Readln;
End.


Не пойму, где применить E (эпсилон)=0,2*10^(-5) , |x|≤1.
volvo
Цитата
Не пойму, где применить E (эпсилон)

Ну так ты же применил его в Until (...) wink.gif

А вообще-то сумма ряда по-другому должна считаться:
const E = 1E-5;
var
s, next: double;
x: double;
n: integer;

begin
x := 0.975; { Ну, или запрашивать у пользователя... }
next := x / 2; s := - next;
n := 2;
Repeat
next := next * (sqr(x) / (pred(2*n)*(2*n)));
s := s + (1 - 2*Byte(Odd(n))) * next;
inc(n);
Until next < E;
writeln('s = ', s:10:6);

end.

Почитай еще вот это, там рассмотрено несколько разложений в ряды...
FAQ: Общие вопросы по математике -> Разложение функции в ряд
Warn
Спасибо, что не оставили без внимания! Только можно попроще? Мы еще не проходили такие строки как например
Цитата
s := s + (1 - 2*Byte(Odd(n))) * next;

Вот.. unsure.gif
volvo
Строка
s := s + (1 - 2*Byte(Odd(n))) * next;
полностью аналогична вот этому:
if n mod 2 = 0 then s := s + next
else s := s - next;
Можешь заменить, и все будет так же работать...
Warn
Тогда получается, что эта строчка неверная
Цитата
next := next * (sqr(x) / (pred(2*n)*(2*n)));


Нужно ведь не просто квадратный корень вычислить, а x^(2n-1). Значит её нужно заменить на


next := next * (Exp((2*n-1)*Ln(x)) / (pred(2*n)*(2*n)));


Я правильно понял?
Atos
Это не квадратный корень, а квадрат. Что бы получить следующее слагаемое, мы должны умножить предыдущее на x в квадрате и ещё что-то там. Обрати внимание
Цитата
next := next * (sqr(x) / (pred(2*n)*(2*n)));
Warn
Да, простите за утренний тупняк-я имел ввиду не корень, а квадрат. Но проблема-то остатся: в числителе x в степени 2n-1. А я смотрю там для вычисления используется только Sqr(x). Даже если вместо -1 можно ислользовать Pred (хотя можно было разделить на х, т.к. х^-1=1/x), то в степени остается 2n! Или я чего-то не понимаю?
volvo
Warn, просыпайся окончательно, я вижу, ты еще не совсем проснулся wink.gif

Смотри, как изменяется числитель в зависимости от N (знак брать не будем, он учитывается отдельно)

n = 1: числитель = x
n = 2: числитель = x^3
n = 3: числитель = x^5
n = 4: числитель = x^7
n = 5: числитель = x^9
...

Чувствуешь закономерность? Просто домножаем предыдущий на x^2, и делим на (2n-1)*2n
Warn
Спасибо всем, буду разбираться! smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.