Rappel sur la normalisation d'histogramme
Bonjour à tous,
Je suis en train de coder une petit code pour générer une variables aléatoire en utilisant l'algorithme d'acceptation rejet. Je l'obtiens avec la fonction randnt_ar2 (codée par mes soins).
Le problème ne pose pas sur cette fonction (pas encore...) mais sur la comparaison avec la véritable densité de probabilité (connue). En effet, pour tracer à la fois densité de probabilité théorique et l'histogramme de la variable générée, je dois normaliser l'histogramme obtenu.
Pour moi, la méthode consiste à diviser chaque classe (bins) par N*Taille_Classe, avec N le nombre de points de la variable aléatoire générée.
Or quand je trace les deux, il y a un très fort décalage.
Donc, confirmez vous que ma normalisation est bonne? Et dans ce cas le problème vient de ma fonction randnt_ar2 elle même. Mais j'aimerai m'assurer que le problème ne vient pas de là.
Mon code main est le suivant
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Partie I: Simulation de la loi normale tronquée positive %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Paramètres de la loi Gaussienne tronquée
N=10000;%Nombre de points
m=-1;%Moyenne
sigma2=0.1;%variance
%Element pour l'histogramme
Nbins=50;
Z=zeros(N,1);
%Generation de Z par methode d'acceptation 2 (loi candidate: loi exp)
Z=randnt_ar2(m,sigma2,N);
%Elements pour tracer loi normale tronquée
Taille_Bins_z=(max(Z)-min(Z))/Nbins;
Coeff_norm_z=Taille_Bins_z*N;
[Nz,Xz]=hist(Z,Nbins);
Nz=Nz./Coeff_norm_z;%Normalisation de l'histogramme
f_th_z=f(Xz',m,sigma2);
plot(Xz,Nz,'.k',Xz,f_th_z,'*r'); |
En espérant être clair.