scipy.special.

factorialk#

scipy.special.factorialk(n, k, точный=False, расширить='zero')[источник]#

Мультифакториал n порядка k, n(!!…!).

Это мультифакториал n с пропуском k значений. Например,

factorialk(17, 4) = 17!!!! = 17 * 13 * 9 * 5 * 1

В частности, для любого целого числа n, у нас есть

factorialk(n, 1) = factorial(n)

factorialk(n, 2) = factorial2(n)

Параметры:
nint или float или complex (или array_like таковых)

Входные значения для мультифакториала. Нецелые значения требуют extend='complex'. По умолчанию возвращаемое значение для n < 0 равен 0.

nint или float или complex (или array_like таковых)

Порядок мультифакториала. Нецелые значения требуют extend='complex'.

точныйbool, необязательно

Если exact установлено в True, вычисляет ответ точно с использованием целочисленной арифметики, иначе использует приближение (быстрее, но даёт числа с плавающей точкой вместо целых). По умолчанию False.

расширитьstring, optional

Один из 'zero' или 'complex'; это определяет, как значения n<0 обрабатываются - по умолчанию они равны 0, но можно выбрать комплексное расширение мультифакториала. Это позволяет передавать комплексные значения, не только в n но также и для k.

Предупреждение

Используя 'complex' расширение также изменяет значения мультифакториала на целых числах n != 1 (mod k) на коэффициент, зависящий от обоих k и n % k, см. ниже или [1].

Возвращает:
nfint или float или complex или ndarray

Мультифакториал (порядок k) из n, как целое, вещественное или комплексное (в зависимости от exact и extend). Массивные входные данные возвращаются как массивы.

Примечания

Хотя это менее прямолинейно, чем для двойного факториала, можно вычислить общую аппроксимационную формулу n!(k), изучая n для заданного остатка r < k (таким образом n = m * k + r, соответственно. r = n % k), которые можно объединить во что-то действительное для всех целых значений n >= 0 & k > 0:

n!(k) = k ** ((n - r)/k) * gamma(n/k + 1) / gamma(r/k + 1) * max(r, 1)

Это основа приближения, когда exact=False.

В принципе, любой фиксированный выбор r (игнорируя его отношение r = n%k to n) обеспечило бы подходящее аналитическое продолжение с целых n в комплексное z (не только удовлетворяющее функциональному уравнению, но и логарифмически выпуклое, см. теорему Бора-Моллерупа) – фактически, выбор r выше изменяет функцию только на постоянный множитель. Окончательное ограничение, определяющее каноническое продолжение, это f(1) = 1, что заставляет r = 1 (см. также [1]).:

z!(k) = k ** ((z - 1)/k) * gamma(z/k + 1) / gamma(1/k + 1)

Ссылки

[1]

Комплексное расширение для мультифакториала https://en.wikipedia.org/wiki/Double_factorial#Alternative_extension_of_the_multifactorial

Примеры

>>> from scipy.special import factorialk
>>> factorialk(5, k=1, exact=True)
120
>>> factorialk(5, k=3, exact=True)
10
>>> factorialk([5, 7, 9], k=3, exact=True)
array([ 10,  28, 162])
>>> factorialk([5, 7, 9], k=3, exact=False)
array([ 10.,  28., 162.])