next up previous
suivant: À propos de ce

Un exemple :
Simulation d'une loi de Poisson discrète tronquée

LP tronquée à n : P(X=k)=e^{-l}*{l^k}/{k!} si k<n et le reste du poids sur P(X=n).

function [lpd] = loipoisson(n,lambda)
   lpd=zeros(1,n+1);    // pour avoir un vecteur ligne
                      // dont les coefficients sont de'cale's
   lpd(1)=%e^(-lambda);
   s=lpd(1);
   for k=1:n-1, lpd(k+1)=lpd(k)*lambda/k, s=s+lpd(k+1), end;
   lpd(n+1)=1-s;
endfunction

=============================================================================

function [lpd] = loipoisson2(n,lambda) // la même avec un vecteur
                             // colonne allongé au fur et à mesure
   lpd(1)=%e^(-lambda)
   s=lpd(1)
   for k=1:n-1, lpd(k+1)=lpd(k)*lambda/k, s=s+lpd(k+1), end
   lpd(n+1)=1-s
endfunction

=============================================================================

function [lpr] = loipoissonrepart(n,lambda) // fonction de
         // répartition en cumulant : lpr est un vecteur colonne
   lpr=zeros(n+1,1) // déclaration de taille du tableau
   lpr(1)=%e^(-lambda)
   s=lpr(1)
   for k=1:n-1, lpr(k+1)=lpr(k)*lambda/k, s=s+lpr(k+1), end
                                   // calcul de la distribution
   for k=2:n, lpr(k)=lpr(k-1)+lpr(k), end // calcul cumulatif
   lpr(n+1)=1 // pour être sûr
endfunction

=============================================================================

function alea = aleaPoisson(n,lambda)      // en test
       // tabrepart = loipoissonrepart(n,lambda) à faire avant usage
       // tabrepart(n+1)=1 par hypothèse
   s=rand();
   i=1;
   while s>tabrepart(i), i=i+1, end;
   alea=i;
endfunction

=============================================================================

function [freqtirage]= tiragePoisson(N,n,lambda) // pour de vrai
  // fait aleaPoisson(n,p) N fois et stocke les fréquences dans
  // le tableau freqtirage de dimension n+1.
   freqtirage=zeros(n+1,1);
   tabrepart = loipoissonrepart(n,lambda);
  // write(%io(2),"fonction de repartition")
  // write(%io(2),tabrepart,"(""| "",e10.3,"" |"")")
  // write(%io(2),1-tabrepart(n+1),"(""* "",e10.3,"" *"")")
   for k=1:N,
      s=rand();
      i=1;
      while s>tabrepart(i), i=i+1, end;
      freqtirage(i)=freqtirage(i)+1;
   end;
endfunction

Un message classique lors de la redéfinition d'une fonction

->getf("poisson.sci") Warning :redefining function: loipoisson

=============================================================================

 
 -->LPtirage= tiragePoisson(200,20,5)
  LPtirage  =
 
 !   2.  !
 !   5.  !
 !   16. !
 !   30. !
 !   36. !
 !   39. !
 !   28. !
 !   24. !
 !   10. !
 !   5.  !
 !   2.  !
 !   3.  !
 !   0.  !
 !   0.  !
 !   0.  !
 !   0.  !
 !   0.  !
 !   0.  !
 !   0.  !
 !   0.  !
 !   0.  !

============================================================================

->plot2d3([1:21],LPtirage)

->plot2d2([1:21],LPtirage)

permet de tracer les valeurs sous forme d'histogramme

ou encore mieux pour compter a` partir de 0

->plot2d3([0:20],LPtirage) ->plot2d2([0:20],LPtirage)

=============================================================================



next up previous
suivant: À propos de ce
Jean-Marc Steyaert 2002-05-17