Une fonction de Matalb

Marie -  
 jija -
Salut,
je cherche la fonction de Matlab qui donne le nombre de combinaisons d'un nombre n parmi p. J'ai trouvé un document qui indique que cette fonction est "cnp(n,p)" mais le logiciel m'indique que cette fonction est indéfinie.
Aidez moi SVP.
Merci.

4 réponses

  1. ebousquie
     
    erratum

    c'est gamma(n+1) qui calcule n!

    voila
    1
  2. Marie
     
    Salut,
    comment je peux ajouter cette fonction à la bibliotèque de Matlab?
    -1
  3. ebousquie
     
    Hello
    y'a aussi la possibilité d'utiliser le fait que cnp(n,p) n'est autre que n!/(p!*(n-p)!)

    Or la fonction factorielle "n!" pour un entier n se calcule avec Matlab à l'aide de gamma(n).
    Tu peux donc taper

    fuction resultat=cnp(n,p)
    resultat=gamma(n)/(gamma(p)*gamma(n-p))
    end

    hope it helps
    -1
  4. myweb Messages postés 10 Statut Membre 29
     
    /************************************************************************/
    /* ce programme calcule la combinaison de p parmi n
    /* on ne peut pas ici calculer Cnp avec sa formule qui utilise les
    /* factorielles car 13! est trop grand pour etre stocke dans la
    /* memoire de l'ordinteur et pourtant cnp(13,5) a une valeur reelle
    /* qui rentre dans la memoire de l'ordinteur (=1287)
    /*
    /* on utilise donc la formule de recurrence pour calculer cnp
    /************************************************************************/

    #include<stdio.h>

    int cnp(int n, int p);

    main(){
    int n,p;

    printf("Calcul de Cnp :\n");

    printf(" n = ");
    scanf("%d",&n);

    printf(" p = ");
    scanf("%d",&p);

    if (p>n) {
    printf("calcul impossible : p>n !\n");
    } else {
    printf("Cnp = %d\n",cnp(n,p));
    }
    }

    int cnp(int n, int p){
    if (p == 0) {
    return 1;
    } else {
    return cnp(n-1,p-1)*n/p ;
    }
    }

    /* explications :
    * selon la formule de recurrence donnee dans l'enonce,
    * cnp(n,p) = (n/p)*cnp(n-1,p-1) pour p non nul
    * et cnp(n,0) = 1, quelque soit n
    *
    * si on calcule cnp(5,3), la fonction retourne comme
    * resultat 5/3 * cnp(4,2).
    * la fonction cnp s'appelle donc elle-meme pour ce calcul.
    * pour cnp(4,2) elle retourne 4/2 * cnp(3,1)
    * elle s'appelle donc encore une fois
    * pour cnp(3,1) elle retourne 3/1 * cnp(2,0)
    * elle s'appelle donc encore une fois
    * pour cnp(2,0) elle retourne 1
    * l'ordinateur peut donc calculer cnp(3,1), ce qui lui
    * permet de calculer cnp(4,2), puis cnp(5,3).
    *
    * donc cnp(3,1) = 3/1 * 1 = 3
    * et cnp(4,2) = 4/2 * cnp(3,1) = 4/2 * 3 = 6
    * et cnp(5,3) = 5/3 * cnp(4,2) = 5/3 * 6 = 10
    *
    * cette propriete de s'appelle la RECUSIVITE
    */
    -2
    1. jija
       
      n!/(n+1)!
      0