Section : demarre_mupad
Précédent : Programmation
Suivant : Domaines
MuPAD n'est pas encore aussi bien structuré que Mathematica ou Maple
pour ce qui est des probabilités et des statistiques. Le
générateur pseudo-aléatoire de base, random, retourne des entiers
entre
et
. Sous la forme
random(n), il retourne des entiers entre 0 et
.
alea:= random/1e12;
suite:=alea() $ i=1..100;
moyennes:=_plus(suite[i] $ i=1..n)/n $ n=1..100;
moygraph:=point(n,moyennes[n]) $ n=1..100;
plot2d([Mode=List,[moygraph]]);
plot2d([Mode=List,[point(alea(),alea())$i=1..100]]);
piece:=2*random(2)-1:
pileface:=piece() $ i=1..100;
gains:=_plus(pileface[i] $ i=1..n) $ n=1..100;
gainsgraph:=point(n,gains[n]) $ n=1..100;
plot2d([Mode=List,[polygon(gainsgraph)]]);
moyennes:=gains[n]/n $ n=1..100;
moygraph:=point(n,moyennes[n]) $ n=1..100;
plot2d([Mode=List,[moygraph]]);
Pour les statistiques, quelques fonctions de base sont fournies dans le module
stats. On y trouve le calcul
de la moyenne, médiane, variance et écart-type, ainsi que les fonctions de
répartition de la loi normale, loi du Chi-Deux et loi de Student. On en
déduit les densités correspondantes en dérivant par diff, les
quantiles en inversant numériquement la fonction de répartition. Il faut
noter que la commande export ne fonctionne pas pour ce module, à
cause d'une collision malheureuse entre la fonction stats::normal
(fonction de répartition de la loi normale) et la fonction du noyau
normal (forme normale d'une expression).
?stats::*
?stats::normal
stats::normal(1.96);
stats::normal(-2.3263);
diff(stats::normal(x),x);
plotfunc(stats::Tdist(x,5),
stats::Tdist(x,10),
stats::normal(x),x=[-3,3]);
export(numeric):
newton(stats::normal(x)=0.975,x);
newton(stats::Tdist(x,5)=0.975,x);
newton(ChiSquare(x,5)=0.975,x);
newton(ChiSquare(x,5)=0.975,x=3..10);
Il est utile de disposer d'un certain nombre de fonctions de base, pour la
génération d'échantillons aléatoires, et la représentation graphique.
Les exemples suivants utilisent les fonctions données dans la section
précédente. On les suppose rassemblées dans le fichier
probastat.mu.
read("probastat.mu"):
pf:=ech_ber(1000,0.3):
frequences(pf);
d:=[random(6)()+1 $ i=1..1000]:
freq:=frequences(d);
plotlib::dataplot(Column,[[freq[i][2]$i=1..6]]);
bin:= _plus(ech_ber(4,0.5)) $ i=1..1000:
freq:=frequences(bin);
plotlib::dataplot(Column,[[freq[i][2]$i=1..6]]);
x:=ech_uni(1000):
frequence_classe(x,0.3,0.7);
histogramme(x,[0,0.1,0.3,0.6,1]);
histo_reg(x,0,1,10);
x:=ech_uni(1000):
expo:=map(x,-ln);
histogramme(expo,[0,0.2,0.6,1.5,3,5]);
histo_reg(expo,0,5,20);
x:=ech_uni(1000):
y:=ech_uni(1000):
tri1:=[min(x[i],y[i]) $ i=1..1000];
histo_reg(tri1,0,1,10);
tri2:=[x[i]-y[i] $ i=1..1000];
histo_reg(tri2,-1,1,10];
x:=ech_nor(1000):
frequence_classe(x,0.2,1.5);
stats::normal(1.5)-stats::normal(0.2);
histo_reg(x,-3,3,20);
x:=ech_uni(1000):
y:=ech_uni(1000):
nuage(x,y);
x:=ech_uni(1000):
y:=ech_uni(1000):
tri1:=[min(x[i],y[i]) $ i=1..1000];
x:=ech_uni(1000):
y:=ech_uni(1000):
tri2:=[max(x[i],y[i]) $ i=1..1000];
nuage(tri1,tri2);
x:=ech_nor(1000):
y:=ech_nor(1000):
nuage(x,y);
r:=0.8;
z:=sqrt(1-r^2)*x + r*y:
nuage(x,z);
r:=-0.8;
z:=sqrt(1-r^2)*2*x + r*y:
nuage(x,z);