grand
permet la simulation des lois discrètes usuelles.
Voici une fonction de génération d'une loi discrète quelconque,
par la méthode d'inversion.
function e = ech_dist(m,n,x,d) // ech_dist(m,n,x,d) retourne une matrice de taille mXn dont les // coefficients sont des realisations independantes de la loi // sur x specifiee par le vecteur d, normalise a 1. d = d/sum(d); // normaliser par la somme loi=cumsum(d); // calculer la fonction de repartition for i=1:m, for j=1:n, k=1; r=rand(1,1); // appel de random while r>loi(k), // simulation par inversion k=k+1, end; e(i,j)=x(k); end; endLa fonction suivante nous servira à calculer les fréquences des différentes valeurs apparaissant dans un échantillon.
function [f,v] = freq_emp(ech) // freq_emp(ech) Calcule les frequences empiriques des valeurs // differentes de ech. Retourne un vecteur des valeurs differentes // de ech et un vecteur des frequences correspondantes. taille=size(ech,"*"); // taille de l'echantillon v=[ech(1)]; // valeurs differentes for k = 2:taille, // parcourir l'echantillon if ech(k)~=v then, // la valeur v(k) est nouvelle v = [v,ech(k)]; // la rajouter end; end; v = gsort(v,"c","i"); // trier les valeurs trouvees nbval=size(v,"*"); // nombre de valeurs differentes effectifs = []; // effectifs des valeurs for k = 1:nbval, // parcourir les valeurs e = size(find(ech==v(k)),"*");// calculer l'effectif de v(k) effectifs = [effectifs,e]; // le rajouter end; f=effectifs/sum(effectifs); // calculer les frequencesNous supposons que les deux fonctions
ech_dist
et freq_emp
ont été placées dans le fichier lois_discretes.sci
.
Voici deux exemples d'utilisation.
getf("lois_discretes.sci") x = ech_dist(1,100,["a","b","c"],[0.5,0.3,0.2]) x = ech_dist(1,1000,["a","b","c"],[0.5,0.3,0.2]); [f,v] = freq_emp(x) plot2d3("gnn",[1:3]',f',5,"111","frequences",[0,0,4,1]) x = ech_dist(1,1000,[1:10],ones(1,10)); [f,v] = freq_emp(x) xbasc() plot2d3("gnn",v',f',5,"111","frequences",[0,0,11,0.5])