% Une aire sous la courbe de densité légèrement supérieure à 1, comme 1.0151, est due à des erreurs d'approximation numérique, souvent causées par un pas discret ou un faible nombre de points. Bien que légèrement imprécise, cette valeur est généralement acceptable. Pour améliorer la précision, réduisez le pas ou augmentez les réalisations aléatoires.TP Signaux aléatoires - SRT4
%% TP3 Dénération de variables aléatoires discrètes dépendantes
%
% Nom - Prénom : Avenel-Théophile
%
% Supposons deux variables aléatoires discrètes X et Y dont les probabilités conjointes sont données dans le tableau ci-dessous.
% \begin{array}{l|c|c|}
% \hline X,Y& 0 & 1\\
% \hline 0 & 0.3 & 0.2\\
% \hline 1 & 0.2 & 0.3 \\
% \end{array}
% Calculer P(X=0) et P(Y=0).
% Calculer P(Y=0/X=0) et P(Y=0/X=1).
% Générer des valeurs de X et Y et vérifier que l'on obtient les bonnes probabilités.
%
%

close all;
clear all;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Génération de v.a. discrètes dépendantes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

n = 5000; % Nombre de réalisations

% Génération des variables aléatoires discrètes dépendantes
XYgene = jointdv(0.3, 0.2, 0.2, 0.3, n);
X = XYgene(:, 1);
Y = XYgene(:, 2);

%% Probabilités marginales de X
% Probabilité P(X=1)
PX1 = mean(X);
fprintf('P(X = 1) = %.4f\n', PX1);

% Probabilité P(X=0)
PX0 = 1 - PX1; % Puisque P(X=0) + P(X=1) = 1
fprintf('P(X = 0) = %.4f\n', PX0);

%% Probabilités marginales de Y
% Probabilité P(Y=1)
PY1 = mean(Y);
fprintf('P(Y = 1) = %.4f\n', PY1);

% Probabilité P(Y=0)
PY0 = 1 - PY1; % Puisque P(Y=0) + P(Y=1) = 1
fprintf('P(Y = 0) = %.4f\n', PY0);

%% Probabilités conjointes
% Probabilité P(X=0, Y=0)
ind = find(Y == 0); % Indices où Y = 0
XsY0 = X(ind); % Valeurs de X où Y = 0
ind = find(XsY0 == 0); % Indices où X = 0
nbX0Y0 = size(ind, 1);
PX0Y0 = nbX0Y0 / n;
fprintf('P(X = 0, Y = 0) = %.4f\n', PX0Y0);

% Probabilité P(X=0, Y=1)
ind = find(Y == 1); % Indices où Y = 1
XsY1 = X(ind); % Valeurs de X où Y = 1
ind = find(XsY1 == 0); % Indices où X = 0
nbX0Y1 = size(ind, 1);
PX0Y1 = nbX0Y1 / n;
fprintf('P(X = 0, Y = 1) = %.4f\n', PX0Y1);

% Probabilité P(X=1, Y=1)
ind = find(Y == 1); % Indices où Y = 1
XsY1 = X(ind); % Valeurs de X où Y = 1
ind = find(XsY1 == 1); % Indices où X = 1
nbX1Y1 = size(ind, 1);
PX1Y1 = nbX1Y1 / n;
fprintf('P(X = 1, Y = 1) = %.4f\n', PX1Y1);

% Probabilité P(X=1, Y=0)
PX1Y0 = PX1 - PX1Y1; % Probabilité conjointe restante (P(X=1, Y=0))
fprintf('P(X = 1, Y = 0) = %.4f\n', PX1Y0);

%% Probabilités conditionnelles
% Probabilité P(X=0 | Y=0)
ind = find(Y == 0); % Indices où Y = 0
nbY0 = size(ind, 1); % Nombre de Y = 0
XsY0 = X(ind); % Valeurs de X où Y = 0
PX0sY0 = mean(XsY0 == 0); % Probabilité conditionnelle
fprintf('P(X = 0 | Y = 0) = %.4f\n', PX0sY0);

% Probabilité P(X=0 | Y=1)
ind = find(Y == 1); % Indices où Y = 0
nbY1 = size(ind, 1); % Nombre de Y = 0
XsY1 = X(ind); % Valeurs de X où Y = 0
PX0sY1 = mean(XsY1 == 0); % Probabilité conditionnelle
fprintf('P(X = 0 | Y = 0) = %.4f\n', PX0sY1);


% Probabilité P(Y=0 | X=0)
ind = find(X == 0); % Indices où X = 0
nbX0 = size(ind, 1); % Nombre de X = 0
YsX0 = Y(ind); % Valeurs de Y où X = 0
PY0sX0 = mean(YsX0 == 0); % Probabilité conditionnelle
fprintf('P(Y = 0 | X = 0) = %.4f\n', PY0sX0);

% Probabilité P(Y=0 | X=1)
ind = find(X == 1); % Indices où X = 1
nbX1 = size(ind, 1); % Nombre de X = 1
YsX1 = Y(ind); % Valeurs de Y où X = 1
PY0sX1 = mean(YsX1 == 0); % Probabilité conditionnelle
fprintf('P(Y = 0 | X = 1) = %.4f\n', PY0sX1);

%

%% Fonction de génération de variables discrètes dépendantes

%

function XY = jointdv(a, b, c, d, n)
    u = rand(n, 1); % Génération de n nombres aléatoires entre 0 et 1
    XY = zeros(n, 2); % Initialisation du tableau des résultats
    for k = 1:n
        if u(k) < a
            XY(k, :) = [0 0]; % Cas (X = 0, Y = 0)
        elseif u(k) < a + b
            XY(k, :) = [0 1]; % Cas (X = 0, Y = 1)
        elseif u(k) < a + b + c
            XY(k, :) = [1 0]; % Cas (X = 1, Y = 0)
        else
            XY(k, :) = [1 1]; % Cas (X = 1, Y = 1)
        end
    end
end