1. One-Dimensional Discrete rv
1.1 Finite
1.1.1 Uniform rv U(0,1)
function X = GenerateVariable(p1, p2, dt1, dt2) % X = dt1 with p1, X = -dt2 with p2, X = 0 with (1-p1-p2) U = rand; X = dt1 * (U <= p1) - dt2 * (p1 < U) * (p1 + p2 >= U); end
1.1.2 Binomial X = B(N, p)
function B = Binary(p) % B = 1 with p, B = 0 with (1-p) U = rand; B = (U <= p); end % generate rv X function X = Binomial(NbBinary, p) X = 0; for n = 1: NbBinary X = X + (rand <= p); end
% another approach function X = Binomial2(NbBinary, p) X = sum(rand(1, NbBinary) <= p); end
1.2 Infinite :Poisson
function X = Poisson(lambda) X = 0; U = rand; while (U > exp(-lambda)) X = X + 1; U = U * rand; end end
2. One-Dimensional Continuous rv
2.1 Exponential Law
function X = Exp(alpha) X = - log(rand)/alpha; end
2.2 Rayleigh rv
function X = Rayleigh X = sqrt(-2 * log(rand)); end
2.3 Gaussian
function X = Gaussian(mu, sigma) % randn: N(0,1) X = sigma * randn + mu; end
3. Multi-Dimensional Random Vector
3.1 Basic Two-Dimension
function rep = RandomVector(sigma1, sigma2, rho) MatrixL = [sigma1, 0; rho * sigma2, sigma2 * sqrt(1 - rho^2)]; rep = MatrixL * randn(2, 1); end
3.2 Multi-Dimention: Cholesky Decomposition of Variance-Covariance Matrix
chol(A);% get upper triangular matrix L = chol(A)';% get lower tri-matrix
3.3 Eigenvalue Decomposition of Variance-Covariance Matrix (Principal component Analysis)
[P, D] = eig(A); % P -> eigenvectors' matrix % D -> corresponding eigenvalues' matrix L = P * D.^(0.5);
3.3 Gaussian Random Vector
function Y = GaussianVector(n, Lambda, mu) Y = chol(Lambda)' * randn(n, 1) + mu; end