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

Approximation de la fonction gamma incomplete

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

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 77 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite