Приближение Ланцоша - Википедия - Lanczos approximation

В математика, то Приближение Ланцоша это метод вычисления гамма-функция численно, опубликовано Корнелиус Ланцош в 1964 году. Это практическая альтернатива более популярным Приближение Стирлинга для вычисления гамма-функции с фиксированной точностью.

Вступление

Приближение Ланцоша состоит из формулы

для гамма-функции с

Здесь грамм это постоянный который может быть выбран произвольно при условии, что Re (z) > 1/2.[1] Коэффициенты п, которые зависят от грамм, вычислить немного сложнее (см. ниже). Хотя приведенная здесь формула действительна только для аргументов в правильном комплексе полуплоскость, его можно распространить на весь комплексная плоскость посредством формула отражения,

Сериал А является сходящийся, и может быть усечен для получения приближения с желаемой точностью. Выбрав подходящий грамм (обычно малое целое число), для вычисления гамма-функции с типичными значениями требуется всего 5–10 членов ряда. Один или же двойной плавающая точка точность. Если фиксированный грамм выбирается, коэффициенты могут быть рассчитаны заранее, а сумма преобразована в следующий вид:

Таким образом, вычисление гамма-функции сводится к оценке лишь небольшого количества элементарные функции и умножение на сохраненные константы. Приближение Ланцоша было популяризировано Числовые рецепты, согласно которому вычисление гамма-функции становится «не намного сложнее, чем другие встроенные функции, которые мы принимаем как должное, такие как sinИкс или же еИкс". Метод также реализован в Научная библиотека GNU.

Коэффициенты

Коэффициенты даются как

куда представляет собой (п, м) th элемент матрица коэффициентов при Полиномы Чебышева, который можно вычислить рекурсивно от этих личностей:

Годфри (2001) описывает, как получить коэффициенты, а также значение усеченного ряда. А как матричный продукт.[2]

Вывод

Ланцош вывел формулу из Леонард Эйлер с интеграл

выполнение последовательности основных манипуляций для получения

и вывод ряда для интеграла.

Простая реализация

Следующая реализация в Язык программирования Python работает со сложными аргументами и обычно дает 15 правильных десятичных знаков. Обратите внимание, что пропуск самых маленьких коэффициентов не приводит к более быстрой, но немного менее точной реализации; коэффициенты необходимо пересчитывать с нуля для разложения с меньшим количеством членов.

из cmath импорт грех, sqrt, число Пи, expп = [676.5203681218851    ,-1259.1392167224028    ,771.32342877765313    ,-176.61502916214059    ,12.507343278686905    ,-0.13857109526572012    ,9.9843695780195716e-6    ,1,5056327351493116e-7    ]ЭПСИЛОН = 1e-07def drop_imag(z):    если пресс(z.воображать) <= ЭПСИЛОН:        z = z.настоящий    возвращаться zdef гамма(z):    z = сложный(z)    если z.настоящий < 0.5:        у = число Пи / (грех(число Пи * z) * гамма(1 - z))  # Формула отражения    еще:        z -= 1        Икс = 0.99999999999980993        за (я, pval) в перечислять(п):            Икс += pval / (z + я + 1)        т = z + len(п) - 0.5        у = sqrt(2 * число Пи) * т ** (z + 0.5) * exp(-т) * Икс    возвращаться drop_imag(у)"""Вышеупомянутое использование отражения (таким образом, структура if-else) необходимо, даже если это может выглядеть странно, так как позволяет расширить приближение до значений z, где Re (z) <0,5, где метод Ланцоша недействителен."""Распечатать(гамма(1))Распечатать(гамма(5))   Распечатать(гамма(0.5))

Смотрите также

Рекомендации

  1. ^ Пью, Глендон (2004). Анализ приближения гамма Ланцоша (PDF) (Кандидат наук.).
  2. ^ Годфри, Пол (2001). «Реализация Ланцоша гамма-функции». Numericana.