Как можно реализовать эту дробь

  • Автор темы InviZible
  • Дата начала
Статус
Закрыто для дальнейших ответов.
I

InviZible

#1
Есть задача, вроде всё понятно в ней, но
как можно реализовать вот эту дробь в паcкале:


(-1)^i *x^(4i+1)
-----------------
(4i+1)*(2i)!


"^" - "в степени"
"*" - умножить
"!" - факториал

"i" в ходе программы увеличивается (Inc(x); )
 
Z

Zhivel

#2
Не уверен что в тему :)
И не все до конца понятно. :angry: Предпроложим, что нужно найти сумму элементов данной последовательности, где i изменяется от 1 до n.
Можно конечно пойти простым путем, понаписывать кучу функций. А можно попробовать пременить математику, что бы программа быстрее считала, т.е. попытаться минизировать кол-во вычислений.
посмотрим чему равны первые эл-ты послед-ти:
Код:
a0 = x

a1 = -x^5
------
10

a2 = x^9
-----
9*4!

a3 = -x^13
-------
13*6!

теперь посмотрим чему будет равняться а(i+1)/ai

a(i+1)	 (-1)^(i+1) * x^(4i+5)	  (-1)^i * x^(4i+1)	 
b = ------- = ------------------------- : -------------------- = 
ai		  (4i+5) * (2i+2)!		  (4i+1) * (2i)!	  

-1 * x^(4i+5) * (4i+1) * (2i)!	  -1 * x^4 * (4i+1)
= --------------------------------- = ---------------------
x^(4i+1) * (4i+5) * (2i+2)!		 (4i+5)(2i+1)(2i+2)

т.е. если мы знаем ai, то мы можем получить a(i+1) умножив ai на b, т.е.

-1 * x^4 * (4i+1)
a(i+1) = ai * ----------------------
(4i+5)(2i+1)(2i+2)

Тогда получаем, что то типа этого:

...
s=0;
p=-x*x*x*x;
ai=x;
for i:=1 to n do
begin
ai := ai*p*(4*i+1)/((4*i+5)*(2*i+1)*(2*i+2));
s := s+ai;
end;
writeln(s);
...
Общий смысл вроде понятен. :)
 
I

InviZible

#4
Большое всем спасибо. Всё реализовал. Попозже выложу
 
I

InviZible

#5
Вот та часть этой дроби:
Код:
 .....
if (i mod 2) = 0 then // (-1)^i
st1:=1
else st1:=-1;

vd:=st1*vd*sqr(x)*sqr(x); // числитель

fact:=1;			// факториал
for j:=1 to 2*i do
fact:=fact*j;

nd:=(4*i+1)*fact; // знаменатель

slag:=(vd/nd); // вычисление дроби
....
Всем спасибо.
 
Статус
Закрыто для дальнейших ответов.