1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

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

Тема в разделе "Delphi - программирование", создана пользователем InviZible, 23 сен 2006.

Статус темы:
Закрыта.
  1. InviZible

    InviZible Гость

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


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


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

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

    Zhivel Гость

    Репутация:
    0
    Не уверен что в тему :)
    И не все до конца понятно. :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);
    ...
    Общий смысл вроде понятен. :)
     
  3. InviZible

    InviZible Гость

    Репутация:
    0
    Спасибо, попробую
     
  4. InviZible

    InviZible Гость

    Репутация:
    0
    Большое всем спасибо. Всё реализовал. Попозже выложу
     
  5. InviZible

    InviZible Гость

    Репутация:
    0
    Вот та часть этой дроби:
    Код:
     .....
    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); // вычисление дроби
    ....
    Всем спасибо.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей