Histogramme et scilab

Bonjour,

Je ne sais pas si ce forum est fait pour le type de question que j'ai à poser. Mais je tente quand même, on verra bien.
Avec scilab, j'ai simulé la somme de 40 v.a. i.i.d. de loi uniforme sur [0;1]. J'ai réalisé 1000 simulations et dessiné un histogramme dont les classes ont pour amplitude 1. J'ai voulu diminuer la taille de l'amplitude des classes et passer à 0.5. Le problème est que histplot a pris pour hauteur de rectangle la fréquence de la classe, alors que je voudrais qu'il prenne 2 fois la fréquence de la classe, pour m'approcher de la densité de la loi normale. Je vous mets mon code ci-dessous :
k=1000;
q=40;
 m=zeros(1,k);
for i=1:k
    L=zeros(1,q);
    for j=1:q
    L(j)=rand();
    end
L=sum(L);
m(i)=L;
end
 clf();
 x=0:1:40;
 histplot(x,m,style=2)
 // Calcul de la moyenne
 
 mu=sum(m)/k;
 
 // Calcul de la variance
 
 va=sum((m-mu).^2)/k;
 sigma=sqrt(va);
 
 // représentation de la loi normale
 
 xbis=0:0.1:q;
 y=zeros(1,q*10+1);
 for j=1:q*10+1
     y(j)=1/(sigma*sqrt(2*%pi))*exp(-(xbis(j)-mu)^2/(2*va));
 end
 plot(xbis,y)
 a=gca()
 a.grid=[1 1]
 a.thickness=1
x=0:0.5:40;
histplot(x,m,style=2)

Savez-vous comment remédier à ce problème ?
Merci pour votre contribution.

Réponses

  • Ca me parait bien long comme code, il doit bien y avoir en scilab l'equivalent du code Xcas suivant:
    m:=seq(sum(ranv(40,uniform,0,1)),j,1,1000);
    histogram(m,0,0.5);plot(normald(mean(m),stddev(m),x),x,13,27)
    
  • J'ai exécuté vos lignes de commandes dans xcas.
    La fonction histogram fait ce qu'il faut faire, à savoir : la hauteur des rectangles vaut 2 fois la fréquence de la classe. Par contre histplot de scilab ne le fait pas.
    Je me dis que ça doit pouvoir se faire avec scilab, ce serait bizarre que l'on ne puisse pas le faire. Mais en lisant l'aide de scilab sur la fonction histplot, je ne trouve pas comment faire.
  • J'ai du mal à comprendre ce qui ne te convient pas dans ton code Scilab initial (j'ai réécris le code et placé côté à côté les graphiques dans les 2 cas, j'ai changé k=1000 en k=10000) :
    k=10000 ; q=40 ; x=[0:1:q]
    // simulations de m
    L=rand(k,q) ; m=sum(L,"c")
    // espérance et variance de m
    mu=mean(m) ; va=mean((m-mu).^2) ; sigma=sqrt(va)
    // la loi normale de paramètres ceux de m
    xbis=[0:0.1:q] ; y=zeros(xbis)
    for j=1:length(xbis)
        y(j)=1/(sigma*sqrt(2*%pi))*exp(-(xbis(j)-mu)^2/(2*va));
    end
    //graphiques
    subplot(1,2,1) ; histplot(x,m,style=2) ; plot2d(xbis,y,style=5)
    a=gca() ; a.grid=[1 1] ; a.thickness=1
    subplot(1,2,2) ; histplot([0:0.5:q],m,style=2) ; plot2d(xbis,y,style=5)
    a=gca() ; a.grid=[1 1] ; a.thickness=1
    
  • Bonsoir,

    J'ai exécuté vos lignes de commande, vous obtenez comme moi : pour les deux histogrammes, la hauteur des rectangles est égale à la fréquence de la classe correspondante. Dans le graphique de gauche, tout va bien, car l'amplitude des classes valant 1, donc aire du rectangle= fréquence de la classe. Par contre pour le graphique de droite aire du rectangle $\neq$ fréquence de la classe. Donc l'histogramme est bien en dessous de la courbe en cloche. Il faudrait que la hauteur du rectangle soit égale à deux fois la fréquence de la classe pour que les rectangles "remontent" et que l'on "colle" à la courbe en cloche.
  • Je ne vois pas du tout les histogrammes "en-dessous" de la courbe chez moi (scilab 5.5.2).
  • Ca ressemble à un bug introduit dans scilab 6 (dans une première version, j'avais multiplié la largeur des classes par deux, plutôt que de la diviser... Je corrige maintenant).62410
    62412
    5.png 154.3K
    6.png 145.4K
  • Bonjour,
    Il faut donc que je desinstalle la version 6 et installe la version 5.5.2 ou puis je par une manip régler le pbm sur la version 6 ?
  • Pas besoin de désinstaller la 6, tu peux avoir les deux versions simultanément (j'en ai trois simultanément).
  • @bulledesavon : difficile de se comprendre en effet sans savoir ce que chacun de nous observait chez lui. ;-)
Connectez-vous ou Inscrivez-vous pour répondre.