Forumregels
(Middelbare) school-achtige vragen naar het forum "Huiswerk en Practica" a.u.b.
Zie eerst de Huiswerkbijsluiter
JWvdVeer
Artikelen: 0
Berichten: 1.116
Lid geworden op: wo 20 mei 2009, 09:36

Gamma-functie, berekenen?

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.
Gebruikersavatar
Rogier
Artikelen: 0
Berichten: 5.679
Lid geworden op: di 27 apr 2004, 13:40

Re: Gamma-functie, berekenen?

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\)
?
In theory, there's no difference between theory and practice. In practice, there is.
JWvdVeer
Artikelen: 0
Berichten: 1.116
Lid geworden op: wo 20 mei 2009, 09:36

Re: Gamma-functie, berekenen?

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\)
)
JWvdVeer
Artikelen: 0
Berichten: 1.116
Lid geworden op: wo 20 mei 2009, 09:36

Re: Gamma-functie, berekenen?

\(\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!\)
Gebruikersavatar
Rogier
Artikelen: 0
Berichten: 5.679
Lid geworden op: di 27 apr 2004, 13:40

Re: Gamma-functie, berekenen?

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 ;)
In theory, there's no difference between theory and practice. In practice, there is.
bats
Artikelen: 0
Berichten: 418
Lid geworden op: za 29 mei 2004, 17:52

Re: Gamma-functie, berekenen?

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.
 
Gebruikersavatar
TD
Artikelen: 0
Berichten: 24.578
Lid geworden op: ma 09 aug 2004, 17:31

Re: Gamma-functie, berekenen?

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 ...
"Malgré moi, l'infini me tourmente." (Alfred de Musset)

Terug naar “Wiskunde”