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

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

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

    InviZible Гость

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


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


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

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

    Zhivel Гость

    Не уверен что в тему :)
    И не все до конца понятно. :angry: Предпроложим, что нужно найти сумму элементов данной последовательности, где i изменяется от 1 до n.
    Можно конечно пойти простым путем, понаписывать кучу функций. А можно попробовать пременить математику, что бы программа быстрее считала, т.е. попытаться минизировать кол-во вычислений.
    посмотрим чему равны первые эл-ты послед-ти:
    Код (Text):
    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 Гость

    Спасибо, попробую
     
  4. InviZible

    InviZible Гость

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

    InviZible Гость

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

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