Гамма-функция и факториал: вычислительные вопросы

Тема в разделе "Кухня", создана пользователем Pia, 19 окт 2008.

  1. E-not Он видел динозавров

    • Ветеран
    Рег.:
    03.10.2007
    Сообщения:
    6.730
    Симпатии:
    163
    Репутация:
    31
    Адрес:
    Москва,
    Оффлайн
    Зная Vladimirovicha по делам в Линаресе (он считал там рейтинги) полагаю что будет делать это аккуратно используя карандаш и бумагу ... :D :D
  2. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    Pia, не стыдно Вам нас всех обманывать?
    Код:
    then writeln('n! =',fact(n):26)
    пусть n = 1000
    Код:
    function fact(x:extended):extended;
    begin
      if n < 0
      then fact:=negfact(x)
      else if n < 7
      then fact:=smallfact(x)
      else fact:=exp(lnfact(x));
    end;
    вызывается exp(lnfact(x)) - кстати, одна операция есть - возведение в степень.
    Код:
    function lnfact(z:extended):extended;
    var
      r,i,old:extended;
      j:byte;
    begin
      i:=0;
      old:=0;
      for j := 0 to 50 do if (ln(z)*j)>11352 then break else
      begin
        i:=i+d[j]/power(z,j);
        if old = i then break else old:=i;
      end;
      r:=ln(z/exp(1))*z+ln(sqrt(2*z*pi))+ln(i);
      lnfact:=r;
    end;
    опа! сумма ряда из 50 элементов!!! может прерваться и раньше, конечно... В плохом случае у нас будет 1+ 50 *3 + 7. присваивания не считал, и не только их. но оценивать результат по сумме первых 50 членов ряда...
  3. Vladimirovich Консультант

    • Ветеран
    • Заблокирован
    • Старожил
    Рег.:
    27.09.2006
    Сообщения:
    6.007
    Симпатии:
    810
    Репутация:
    31
    Нарушения:
    31
    Адрес:
    https://quantoforum.ru/
    Оффлайн
    М.б. и считанных десятков но в цикле, с расчетом логарифмов, экспоненты и пр.
    Для каждого C(r,k) эффективность зависит от r b к. Для к=3 я уже пример приводил.
    Для 60000 возможно эффективнее другие алгоритмы.
    Считайте.

    Если Вы и насчитали " в 34 раза ", то уж извините, проверять я это не буду, но на фоне остальных Ваших высказываний, считать это полностью достоверным фактом я не могу ;)
  4. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    при n = 1000 - 39 операций. Я для себя модифицировал программу чтобы автоматически их считала.

    Модифицировал так же чтобы засекала время на посчёт произведений и факториалов.
    Получилось, что на подсчёт одного факториала (со всеми экспонентами и логарифмами) требуется столько времени, сколько на 160 произведений. То есть, моя формула выигрывает над формулой Vladimirovicha уже при k = 160 и больше.
  5. Муркенштейн Гастролёр

    • Участник
    Рег.:
    20.02.2006
    Сообщения:
    1.794
    Симпатии:
    15
    Репутация:
    2
    Адрес:
    Nowhere
    Оффлайн
    Абсолютно непринципиально.

    Куда и Pia, естественно. Была просьба предоставить своё представление, а не ссылку на формулу из википедии.

    Защита методом "сам дурак"? Вообще-то, мой вопрос был адресован Pia, поскольку есть сильное подозрение (мягко говоря), что он не имеет ни малейшего представления о том, что пишет.
    Первичное значение k^n - это вовсе не "количество возможностей раскидать n-элементное множество на k частей", а произведение n множителей, каждый из которых равен k. Что такое возведение в рациональную степень, нужно объяснять? Что такое иррациональное число, нужно объяснять? Ну и говоря простым языком, n^e следует понимать как lim(q->e, q є Q) n^q.

    И на следующий день такой человек будет всем впаривать решение задачи о трисекции угла (к примеру) с уверенностью, что сделал нечто стоящее. Тяжело ли будет его поддержать?

    И всё же, повторю ещё раз: пусть на вышепоставленные вопросы ответит сам Pia, поскольку они (вопросы) писались исключительно для него. Всё остальное - оффтоп.
  6. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    ай-яй-яй! почему же непринципиально?! -i не есть мнимая единица. :rolleyes:
    помню, как я был удивлен, что любой многочлен n-ой степени на поле комплексных чисел имеет n корней... и это всё было принципиально ;)
  7. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Никакие это не вопросы. Вопросы требуют ответа, а эти - нет.
    Значит, это Вы не имеете представления, даже что такое равенство в формуле.
    Не совсем из википедии. Я сжульничал :p
  8. Муркенштейн Гастролёр

    • Участник
    Рег.:
    20.02.2006
    Сообщения:
    1.794
    Симпатии:
    15
    Репутация:
    2
    Адрес:
    Nowhere
    Оффлайн
    Дело в том, что есть два числа, квадрат которых равен -1, и совершенно непринципиально, какое из них назвать i, а какое - -i.
    Про многочлен полностью согласен, но я ведь о другом. Когда говорится "найти решение уравнения", это ведь не означает "найти только одно решение". Точно так же и с моим высказыванием о числе, квадрат которого равен -1.

    Непринципиально, откуда.

    Что ж, тогда мне остаётся лишь присоединиться к призыву Vladimirovich'а покинуть эту тему. Рано или поздно так поступят все отборные дауны в математике, и можете торжествовать.
  9. gennah Учаcтник

    • Участник
    Рег.:
    04.10.2007
    Сообщения:
    474
    Симпатии:
    1
    Репутация:
    1
    Оффлайн
    Я и предоставил вам понимание Pia. По-моему, тут всё ясно. Сейчас мне интересен другой вопрос: есть ли границы вашей серьёзности? Думаю, пора выдвинуть гипотезу, что границ нет. :)

    Защита? Разве кто-то нападает?

    Нет, мне в самом деле было непонятно, что вы подразумеваете под "своим пониманием".

    У меня нет такого подозрения. У меня есть стопроцентная уверенность, причём уже после первых пяти его постов в этой теме. А ещё есть недоумение: что именно вы хотите ему объяснить?

    А "первичные значения" вы распределяете? :) Как насчёт изменения "первичного значения" для биномиальных коэффициентов - пусть это будут коэффициенты полиномиального ряда для (1+x)^n, как обычно.
  10. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Представляю свою программу для точного счёта целых факториалов. Она раз в 5 быстрее чем то, что представил Mustitz.
    Код:
    program Factorial;
    {$APPTYPE CONSOLE}
    const
      d=500000;
    var
      n,i,j,k:integer;
      f:array[1..d]of integer;
    begin
      repeat
      for j:=1 to d do f[j]:=0;
      writeln('n! n = 0..108653, Ctrl-C - exit');
      write('n = ');
      readln(n);
      j:=d;
      f[j]:=1;
      for i:=1 to n do
      begin
        for k:=d downto j do
        begin
          f[k]:=f[k]*i;
        end;
        k:=d;
        while j <= k do
        begin
          if f[k]>9 then
          begin
            f[k-1]:=f[k-1]+(f[k] div 10);
            f[k]:=round(frac(f[k]/10)*10);
            if j > (k-1) then dec(j);
          end;
          k:=k-1;
        end;
      end;
      write('n! = ');
      for i:=j to d do write(f[i]);
      writeln;
      writeln('Digits: ',d-j+1);
      until false;
    end.
  11. Хайдук Учаcтник

    • Участник
    Рег.:
    03.12.2007
    Сообщения:
    4.489
    Симпатии:
    9
    Репутация:
    0
    Оффлайн
    Муркенштейн, вижу, что вроде разбираетесь :) , не подскажете ли чему равно главное значение скорее многозначной экспоненты (-1)^(-i)? Несколько раз тут спрашиваю у математиков-конспирологов ;) и не могу добиться ответа. Спасибо :)
  12. Муркенштейн Гастролёр

    • Участник
    Рег.:
    20.02.2006
    Сообщения:
    1.794
    Симпатии:
    15
    Репутация:
    2
    Адрес:
    Nowhere
    Оффлайн
    gennah, теперь Ваша позиция понятна. Прошу прощения, изначально не сориентировался :(.

    Это просто фраза. Можно считать "аргументация".

    Объяснение своими словами.

    Ключевые слова у меня в скобках ;).

    Хотелось проверить, возможно ли вообще получить от него вразумительный ответ.

    Ну, насколько помню, определения P(n), C(n,k) и A(n,k) - комбинаторные (т.е. кол-ва перестановок, комбинаций и размещений). Да и сами обозначения происходят (насколько себе представляю, т.к. тут могу ошибаться) от Permutations, Combinations и Arrangemets.

    Ожидал, что рано или поздно этот вопрос будет задан :). Давайте, я попробую ответить на него завтра.
  13. Хайдук Учаcтник

    • Участник
    Рег.:
    03.12.2007
    Сообщения:
    4.489
    Симпатии:
    9
    Репутация:
    0
    Оффлайн
    Интересно зачем ожидали, из-за прежних попыток? :)
  14. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
  15. gennah Учаcтник

    • Участник
    Рег.:
    04.10.2007
    Сообщения:
    474
    Симпатии:
    1
    Репутация:
    1
    Оффлайн
    Муркенштейн, ну вот вроде и разобрались. :) Как я уже писал, серьёзно тут говорить не о чем, вот я и пытаюсь шутить... порой не совсем удачно... порой совсем не удачно. Прошу прощения.

    По поводу сочетаний: в принципе, в англоязычной литературе символ C(n,k) встречается всё реже и реже (а русской литературы я читаю всё меньше и меньше)... Ну и раз уж для целых n, k биномиальные коэффициенты и сочетания есть одно и то же, то подойти к определению можно с любого бока, и то, что тут привёл Pia - вполне используется, и даже является своего рода определением для нецелых, как он и пытается утверждать. Что, конечно, не отменяет того факта, что Pia ни бельмеса в тех формулах не понимает. :) Он также не понимает, что такое "точность" (которую он всеми силами повышает), как и где она может теряться, не понимает, что такое сходящийся и расходящийся ряд, и вообще очень нелегко определить, что же именно он понимает. Зато энтузиазма - на целый институт. :) Его подход именно таков, как я и пытался подчеркнуть: "У меня есть формула, и я её считаю". :)

    На мой взгляд, пущай пишет, считает, сражается с калькулятором Windows... Может, что-нибудь по пути выучит. Лично у меня калькулятора Windows нет (потому что Mac OS), так что для вычисления факториалов и гамма-функций я буду использовать MatLab или Mathematica, или что-то ещё в том же роде. :)
  16. Муркенштейн Гастролёр

    • Участник
    Рег.:
    20.02.2006
    Сообщения:
    1.794
    Симпатии:
    15
    Репутация:
    2
    Адрес:
    Nowhere
    Оффлайн
    Всё верно. Во время учёбы в университете мы это обозначение уже не использовали (хотя в школе оно было). Я его поставил только потому, что не знаю, как тут написать вертикально (k n).

    Очевидно, есть. Не пойму я перехода, выделенного жирным.

    Да. У меня получилось вот такое:
    (-1)^(-i) = exp(-i*ln(-1)) = exp(-i*i*pi*(2*n+1)) = exp(pi*(2*n+1)), n є Z. Соответственно, главное значение должно быть e^pi.
    Мог что-то упустить, поскольку не решал подобные упражнения уже лет семь.
  17. gennah Учаcтник

    • Участник
    Рег.:
    04.10.2007
    Сообщения:
    474
    Симпатии:
    1
    Репутация:
    1
    Оффлайн
    Да, e^pi...
  18. Хайдук Учаcтник

    • Участник
    Рег.:
    03.12.2007
    Сообщения:
    4.489
    Симпатии:
    9
    Репутация:
    0
    Оффлайн
    Спасибо, значит выходит, что формальное возведение в степень -i равенства Эйлера e^(i*pi) = -1 приводит к корректному результату e^pi, в чём не был уверен :p
  19. Муркенштейн Гастролёр

    • Участник
    Рег.:
    20.02.2006
    Сообщения:
    1.794
    Симпатии:
    15
    Репутация:
    2
    Адрес:
    Nowhere
    Оффлайн
    Кстати, есть упражнение посложнее и поинтереснее (поскольку затрагивает основную тему): доказать формулу дополнения гамма-функции.
  20. Vladimirovich Консультант

    • Ветеран
    • Заблокирован
    • Старожил
    Рег.:
    27.09.2006
    Сообщения:
    6.007
    Симпатии:
    810
    Репутация:
    31
    Нарушения:
    31
    Адрес:
    https://quantoforum.ru/
    Оффлайн
    Степенная функция КП же многозначная.
    Т.е возводить обе части уравнения в комплексную степень нехорошо :)

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