MATLAB Answers

0

Generate N observations from a uniform distribution on [0,1] and compare it to a threshold

Asked by Ayman Alotaibi on 10 Mar 2018
Latest activity Commented on by Ayman Alotaibi on 10 Mar 2018
We simulate this experiment by generating a logical array of
length N, with 1 (true) for "heads" and 0 (false) for "tails".
The problem is to generate the right number of 1s and 0s, so that
the percentage of 1s is p (60%). We shall do so in two ways.
N=1000; // number of coin tosses
p=0.6; // bias: percentage of 1s in the array
Method 1
Generate N observations from a uniform distribution on [0,1].
Threshold these observations at p. The resulting logical array
will have
1 if an observation was < p,
0 otherwise.

  4 Comments

Show 1 older comment
percentageOfOnes = p;
numberOfOnes = (N * percentageOfOnes );
signal = [ones(1, numberOfOnes), zeros(1, N - numberOfOnes)]; signal = signal(randperm(length(signal))); numOnes = sum(signal);
but this only gives u sum of ones, how can I have two signal with sum all ones, and sum all zeros

Sign in to comment.

1 Answer

Answer by Roger Stafford on 10 Mar 2018
 Accepted Answer

Here's another way. Let there be N1 trues and N0 falses.
x = [repmat(true,1,N1),repmat(false,1,N0)];
x = x(randperm(N1+N0));

  4 Comments

Show 1 older comment
Of course it does. Here's my proof:
N1 = 60;
N0 = 40;
x = [repmat(true,1,N1),repmat(false,1,N0)];
x = x(randperm(N1+N0));
numOnes = sum(x) % Will say 60
Now it's your turn to give your proof that it DOES NOT work.
can I get the sum of zeros too ? like numZeros, so it gives 40? or should I do numOnes - X ?
I did this code at the bottom of code, and it worked
numZeros = length(zeros(1, N - numberOfOnes)) ;

Sign in to comment.