// --------------------------------------
//  Université de Nice -- Sophia Antipolis
//  Polytech'Nice -- Sophia
//  Département Électronique, 3e année
//  Cours de Statistique Appliquée
//  Iannis.Aliferis@unice.fr
//  deneire@unice.fr
// ---------------------------------------
//   exécuter avec la commande
//  > exec('le_nom_du_fichier.sce')
//  Vous pouvez, à la fin, obtenir les valeurs
//  de toutes les variables calculées en tapant leur nom
//  dans la ligne de commande.
// ---------------------------------------
//  Chapitre :
//  Statistique Inférentielle: échantillonnage
// ---------------------------------------
//  Script :
//  Visualiser la v.a. uniforme
// ---------------------------------------
//  Description
// 
//  Tracer la ddp et la fdr de la v.a. uniforme, faire varier la valeur max.
// --------------------------------------
clear;
clf;
// --------------------------------------
//  Gestion minimale des fichiers de sortie (figures)
// --------------------------------------
//  Définir le nom de base des fichiers créés avec les figures
filename = "echantillonnage_loi_uniforme"
//  Définir un compteur pour les fichiers créés ; ils auront tous le même nom de base plus un numéro.
file_index = 1;
// --------------------------------------
//  La v.a. uniforme
// --------------------------------------
a = 0;                             //  Fixer la valeur minimale à zéro.
b = [0.5: 0.5 : 10];               //  Faire varier la valeur maximale 0.5 à 10 par pas de 0.5
points = 500 ;                     // nombre de points 
for ( i = 1:length(b) )            //  Une boucle sur toutes les valeurs possibles de b
      by=(max(b)-a+2)/points;
	x = [a-1 : by : max(b)+1-by];          //  les valeurs de x
	esp.x = ( a + b(i) ) / 2;              //  l'espérance (formule cours)
	var.x = ( a - b(i) )^2 / 12;           //  la variance (formule cours)
	std.x = sqrt( var.x );                 //  et l'écart-type
                                            	//  la densité de probabilité
	px.uniforme = zeros(1,size(x,2));
	px.level=1./(b(i)-a);
	px.uniforme = ((x>=a)&(x<=b(i))).*px.level;
                                            	//  La fonction de répartition
	Fx.uniforme = cumsum(px.uniforme);
	Fx.uniforme = Fx.uniforme/max(Fx.uniforme);
	// --------------------------------------
	//  Tracer les courbes
	// --------------------------------------
	//  En haut la fonction de probabilité
	//  garder toujours les mêmes limites, correspondant à la courbe la plus haute
	haut = 1/( min(b) - a );
	clf;
	subplot(211);
	plot( x, px.uniforme)
	axes=get("current_axes");
	axes.data_bounds=[-1,max(b)+1,0,haut];
	axes.x_label.text="x";
	axes.y_label.text="pX(x)";
	axes.title.text="px";
	
	//  Ajouter un polygone pour montrer l'écart type, de part et d'autre de l'espérance:
	//  les valeurs de x concernées sont entre esp.x - 0.5*sd.x et esp.x + 0.5*sd.x
	xset("color",28);
	xfrect(esp.x-0.5*std.x,px.level,std.x,px.level);
	xset("color",0)
	plot([esp.x,esp.x],[0,haut],"b");              //  ajouter une ligne pour l'espérance
	//  ajouter deux fleches pour l'écart-type
	xarrows( [esp.x-0.5*std.x, esp.x+0.5*std.x],[ haut-0.2,haut-0.2],min(ceil(b(i)),5) );
	xarrows( [esp.x+0.5*std.x, esp.x-0.5*std.x],[ haut-0.2,haut-0.2],min(ceil(b(i)),5));
	deciles = [(b(i)-a)/10:(b(i)-a)/10:(b(i)-a)];  	//  Ajouter des lignes pour les déciles
	px.deciles = 1/b(i)*ones(1,9);	                 //  et la p_X(x) qui leur correspond
	//  et finalement créer les lignes verticales, entre y=0 et y=px.deciles, à x=deciles
	for p=1:9
        plot([deciles(p),deciles(p)],[0,px.deciles(p)],'g');
      end
  	subplot(212);
	plot( x, Fx.uniforme)                          // Fonction de répartition
	axes=get("current_axes");
	axes.data_bounds=[-1,max(b)+1,0,1];
	axes.x_label.text="x";
	axes.y_label.text="FX(x)";
	axes.title.text="Fx";

	//  Ajouter un polygone pour montrer l'écart type, de part et d'autre de l'espérance:
	//  les valeurs de x concernées sont entre esp.x - 0.5*sd.x et esp.x + 0.5*sd.x
	//  mêmes valeurs qu'avant (ddp), déjà calculées dans x.poly
	//  x.poly = x[ (x > esp.x - 0.5*sd.x) & (x < esp.x + 0.5*sd.x) ]
	//  et les valeurs de y sont celles de la F_X(x)
             
	xset("color",30);
	xmin=esp.x-0.5*std.x;
	xmax=esp.x+0.5*std.x;
	ymin=xmin/b(i);
	ymax=xmax/b(i);
	xfpoly([xmin,xmin,-2,-2,xmax,xmax],[0,ymin,ymin,ymax,ymax,0]);
      xset("color",0);
	plot( x, Fx.uniforme);                // réafficher Fx(x) (effacé par le polygone)
	//  Ajouter des lignes pour les déciles:
	xset("color",5);
      for p=1:10
        plot([deciles(p),deciles(p)],[0,p/10],'g');
        plot([-2,deciles(p)],[p/10,p/10],'g');
      end
      xset("color",0);
 	//  Exporter en eps
	xs2eps(0,strcat([filename,"_scilab_fig",string(file_index),".eps"]));
	//  Augmenter le compteur des fichiers créés.
	file_index = file_index + 1;
	pause;
end


