How do I combine two different distributions in MATLAB?

Suppose I have X ~ Norm(x,y) and Y ~ Exponential(k)
I wish to create a new variable T = X + Y. How would this be done?
I need to be able to generate random numbers from the new variable T. Say I want to generate 1000 values how would I now do this?
Any help greatly appreciated.
Thanks.

 Accepted Answer

your_fun = @(average,var,k,numRows,numCols) average + var.*randn(numRows,numCols) + exprnd(k,numRows,numCols)
And to get values:
your_vals = your_fun(3,2,5,10,10)
will give you a 10 x 10 matrix of random values.

5 Comments

Hello José
Can you please prove the source of you answer (book, paper or link).
Im just curious
Thanks in advance
He's just defining a function which takes as its arguments, the parameters of the two distributions.
So for a normal distribution you have your "average" and "variance" and for an exponential distribution you have your lambda value which is "k" in this instance.
I'm just a little confused about why he did average + var.*randn(etc. etc.) though.
@Javier where are you confused? Are you confused that mu + (sigma.^2).*randn generates a random numbers with a Gaussian distribution with mean mu and standard deviation sigma?
Well, I am sure there is an original paper defining the normal distribution, probably by Gauss, but any statistics book will give you the functions for both distributions. What James wanted was a random variable that is the sum of two other random variables. If you are talking about how the values are sampled, the default in Matlab is based on the Mersenne-Twister algorithm:
Matsumoto, M.; Nishimura, T. (1998). "Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator". ACM Transactions on Modeling and Computer Simulation 8 (1): 3–30. doi:10.1145/272991.272995
The rest is just a more or less forward application of the formula (M-T will give you a value that you translate into a quantile that you then use to get your random value, using the formula that defines it).
@James, he could have done normrnd(mu,sigma,m,n), but it would be a hair slower because of the extra error checking.

Sign in to comment.

More Answers (1)

Thanks for the answer, it makes sense, forgot about making a function!

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!