Marche aléatoire, binomiale

M = nombre total de pas
R = nombre de réalisations (On peut se rendre jusqu'à 1 000 000 avec une minute ou deux de calculs. Commencer avec des petits chiffres et 10 000. Pour 100 000 déjà la binomiale et la simulation concordent très bien)
p = probabilité d'un pas à droite

M=10;
R=15;
p=0.2;
q=1-p;

Chaque colonne de A (indice j) contient les M valeurs tirées d'une distribution telle que on a la valeur 1 avec probabilité p.
S a une seule entrée par réalisation de la marche aléatoire. Cette entrée contient la somme de chaque rangée, c’est-à-dire le nombre de pas faits à droite dans cette réalisation de la marche aléatoire.

A=Table[Boole[RandomReal[]<p],{i,1,R},{j,1,M}];
MatrixForm[%]
S=Table[(∑_(j=1)^M)A[[i,j]],{i,1,R}]

Histogramme du nombre de fois que n pas de la marche de M pas ont été faits parmi les R réalisations de la même marche de M pas.

H=Table[Sum[Boole[S[[j]]==n],{j,1,R}],{n,1,M}]

ListPlot[(H/R),PlotStyle->PointSize[0.02`],BaseStyle->{FontFamily->"Times",FontSize->20},AxesOrigin->{0,0},PlotRange->{{0,3M p},{0,0.35`}}]

Comparer à la binomiale (Petites valeurs, M=10, puis plus grandes M=40 et M=160, facteur 4 chaque fois)

B=Table[((M!)/(n!(M-n)!))(p^n) (q^(M-n)),{n,1,M}];

ListPlot[{(H/R),B},PlotStyle->PointSize[0.02`],BaseStyle->{FontFamily->"Times",FontSize->20},PlotRange->{{0,3 M p},{0,0.35`}}]

ListPlot[B,PlotStyle->PointSize[0.02`],BaseStyle->{FontFamily->"Times",FontSize->20},PlotRange->{{0,3 M p},{0,0.35`}}]

Remarque : ListPlot commence nécessairement à 1. C'est la raison pour laquelle 0 n'a pas été inclu.