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

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

  1. Муркенштейн Гастролёр

    • Участник
    Рег.:
    20.02.2006
    Сообщения:
    1.794
    Симпатии:
    15
    Репутация:
    2
    Адрес:
    Nowhere
    Оффлайн
    Pia, научите свою программу считать т.н. "факториалы комплексных чисел". Виндозный калькулятор нужно догнать и перегнать! :p
  2. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Вот вы как уже заговорили :rolleyes:
  3. Муркенштейн Гастролёр

    • Участник
    Рег.:
    20.02.2006
    Сообщения:
    1.794
    Симпатии:
    15
    Репутация:
    2
    Адрес:
    Nowhere
    Оффлайн
    Потому что доказывать что-либо бесполезно - здесь я полностью согласен с Vladimirovich'ем.
    И если виндозный калькулятор городит чушь, то нужно в этой чуши его догнать и перегнать. Вперёд, Pia!
  4. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Опять, как обычно, пустозвон. Ну что вы пытаетесь доказать? То, что формула Лапласа считает не факториалы, а Гамма-функцию? Вот это чушь. Не лезьте со своим бредом.
    У меня есть формула
    [​IMG]
    И мне не нужно слушать дураков и считать ещё бесконечный ряд произведений для каждого слагаемого.
  5. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    [​IMG]
    Намного лучше, чем то, что вы впариваете:
    [​IMG]
  6. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    можно узнать чем лучше?
  7. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
  8. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Я сейчас подумал, ряд r(r-1)(r-2)(r-3)...(r-(k-1)) можно оптимизировать, сохранив результат последнего произведения для суммы следующих произедений. Но не все ряды поддаются такой оптимизации. Например ряд r(k+1)r(k+2)... потому, что у нас каждый раз будет разное k.
    Факториал целых и нецелых чисел можно тоже рассматривать как ряд. И его можно оптимизировать.
    Например, у нас есть (r-k)! Сохраняем результат и при следующем сложении просто делим его на r-k. Так нецелый факториал мы вычислили только один раз.
  9. Муркенштейн Гастролёр

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

    Pia Учаcтник

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

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    Pia, мне страшно сюда уже заходить. вот Вы утверждаете, что Ваша программа вычисляет нецелый факториал, а я утверждаю, что нецелым факториалом является следующая функция:
    [​IMG]
    И Вы не сможете это опровергнуть. У меня в формуле идет простая интерполяция (просто соединил точки отрезками), мог её провести параболами. Мог написать другую формулу. Вы же считаете не факториал. И "ряд" на самом деле не ряд, а произведение.
    а сколько операций Вы тратите на вычисление каждого факториала? в общем случае выйдет, уверен, куда больше. При всём том, что Вы не учитываете значение переменной r. От нее ничего на зависит, что ли?
  12. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    krey
    Кто сказал, что важнее формула, чем результат? Вбейте свою формулу в программу и посмотрим.
    Ну да, бесконечное число слагаемых можно назвать суммой. Бесконечное число множителей - произведением. Но в обоих случаях это бесконечное число - ряд.
    Даже если моя программа тратит 200 оперций, это всё равно в 75 раз меньше. Я же написал: 1 секунда против 34 - я замерял таймером. И вот, напрмер, факториал 60000! - это 60000 операций или 200 - как лучше, а? Кстати, моя программа вычисляет факториалы не обращая внимания на то, целое число или нет. Так, например 3! = 6 целых и ещё 17 нолей после запятой - вот какая точность. Можно проверить для нецелых: 0.5! = pi^0.5/2 - моя программа и здесь даёт 17-18 знаков. А Вы говорите "не факториал, не факториал...", хе-хе.
    r должна быть нецелой, иначе пользуемся другой формулой с самого начала.
  13. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    http://ru.wikipedia.org/wiki/Ряд_(математика)
    а вот для бесконечного произведения названия еще не придумали.
    http://ru.wikipedia.org/wiki/Бесконечное_произведение

    Я взглянул на Вашу программу. Она не использует 200 операций для вычисления 60000! И пожалуйста, не говорите, что Вы вычисляете нецелый факториал. Вы книг не читаете, что ли? Такого понятия нет, и быть не может! Откройте "Курс дифференциального и интегрального исчисления" Фихтенгольца!
  14. gennah Учаcтник

    • Участник
    Рег.:
    04.10.2007
    Сообщения:
    474
    Симпатии:
    1
    Репутация:
    1
    Оффлайн
    При чём тут Фихтенгольц, если есть формула??
  15. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    krey
    Ткнули пальцем в небо! Да, для 60000! моя программа сейчас производит 1344 операций.
    60000^2/2 / 60000/2/1344 = всё равно, в 11 раз меньше.
    А я не говорю, что вычисляю нецелый факториал. Моя программа вычисляет факториал вообще. Не может быть, чтобы какая-нибудь функция была определена только для целых чисел. Просто формулы для целых могут быть проще, используя другие свойства чисел.
    Как мы знаем, Гамма-функция обычно вычисляется формулой Стирлинга. Но чёрта с два эта формула для Гамма-функции.
    Стирлинг определил:
    [​IMG]
    А если точно, то формула Лапласа:
    [​IMG]
  16. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    контрпример: f(x)= 1, для любого x из N.
    Я могу определить функцию с любым количеством разрывов на любом множестве в любое множество. кстати, как Вы считаете, что обычно обозначают в математике буквой n? Стирлинг, выводил свою формулу для факториала, это правда. Гамма-функция есть обобщение факториала на множество R+, и это правда. И пользуясь формулой Лапласа Вы сможете вычислить факториал в любой точке N+. а Также, значение гамма-функции в любой точке R+. если бы Вы учились на факультете математики, Вас бы выгнали в первом же симместре.
    а при том, что перед тем как смотреть формулу, необходимо смотреть определение.
  17. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    И ещё раз: Г(z) <> z!

    Я немного оптимизировал программу, так что для 60000! требуется около 31 операций, а не 1344 или 200.
  18. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    Святые слова!!! :) потому что факториал определен только для натуральных чисел.
  19. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Нет, потому, что Г(z) = (z-1)!
    Возъмём натуральное число: Г(5) = (5-1)!
    Возъмём реальное число: Г(4.5) = (4.5-1)!
    Что, есть разница?
    Почему это факториал определён только для натуральных чисел?
    Это не факториал определён, а определено, что множество определяет факториал для натуральных чисел.
    Для реальных, опеределяет не множество, а, например формула Лапласа или формула Г(z+1). Как бы мы не определяли, конечный результат будет факториал, а не "число Лапласа", гамма или пи-функция.
  20. drowsy Учаcтник

    • Участник
    Рег.:
    08.09.2006
    Сообщения:
    1.282
    Симпатии:
    1
    Репутация:
    0
    Адрес:
    Toronto, Canada
    Оффлайн
    Ещё один шикарный перл от Pia. Хотя их тут навалом...
  21. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Ещё одно бессмысленное замечание. Чё, делать не фига? Иди молоко на губах оближи через задницу.
  22. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    нигде не видел такой формулы. зато видел другую: Г(n)=(n-1)!
    "Непонятно!" © Растолкуйте. Желательно с ссылками, откуда же у Вас такая информация.
  23. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    В Вики написано, что эта формула только для целых положительных. Но это ложь.

    n! = 1*2*3*...*n. Для рельных чисел такое множество не определяет факториал, но это не значит, что факториал реального числа не определён. Используй интерполяцию, да что угодно, но факториал нецелого числа определяется.
  24. krey Михаил Кройтор

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

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    И это уж моё дело, по средствам чего я нахожу результат.
    Если f(x) = x!, то эту функцию можно назвать факториалом, нет?
  26. drowsy Учаcтник

    • Участник
    Рег.:
    08.09.2006
    Сообщения:
    1.282
    Симпатии:
    1
    Репутация:
    0
    Адрес:
    Toronto, Canada
    Оффлайн
    А вы на осмысленные не отвечаете. Видимо потому, что не понимаете смысла. У вас тут уже спрашивали, почему вы факториал через *** расходящийся ряд определяете, вы же все вопросы проигнорировали.

    Значит и будем с вами сюсюкаться через бессмысленные замечания, раз так не доходит.
  27. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    Я же ссылку прошу, а не цитату :)
    Нашел, откуда это утверждение - из вики на английском - http://en.wikipedia.org/wiki/Factorial
    Но если цитировать, так до конца:
    Замечаете разницу? А разница следующая:
    во-первых, написано ненаучным языком, а так, чтобы поняли даже американцы :D, во-вторых, и здесь сказано, что факториал определен на натуральных числах, а функция "которая "заполняет" область определения факториала называется Гамма-функцией".
    Функцией называется однозначное отображение одного множества в другое. Таким образом, когда мы говорим о функциях, необходимо указывать области определения и значения функции.
    Это означает, что факториал (функция, то есть) опеделеяется следующим образом:
    f(x) = x! , f:N-->N
    Причем операция ! означает именно произведение натуральных чисел от 1 до x : x! = 1*2*...*x
    Кстати, понятие операции родственно понятию функции.
    гамма-функция определяется на множестве комплексных чисел со значениями там же. и то, что в некоторых точках факториал и гамма-функция совпадают - означает, что "повезло", причем факториалу :)
  28. drowsy Учаcтник

    • Участник
    Рег.:
    08.09.2006
    Сообщения:
    1.282
    Симпатии:
    1
    Репутация:
    0
    Адрес:
    Toronto, Canada
    Оффлайн
    Факториал ещё в нуле определён, если быть точным.
  29. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    есть 2 определения натуральных чисел: европейский, в которых 0 есть натуральное число и советский, в котором 0 - не есть натуральное число :)
  30. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    кстати, поэтому в европейских учебниках есть написание N с плюсом в индексе, у в советских книжках - N со звездой.
  31. drowsy Учаcтник

    • Участник
    Рег.:
    08.09.2006
    Сообщения:
    1.282
    Симпатии:
    1
    Репутация:
    0
    Адрес:
    Toronto, Canada
    Оффлайн
    вы имеете в виду, что советская эпоха закончилась и теперь мы в Европе? :D
  32. krey Михаил Кройтор

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

    • Участник
    Рег.:
    08.09.2006
    Сообщения:
    1.282
    Симпатии:
    1
    Репутация:
    0
    Адрес:
    Toronto, Canada
    Оффлайн
    В канадском учебнике, по которому я учу своих студентов, как раз натуральные с единицы начинаются. Точнее так — учебник американский, но мы им тут пользуемся.

    ЗЫ Вообще я только видел N_0 как натуральные с нулём.
  34. TopicStarter Overlay

    Pia Учаcтник

    • Участник
    Рег.:
    11.06.2007
    Сообщения:
    537
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Нет, именно, сказано, что факториал может быть также определён для нецелых (non-integer). Сказано, что, чтобы заполнить пространство, например, между 2! и 3!, нужно пользоваться другими инструментами нежели простым умножением. Сказано, что этому требованию отвечает Гамма-функция, но нельзя сказать, что результат от нецелого числа будет называться не факториалом, а Гамма-функцией. И нельзя сказать, что для этого можно пользоваться только Гамма-функцией. Просто для его вычисления была использована Гамма-функция вместо умножения. Факториал можно назвать произведением если мы использовали умножение или Гамма-функцией, если мы использовали её, но конечный результат - факториал - так и останется факториалом. И вообще, моя программа использует не Гамма-функцию, а формулу, написанную специально для факториалов.
    У меня сходящийся ряд есть, но найти коэффиценты для него мне представляется более сложным занятием. При том, что я не вижу предела точности для своего, расходящегося ряда. Просто не беру коэффиценты там, где ряд расходится. Когда мне нужна бОльшая точность, то беру факториал большого числа, где этот ряд достаточно точен, и преобразоваю его в нужный факториал простым делением.
  35. krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    в книгах бурбаки (и не только) ноль считается натуральным. помню, переводчики еще отмазку писали - в смысле пояснения к обозначениям. Но это не суть важно, мы всегда сможем оговорить свои обозначения. Главное, чтобы они не шли вразрез с общепринятыми :)

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