% TP Signaux aléatoires - SRT4
%% TP1 Générateurs
%
% Nom - Prénom : Avenel Théophile
%
% Générer un vecteur de valeurs prises par une variable aléatoire de loi uniforme (valeurs équiréparties entre 0 et 10) (utiliser la fonction rand). Visualiser plusieurs réalisations de la variable aléatoire. Calculer la moyenne et la variance de la variable aléatoire. Comparer avec la théorie. Tracer l'histogramme.
% Même question pour une variable aléatoire de Bernouilli prenant les deux valeurs 0 ou 1 avec les probabilités p et 1-p.
% Même question pour une variable aléatoire Gaussienne (on utilisera la fonction randn).
%



close all;
clear all;
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Générateurs
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%

% Loi uniforme


N = 10000;  % Définition du nombre de réalisations


%% Loi uniforme
% Génération de valeurs aléatoires (uniforme sur [0, 10])
X = 10 * rand(1, N);

% Visualisation
figure(1); % Ouvre une nouvelle figure
plot(X, '.')
title('Visualisation de la variable aléatoire uniforme')

% Tracé de l'histogramme
figure(2); % Ouvre une nouvelle figure
histogram(X, 10, 'Normalization', 'pdf')
title('Histogramme de la loi uniforme')
xlabel('Valeur')
ylabel('Densité de probabilité')

% Estimation de la moyenne et de la variance
moyenne_X = mean(X);
variance_X = var(X);

moy_X = sum(X)/N;
var_X = 1/N * sum((X-moy_X).*(X-moy_X))

% Valeurs théoriques
moyenne_theorique_X = 5;
variance_theorique_X = (10^2) / 12;

% Affichage des résultats
fprintf('Loi uniforme : \n');
fprintf('Moyenne estimée = %.2f, Moyenne théorique = %.2f\n', moyenne_X, moyenne_theorique_X);
fprintf('Variance estimée = %.2f, Variance théorique = %.2f\n', variance_X, variance_theorique_X);

% Loi de Bernoulli



N = 10000;  % Définition du nombre de réalisations

%% Loi de Bernoulli
p = 0.8;

% Génération de valeurs aléatoires
XB = zeros(1, N);
for k = 1:N
    tirage = rand;
    if tirage < p
        XB(1, k) = 1;
    end
end

% Visualisation des tirages
figure;
plot(XB, '.')
title('Visualisation de la variable aléatoire de Bernoulli')

% Tracé de l'histogramme
figure;
histogram(XB, 2, 'Normalization', 'probability')  % Deux catégories 0 et 1
title('Histogramme de la loi de Bernoulli')
xlabel('Valeur')
ylabel('Probabilité')

% Estimation de la moyenne et comparaison avec la valeur théorique
moyenne_XB = mean(XB);

variance_XB = var(XB);


% Valeurs théoriques
moyenne_theorique_XB = p;
variance_theorique_XB = p * (1 - p);

% Affichage des résultats
fprintf('\nLoi de Bernoulli : \n');
fprintf('Moyenne estimée = %.2f, Moyenne théorique = %.2f\n', moyenne_XB, moyenne_theorique_XB);
fprintf('Variance estimée = %.2f, Variance théorique = %.2f\n', variance_XB, variance_theorique_XB);



% Loi Normale


%% Loi Normale (Gaussienne)
mx = 2;  % Moyenne théorique
vx = 4;  % Variance théorique
sx = sqrt(vx);  % Écart-type

% Génération de valeurs aléatoires
XG = mx + sx * randn(1, N);

% Visualisation des tirages
figure;
plot(XG, '.')
title('Visualisation de la variable aléatoire Gaussienne')

% Tracé de l'histogramme
figure;
histogram(XG, 50, 'Normalization', 'pdf')  % 50 intervalles
title('Histogramme de la loi Gaussienne')
xlabel('Valeur')
ylabel('Densité de probabilité')

% Estimation de la moyenne et de la variance
moyenne_XG = mean(XG);
variance_XG = var(XG);

% Affichage des résultats théoriques
fprintf('\nLoi Gaussienne : \n');
fprintf('Moyenne estimée = %.2f, Moyenne théorique = %.2f\n', moyenne_XG, mx);
fprintf('Variance estimée = %.2f, Variance théorique = %.2f\n', variance_XG, vx);
