Gammafunktionen är en matematisk funktion som generaliserar fakultetenn!, det vill säga heltalsprodukten 1 · 2 · 3 · ... · n, till de reella talen och även de komplexa. Den definierades 1729 av Leonhard Euler och betecknas . Gammafunktionen används inom många områden av matematiken, bland annat för lösningar till integraler och räknas som en av de viktigaste speciella funktionerna.
Om man betraktar grafen av punkterna, verkar det troligt att man skulle kunna rita en mjuk kurva som binder ihop dem. Att bestämma den matematiska funktion som svarar mot en sådan kurva är dock inte helt enkelt. Problemet fick sin lösning först 1729, då den schweiziske matematikern Leonhard Euler i ett brev till Christian Goldbach daterat den 13 oktober beskrev den oändliga produkten
Den 8 januari året därpå angav Euler i korrespondens med Goldbach även funktionen i form av den ekvivalenta integralen
.
Det kan visas att Eulers funktion uppfyller den rekursiva identiteten
för alla z. Eftersom generaliserar gammafunktionen därmed fakulteten. Speciellt gäller att
(n icke-negativt heltal)
(n positivt heltal)
Förskjutningen med 1 gentemot fakulteten infördes av Adrien-Marie Legendre, som även introducerade beteckningen (gamma) år 1809. En alternativ notation som undviker förskjutningen är i form av Π-funktionen (ej att förväxla med π-funktionen för primtalen) införd av Carl Friedrich Gauss så att
Med tanke på gammafunktionens komplicerade definition i jämförelse med fakulteten är en naturlig fråga huruvida det finns någon annan, möjligtvis enklare funktion som generaliserar fakulteten. Enligt Bohr–Mollerups sats (1922) är gammafunktionen dock unik att ha den egenskapen, om man lägger till kravet att den sökta funktionens logaritm ska vara konvex.
Den här integralen kan med hjälp av variabelsubstitution visas vara identisk med Eulers ursprungliga definition. Att den uppfyller den rekursiva egenskapen kan visas genom partiell integration.
Negativa värden fås genom Eulers reflektionsformel:
Andra viktiga formler är
som är ett specialfall av multiplikationsteoremet
En användbar egenskap som lätt kan verifieras genom att använda gränsvärdsdefinitionen är
Några andra serieutvecklingar för gammafunktionen är
då
och
då
Specifika värden
På grund av sambandet med fakulteten antar gammafunktionen heltalsvärden för positiva heltalsargument:
Värden av gammafunktionen kan även härledas för vissa rationella argument. För udda n är
där !! betecknar semifakultet, eller likvärdigt ()
I fallet n=1 löper k i produktsymbolen från 0 till -1, alltså baklänges, och dess produkt tilldelas då standardvärdet 1 eftersom den består av noll faktorer.
Speciellt gäller
Slutna formler för andra värden på gammafunktionen är inte kända. Det är dock känt sedan länge att är transcendent. G. V. Chudnovsky har visat att och är transcendenta. Yuri Nesterenko bevisade år 1996 att , , och är algebraiskt oberoende.
Eftersom gammafunktionen ofta dyker upp i uttryck som används vid vetenskapliga beräkningar, är det av intresse att kunna beräkna den numeriskt med god precision.
För heltalsargument kan gammafunktionen beräknas exakt utifrån motsvarande fakultet. Även värdet för halvtalsargument kan bestämmas exakt, så när som den irrationella faktorn . För godtyckliga reella och komplexa argument kan gammafunktionens värde dock endast approximeras. Detta är i sin tur inte enkelt, eftersom exempelvis framställning i form av en Maclaurinserie inte konvergerar. Mer avancerade metoder har dock härletts. En av de mest välkända är Lanczos approximation
där konstanten g kan väljas godtyckligt och A(z) är en snabbt konvergerande summa med koefficienter som kan beräknas i förväg. Beroende på valet av g kan godtycklig precision erhållas.
Nackdelen med Lanczos metod är att koefficienterna är tidskrävande att beräkna. Ett alternativ är att använda Spouges approximation, som använder ett liknande grunduttryck men enklare koefficienter för summeringen. Dock konvergerar Spouges approximation långsammare, och eftersom koefficienter som är giltiga för alla z kan beräknas i förväg om en fix precision önskas, är Lanczos metod att föredra. Lanczos approximation, med lagrade koefficienter, rekommenderas av Numerical Recipes och används till exempel av GNU Scientific Library.
Ytterligare en metod är Stirlings approximation. Den lämpar sig särskilt väl för mycket stora argument, men fungerar i gengäld inte alls för mycket små argument.
Oberoende av metod, finns några allmängiltiga anmärkningar för numerisk beräkning av gammafunktionen. Till att börja med, är det ofta mer praktiskt att arbeta med gammafunktionens logaritm, eftersom gammafunktionen växer så snabbt att resultatet kan skapa overflow. En annan är att negativa argument enklast (och i vissa fall endast kan) hanteras via reflektionsformeln. Slutligen räcker det i princip att kunna approximera gammafunktionen på ett intervall, eftersom såväl större som mindre argument tack vare gammafunktionens multiplikativa egenskap kan hanteras genom upprepad multiplikation respektive division över skillnaden mellan det valda intervallet och argumentet (detta är dock inte nödvändigtvis praktiskt).
Exempel på implementation
Följande enkla implementation av Lanczos metod i Python tar såväl reella som komplexa argument och ger upp till cirka 15 korrekta decimaler:
from cmath import *
# Koefficienter från GNU Scientific Library
g = 7
C = [0.99999999999980993, 676.5203681218851, -1259.1392167224028,
771.32342877765313, -176.61502916214059, 12.507343278686905,
-0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7]
def gamma(z):
z = complex(z)
# Reflektionsformeln
if z.real < 0.5:
return pi / (sin(pi*z)*gamma(1-z))
else:
z -= 1
x = C[0]
for i in range(1, g+2):
x += C[i]/(z+i)
t = z + g + 0.5
return sqrt(2*pi) * t**(z+0.5) * exp(-t) * x