Step 1:
Let\'s say that I want to generate discrete uniform random numbers taking the value -1 or 1. So in other words I want to generate numbers having
In general the sum of independent variables has pdf equal to the convolution of the pdfs of the summand variables. When the variables are discrete, the convolution is very conveniently computed via the Matlab function conv
(which probably calls fft
for a fast, exact calculation).
When the pdf's are uniform, then the result of the convolution is a binomial or multinomial pdf. But the convolution stuff applies for non-uniform pdfs as well.
That's essentially a binomial distribution (see Matlab's binornd), only scaled and shifted because the underlying values are given by DV
instead of being 0
and 1
:
n = 100;
DV = [-1 1];
p = .5; % probability of DV(2)
M = 10;
SDUD = (DV(2)-DV(1))*binornd(n, p, M, 1)+DV(1)*n;
What you have is a multinomial distribution (see Matlab's mnrnd):
n = 100;
DV = [-2 -1 0 1 2];
p = [.1 .2 .3 .3 .1]; % probability of each value. Sum 1, same size as DV
M = 10;
SDUD = sum(bsxfun(@times, DV, mnrnd(n, p, M)), 2);