# Generating random numbers with a different probabilities

9 views (last 30 days)

Show older comments

### Answers (3)

Yusuf Suer Erdem
on 1 Dec 2021

Hi there. These codes below are completely original and made by me for you. Each time you need to enter a probability value to the system. When the probability is closer to 1, the system gives more digits from 0-50 range. I hope it works for you. Good luck.

clc; clear; close all;

choice = menu('Choose the case','probability=1','probability=0.7','probability=0.5','probability=0.3');

if choice==1

r = randi([0 50],1,125);

k = randi([50 150],1,25);

elseif choice==2

r = randi([0 50],1,100);

k = randi([50 150],1,50);

else

r = randi([0 50],1,75);

k = randi([50 150],1,75);

end

l=[r k];

##### 2 Comments

Alan Stevens
on 1 Dec 2021

Assuming there are just two levels of probability, and that the numbers are real, not just integers, you could try:

p50 = 0.75; % probability of number less than 50

N = 10^5; % number of random numbers required

u = rand(N,1); % uniform random numbers

r(u<=p50) = u(u<=p50)*50; % random numbers less than 50

r(u>p50) = u(u>p50)*100 + 50; % random numbers between 50 and 150

Steven Lord
on 1 Dec 2021

If you know the probabilities you want each number to have you could use discretize. For instance if I want to generate numbers between 1 and 10 with the odd numbers being twice as likely:

P = repmat([2 1], 1, 5)

cumulativeP = [0 cumsum(P)./sum(P)]

r = rand(1, 1e5); % Random numbers in range (0, 1)

d = discretize(r, cumulativeP); % Bin the random numbers in r using the bins in cumulativeP

h = histogram(d, (1:11)-0.5, 'Normalization', 'probability'); % Show the results

xticks(1:10)

The bars for 1, 3, 5, 7, and 9 are about twice as tall as the bins for 2, 4, 6, 8, and 10 as expected.

shouldBeCloseToP = h.Values./h.Values(end)

##### 0 Comments

### See Also

### Products

### Community Treasure Hunt

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

Start Hunting!