9 views (last 30 days)

Show older comments

Basically what the question says. It should look something like this

Though the left side doesn't need to have a higher peak or anything.

Flat distributions are easy - but how do I go about making a vector with 2000 numbers with this type of distribution?

Roger Stafford
on 24 Feb 2016

Edited: Roger Stafford
on 24 Feb 2016

t = 2*rand(1,2000)-1;

x = (sign(t).*sqrt(abs(t))+1)/2;

hist(x,20)

This should approximate your two linear distribution segments. If you use a much higher value than 2000, say 2000000, it will approximate it much more closely. This does not get the spike at the left end. I'll leave that refinement to you.

Added note: You can test the accuracy of the above by replacing the 'rand' call with 'linspace', since the latter will be exactly uniformly distributed.

t = 2*linspace(0,1,2000000)-1;

x = (sign(t).*sqrt(abs(t))+1)/2;

hist(x,20)

Amy Wong
on 13 Dec 2017

If I have a set of data and I want to plot a histogram with multiples of 0.1 which is the x-axis in the image. So, if I use your answer, for the hist what do I change to?

x = (sign(COE).*sqrt(abs(COE))+1)/2;

hist(x,??)

jgg
on 24 Feb 2016

m = randi([0,1],2000,1);

r = abs(randn(2000,1));

r = r - min(r);

r = r./max(r);

num = m;

num(m==0) = 0 + r(m==0);

num(m==1) = 1 - r(m==1);

Something like this should do it, since you don`t really care how they are generated. Basically, generate your integers (0,1) then just add some noise. This is truncated Gaussian noise.

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

Start Hunting!