%% Función de variable aleatoria
% Copyright (c) 2023 G.T.A.S. (Grupo Tratamiento Avanzado de Señal). Universidad de Cantabria.
%
% Este fichero muestra de forma práctica, mediante simulaciones de Montecarlo, la transformación de variables aleatorias.
% Se generan realizaciones de una variable aleatoria X que son transformadas empleando una función y=g(x) definida por el usuario. Posteriormente se representan los histogramas, las medias y las varianzas de las v.a.'s involucradas.
%% Generación de realizaciones de la v.a. de partida
% Partimos de N=100000 realizaciones de la v.a. X.

N = 100000;         % Número de realizaciones
x = rand(1,N);      % N Realizaciones de v.a. uniforme en [0,1]
% x = rand(1,N)-1/2;  % N Realizaciones de v.a. uniforme en [-1/2,1/2]
% x = randn(1,N);     % N Realizaciones de v.a. Gaussiana de media 0 y varianza 1
% x = exprnd(1/2,1,N);  % N Realizaciones de v.a. exponencial de parámetro c=2

%% Transformación de la v.a.
% Se realiza la transformación Y=g(X). Modifique la función de matlab que se encuentra al final de este fichero con la expresión que desea para la transformación, y=g(x).

y = g(x);       % Modifique la función de matlab g que se encuentra al final del Live Script con la expresión que desee

% Representamos la estima de las f.d.p.'s de las dos v.a.'s. Modifique, si es necesario, el vector intervalos_histograma para que la representación de los histogramas sea apropiada.

intervalos_histograma = -5:0.1:5;  % Sólo evaluaremos el histograma en estos intervalos. Puede modificarlo a su gusto
subplot(211);histogram(x,intervalos_histograma,'Normalization','pdf');xlabel('x');ylabel('Estima de f_X(x)')
subplot(212);histogram(y,intervalos_histograma,'Normalization','pdf');xlabel('y');ylabel('Estima de f_Y(y)')

% Compruebe si la estima de la f.d.p. resultante coincide con (se aproxima a) lo calculado teóricamente. Preste especial atención al rango de la v.a. X y de la v.a. Y, es decir, \Omega_X y \Omega_Y.
%
%% Media y varianza de la v.a. resultante
% Calcule mediante matlab la media y la varianza de X y de Y a partir de las realizaciones que están contenidas, respectivamente, en los vectores x e y. Recuerde que dichas medias y varianzas son una estima de las verdaderas medias y varianzas de X e Y.

fprintf('Variable aleatoria X:\n\tE[X] = %f\n\tVar[X] = %f\n',mean(x),var(x));
fprintf('Variable aleatoria Y:\n\tE[Y] = %f\n\tVar[Y] = %f\n',mean(y),var(y));
return

%
%% Prueba tú ahora
% Ejecuta el Live Script varias veces para observar la variabilidad estadística en los resultados (tanto en los histogramas como en  las medias y varianzas calculadas). También puedes observar el impacto de reducir el número, N, de realizaciones.
% Prueba a ejecutar en matlab la instrucción plot(x,y,'.'). Interpreta el significado de la gráfica resultante.
% Replica los ejemplos de los apuntes y los problemas del Tema 3 modificando el tipo de v.a.X de partida y la función de transformación (la función g al final del script).
%

function y = g(x)
% Función de transformación y=g(x)
% Modifique la expresión para adaptarla a la transformación que desee

     y = x.^2;
     
end

%%