1 van 1

Gamma-functie, berekenen?

Geplaatst: do 12 aug 2010, 20:58
door JWvdVeer
Dag allen,

Mijn probleem op dit moment is dat ik de gamma-functie aan het implementeren ben (in PHP). En dan wel enkel voor
\(x \in \rr\)
.

Het probleem is echter dat ik niet meer wijs wordt uit de informatie over de gammafunctie. Hetgeen waar ik wel min of meer achter ben is dat deze gamma-functie niet uit elementaire functie bestaat, maar op een andere manier berekend dient te worden.

Alleen kom ik er niet uit wat de beste/handigste benaderingsformule is voor deze functie. Kunnen jullie mij hier een handje bij helpen?

Voor de duidelijkheid, ik bedoel deze: http://en.wikipedia.org/wiki/Gamma_function.

Re: Gamma-functie, berekenen?

Geplaatst: do 12 aug 2010, 21:49
door Rogier
Heb je hier wat aan? http://algolist.manual.ru/maths/count_fast...ma_function.php

Met name die Lanczos approximation (versimpelde variant) ziet er makkelijk doch doeltreffend uit.

Voor negatieve x kun je misschien iets met
\(\Gamma(x)=\Gamma(x+1)/x\)
?

Re: Gamma-functie, berekenen?

Geplaatst: do 12 aug 2010, 22:13
door JWvdVeer
Nou, eigenlijk niet zo zeer met de negatieve x-en. Maar door het noemen van die gelijkheid (die ik toch al verschillende keren onder ogen heb gezien), breng je me opeens wel op een geniaal idee.

Ik ben namelijk nu bezig met het implementeren van de students-t-verdeling, waarvoor ik deze functie dus nodig had. Bij de students-t-verdeling heb je echter dat het altijd is:
\(\Gamma\left(\frac{n}{2}\right), n \in \nn\)
Als ik dan het omgekeerde van jouw stelling gebruik:
\(x\Gamma(x)=\Gamma(x+1)\)
En daarbij de gelijkheid neem:
\(\Gamma\left(\frac{1}{2}\right) = \sqrt{\pi}\)
Dan geldt volgens mij:
\(\Gamma((n\mbox{ mod } 2)\sqrt{\pi}) \cdot \Gamma\left\lfloor\frac{n}{2}\right\rfloor = \Gamma((n \mbox{ mod } 2)\sqrt{\pi}) \cdot \left\left\lfloor\frac{n}{2}\right\rfloor\right!\)
Waarbij mod uiteraard modulo is (
\(a\mbox{ mod }b = \a - \left\lfloor\frac{a}{b}\right\rfloor b\)
)

Re: Gamma-functie, berekenen?

Geplaatst: do 12 aug 2010, 23:08
door JWvdVeer
\(\Gamma((n\mbox{ mod } 2)\sqrt{\pi}) \cdot \Gamma\left\lfloor\frac{n}{2}\right\rfloor = \Gamma((n \mbox{ mod } 2)\sqrt{\pi}) \cdot \left\left\lfloor\frac{n}{2}\right\rfloor\right!\)
Moet natuurlijk zijn:
\(\Gamma\left(\frac{n\mbox{ mod } 2}{2}\right) \cdot \Gamma\left\lfloor\frac{n}{2}\right\rfloor = \Gamma\left(\frac{n\mbox{ mod } 2}{2}\right) \cdot \left\lfloor\frac{n}{2}\right\rfloor! = \sqrt{\pi}^{n\mbox{ mod } 2} \cdot \left\lfloor\frac{n}{2}\right\rfloor!\)

Re: Gamma-functie, berekenen?

Geplaatst: vr 13 aug 2010, 09:30
door Rogier
Voor natuurlijke getallen n geldt inderdaad dat
\(\Gamma\)
[/quote] klopt niet helemaal: voor even n bestaat hij niet (want (n mod 2)/2 wordt dan 0, en
\(\Gamma\)
(0) is niet gedefinieerd) en voor oneven n geldt dat
\(\Gamma\lfloor\frac{n}{2}\rfloor = \left(\lfloor\frac{n}{2}\rfloor-1\right)!\)
in plaats van
\(\lfloor\frac{n}{2}\rfloor!\)
Maar als het je om de student-t verdeling gaat dan heb je de Gamma functie alleen nodig voor x'en van de vorm n/2 met
\(n\in\nn, n\geq1\)
. Dus dan kun je Gamma(x) vrij makkelijk zo uitrekenen:

Code: Selecteer alles

function Gamma($x) { return ($x>1) ? ($x-1)*Gamma($x-1.0) : ($x<1 ? sqrt(pi()) : $x); }
Maar beter nog: ik weet niet tot hoeveel vrijheidsgraden je die t-verdeling nodig hebt, maar in de praktijk zal dat volgens mij niet meer dan een paar honderd zijn. En dan kun je alle daarvoor benodigde Gamma waarden (dwz van de eerste paar honderd n en n/2) beter in een tabelletje zetten en telkens daaruit halen. Sneller en nauwkeuriger kan niet ;)

Re: Gamma-functie, berekenen?

Geplaatst: do 05 jan 2017, 01:21
door bats
Kan mij iemand vertellen hoe de berekening van de gamma-functie nu in z'n werk gaat.
 
Ik zie dan dat gamma(z)=de integraal tussen 0 en oneindig over t^z-1.e^-t dx.
Nu vraag ik mij af wat is "z" en wat is "t"?
e weet ik wel, dat is ongeveer 2,718
 
Hoe bereken je met deze formule de faculteit van bijv. 0,5 , 1,5 en 2,5?
 
Wat ik t.n.t. heb opgezocht wordt ik niet veel wijzer van.
 

Re: Gamma-functie, berekenen?

Geplaatst: do 05 jan 2017, 10:03
door TD
bats schreef:Ik zie dan dat gamma(z)=de integraal tussen 0 en oneindig over t^z-1.e^-t dx.

Nu vraag ik mij af wat is "z" en wat is "t"?
 
Die x in de integraal moet een t zijn; die t is dus de integratievariabele en dat is een 'dummy': die verdwijnt door te integreren en kan je gerust (overal!) vervangen door een andere variabele naar keuze.
 
De z is de variabele van de (gamma)functie. Wil je de waarde van bijvoorbeeld 2,5 weten, dan vervang je z door 2,5.

 
bats schreef:Hoe bereken je met deze formule de faculteit van bijv. 0,5 , 1,5 en 2,5?
 
In het algemeen niet, of toch niet eenvoudig, 'met de hand'. Je laat het uitrekenen door een computer, grafische rekenmachine ...