MATLAB Answers

0

Custom Uniform Random Distribution

Asked by matlabkid602 on 23 Feb 2018
Latest activity Answered by Roger Stafford on 24 Feb 2018
Say I have a uniform random distribution in matlab using the rand() function.
How can I change the distribution for a given function such as 1/sqrt(x), so the distribution follows this curve?
I've tried to reject values but had no luck.

  1 Comment

Hi Matlabkid602
1.
the main constraint is that whatever probability density function you choose, it must have area 1, integrating from -Inf to +Inf.
2.
Since you choose 1/sqrt(x), you have to truncate, let's say with a continuous interval [a b], a<b.
The new pdf should have the shape
pdf2(x<a)=0
pdf2(x>b)=0
pfg2(0<x<b)=1/sqrt(x)
3. make sure that for instance 0<b<a, otherwise and undesired discontinuity will be included in the function intended to behave as pdf and it will not work.
4.
The values of the interval [a b] are related in the following way:
sqrt(b)-sqrt(a)=0.5

Sign in to comment.

2 Answers


Answer by Roger Stafford on 24 Feb 2018

If you want to obtain a density distribution proportional to 1/sqrt(x) for x in some finite interval [a,b], you can proceed as follows. The cumulative probability function must be:
cdf(x) = (sqrt(x)-sqrt(a))/(sqrt(b)-sqrt(a))
which you get by integrating 1/sqrt(x) from a to x and adjusting the proportionality constant to get a cdf(b)=1 for the entire interval from a to b.
To generate this using rand, set the above cdf(x) to r = rand and solve for x:
r = rand;
%Solve for x in (sqrt(x)-sqrt(a))/(sqrt(b)-sqrt(a)) = r:
x = (sqrt(a)+(sqrt(b)-sqrt(a))*r).^2;
This illustrates how one would proceed to use rand for generating any given probability density function. It depends on being able to solve for x in an equation cdf(x) = r.

  0 Comments

Sign in to comment.