Approximation de la fonction gamma incomplete
Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
-
pomchip
- Messages: 6
- Enregistré le: 02 Mai 2008, 15:19
-
par pomchip » 02 Mai 2008, 15:32
Bonjour,
Je cherche pour un probleme de modelisation et d'estimation de parametres une approximation de la fonction gamma incomplete. J'ai surfe un peu sur le net et les seules formules que j'ai pues trouver se basaient sur des fonctions mathematiques non supportees par mon programme d'estimation ou bien sur la recursivite (difficile a mettre en oeuvre).
Est-ce que vous pourriez m'indiquer des formules ou des references sur le sujet ? S'il existe une formule similaire a l'approximation de Stirling pour la fonction gamma, ce serait genial :)
D'avance merci
Sebastien
-
Jean_Luc
- Membre Relatif
- Messages: 158
- Enregistré le: 25 Avr 2008, 10:17
-
par Jean_Luc » 02 Mai 2008, 16:03
Salut,
Je pense que la méthode la plus courante et la méthode de Lanczos (pour
gamma). J'approxime ensuite les fonctions gamma incomplètes avec une
bète methode des trapèzes. Il existe surement mieux....
J'espère que ça pourra t'aider un peu.
- Code: Tout sélectionner
public class StatMath {
static final int STEP = 500;
// Gamma function coef (Lanczos method)
static final double[] gP = new double[]{0.99999999999980993, 676.5203681218851
, -1259.1392167224028,
771.32342877765313, -176.61502916214059, 12.507343278686905,
-0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7};
public static double g(double t, double x) {
return Math.pow(t, x - 1.0) * Math.exp(-t);
}
public static double gammaLow(double a, double x) {
double dx = x / (double) STEP;
double sx = 0.0;
double s = 0.0;
for (int i = 0; i < STEP; i++) {
s += (g(sx, a) + g(sx + dx, a)) / 2.0;
sx += dx;
}
return s * dx;
}
public static double gammaHigh(double a, double x) {
return gamma(a) - gammaLow(a, x);
}
public static double gamma(double x) {
double y;
// Reflection formula
if (x < 0.5) {
return Math.PI / (Math.sin(Math.PI * x) * gamma(1.0 - x));
} else {
x -= 1.0;
y = gP[0];
for (int i = 1; i < gP.length; i++) {
y += gP[i] / (x + (double) i);
}
double t = x + 7.5;
return Math.sqrt(2 * Math.PI) * Math.pow(t, x + 0.5) * Math.exp(-t) * y;
}
}
}
-
JJa
- Membre Relatif
- Messages: 254
- Enregistré le: 06 Mar 2008, 15:52
-
par JJa » 03 Mai 2008, 07:14
Il y a un algorithme non codé (écrit en clair) pour la fonction Gamma Incomplète à la page 441 de cet handbook :
J.Spanier, K.B.Oldham, "An Atlas of Functions", Hemisphere Pubishing Corporation, Springer-Verlag, 1987.
-
pomchip
- Messages: 6
- Enregistré le: 02 Mai 2008, 15:19
-
par pomchip » 06 Mai 2008, 16:34
Ok merci du coup de main.
Maintenant, je vais essayer de me degoter un traducteur Java... :ptdr:
-
Jean_Luc
- Membre Relatif
- Messages: 158
- Enregistré le: 25 Avr 2008, 10:17
-
par Jean_Luc » 06 Mai 2008, 16:41
pomchip a écrit:Ok merci du coup de main.
Maintenant, je vais essayer de me degoter un traducteur Java... :ptdr:
De rien, encore une petite précision, ce code était destiné à calculer des
distribution gamma donc ça ne marche que pour des k>=1 (noté

ci-dessus).
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 77 invités