scipy.special.

factorialk#

scipy.special.factorialk(n, k, exact=False, extend='zero')[Quelle]#

Multifaktoriell von n der Ordnung k, n(!!…!).

Dies ist das Multifaktoriell von n unter Auslassung von k Werten. Zum Beispiel:

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

Insbesondere gilt für jede ganze Zahl n:

factorialk(n, 1) = factorial(n)

factorialk(n, 2) = factorial2(n)

Parameter:
nint oder float oder complex (oder array_like davon)

Eingabewerte für das Multifaktoriell. Nicht-ganzzahlige Werte erfordern extend='complex'. Standardmäßig ist der Rückgabewert für n < 0 0.

nint oder float oder complex (oder array_like davon)

Ordnung des Multifaktoriells. Nicht-ganzzahlige Werte erfordern extend='complex'.

exactbool, optional

Wenn exact auf True gesetzt ist, wird die Antwort exakt mit ganzzahliger Arithmetik berechnet, andernfalls wird eine Approximation verwendet (schneller, liefert aber Floats statt ganzer Zahlen). Standard ist False.

extendstring, optional

Einer von 'zero' oder 'complex'; dies bestimmt, wie Werte n<0 behandelt werden – standardmäßig sind sie 0, aber es ist möglich, die komplexe Erweiterung des Multifaktoriells zu nutzen. Dies ermöglicht die Übergabe komplexer Werte, nicht nur an n, sondern auch an k.

Warnung

Die Verwendung der 'complex'-Erweiterung ändert auch die Werte des Multifaktoriells bei ganzen Zahlen n != 1 (mod k) um einen Faktor, der sowohl von k als auch von n % k abhängt, siehe unten oder [1].

Rückgabe:
nfint oder float oder complex oder ndarray

Multifaktoriell (Ordnung k) von n, als ganze Zahl, Float oder komplex (abhängig von exact und extend). Array-Eingaben werden als Arrays zurückgegeben.

Hinweise

Obwohl weniger geradlinig als beim Doppelfaktoriell, ist es möglich, eine allgemeine Näherungsformel für n!(k) zu berechnen, indem man n für einen gegebenen Rest r < k studiert (also n = m * k + r bzw. r = n % k), die zu etwas zusammengefügt werden kann, das für alle ganzzahligen Werte n >= 0 & k > 0 gültig ist.

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

Dies ist die Grundlage der Näherung, wenn exact=False.

Grundsätzlich würde jede feste Wahl von r (unter Ignorierung seiner Beziehung r = n%k zu n) eine geeignete analytische Fortsetzung von ganzzahligen n zu komplexen z liefern (die nicht nur die Funktionsgleichung erfüllt, sondern auch logarithmisch konvex ist, vgl. Bohr-Mollerup-Theorem) – tatsächlich ändert die obige Wahl von r die Funktion nur um einen konstanten Faktor. Die endgültige Bedingung, die die kanonische Fortsetzung bestimmt, ist f(1) = 1, was r = 1 erzwingt (siehe auch [1]).

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

Referenzen

Beispiele

>>> 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.])