Une fonction de Matalb

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

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

    voila
    1
    1. Salut,
      comment je peux ajouter cette fonction à la bibliotèque de Matlab?
      -1
      1. 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
        1. /************************************************************************/
          /* 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. n!/(n+1)!
            0