Distribution normale en C : Explication code
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Distribution normale en C : Explication code



  1. #1
    invitebfb0bb71

    Distribution normale en C : Explication code


    ------

    Bonjour,
    j'ai trouvé ce code sur le net, il fonctionne bien, pourriez-vous me l'expliquer ?

    Merci

    Code:
    #ifndef Pi
    #define Pi 3.141592653589793238462643
    #endif
    #include <math.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    // création de la fonction de distribution normale
    double CND( double X )
    {
        
        double L, K, w ;
        
        double const a1 = 0.31938153, a2 = -0.356563782, a3 = 1.781477937;
        double const a4 = -1.821255978, a5 = 1.330274429;
        
        L = fabs(X);
        K = 1.0 / (1.0 + 0.2316419 * L);
        w = 1.0 - 1.0 / sqrt(2 * Pi) * exp(-L *L / 2) * (a1 * K + a2 * K *K + a3 * pow(K,3) + a4 * pow(K,4) + a5 * pow(K,5));
        
        if (X < 0 ){
            w= 1.0 - w;
        }
        return w;
    }
    Je débute la programmation depuis 1 semaine, alors j'ai du mal à comprendre, mais c'est aussi niveau mathématique.
    Je crois que w c'est la fonction de distribution, je comprend pas ce qu'est L et K et aussi je ne comprend ce que sont les constants a1, a2 ... merci

    -----

  2. #2
    Chanur

    Re : Distribution normale en C : Explication code

    Ta fonction calcule :
    où L est la valeur absolue de x ; K vaut et sont des constantes.

    Ensuite, si x est négatif, on remplace le résultat w par 1-w. Assez logique, vu l'allure de la courbe ci-dessous.

    Je ne sais pas d'où viennent les coefficients . J'imagine qu'ils ont été obtenus par intégration numérique de :

    La fonction obtenue est effectivement la distribution normale centrée réduite, à laquelle on a ajouté 0.5 (pour avoir un résultat entre 0 et 1).
    On peut la calculer à partir de la fonction d'erreur, mais je n'ai pas trouvé l'explication mathématique de l'approximation numérique faite ici.

    J'ai vérifié : ça colle exactement :
    courbe.jpg
    A part ça, l'implémentation n'est pas parfaite : si on a besoin d'une fonction rapide, on peut facilement faire mieux avec le même algorithme (ne pas recalculer 1.0 / sqrt(2 * Pi) à chaque appel, remplacer chaque appel à pow() par une multiplication, ...)
    Images attachées Images attachées  
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  3. #3
    deyni

    Re : Distribution normale en C : Explication code

    Question à part: Quel est le logiciel pour utilisé pour dessiner les courbes?
    Deynid'oiseaux partout !! :rire:

  4. #4
    Chanur

    Re : Distribution normale en C : Explication code

    D'abord ta fonction à laquelle j'ai ajouté un main :
    Code:
    int main (int argc, char ** argv)
            {
            double x;
            for (x=-5; x<=5; x+=.001)
                    {
                    printf ("%lf\t%lf\n", x, CND (x));
                    }
           return 0;
           }
    ça m'a donné un joli tableau que j'ai lu avec LibreOffice Calc (Excel aurait marché aussi), j'ai ajouté la colonne ERF(0;A1/RACINE(2))/2+0,5 et j'ai tracé un diagramme. Facile.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Statistiques, loi normale, distribution...
    Par invite14e96802 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 15/04/2012, 00h10
  2. Distribution marginale d'une Normale-Normale
    Par invite358ffd6a dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 02/10/2011, 17h05
  3. norme vecteur distribution non normale...
    Par invite75f1f549 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 03/11/2010, 18h19
  4. La distribution de poisson est asymptotiquement normale ?
    Par invite234d9cdb dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 15/05/2009, 15h49
  5. Questions sur la distribution de loi normale
    Par inviteea694312 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 25/02/2009, 09h07