Une fonction de Matalb
Marie
-
jija -
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.
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
-
-
-
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 -
/************************************************************************/
/* 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
*/