Une fonction de Matalb

Fermé
Marie - 1 janv. 2006 à 00:37
 jija - 8 mars 2015 à 21:31
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

erratum

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

voila
1
Salut,
comment je peux ajouter cette fonction à la bibliotèque de Matlab?
-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
myweb Messages postés 10 Date d'inscription samedi 31 décembre 2005 Statut Membre Dernière intervention 25 janvier 2006 29
1 janv. 2006 à 00:45
/************************************************************************/
/* 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
n!/(n+1)!
0