function e = 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;
end

function [f,v] = 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 frequences



