Conditional Random number generation

조회 수: 16 (최근 30일)
wang syr
wang syr 2017년 3월 2일
댓글: Bruno Luong 2023년 8월 12일
Hello there, For example; If I want to generate 5 random integer numbers with a sum of 20, how can I do that?
" ... example = ceil(10*rand(100, 5)) ... "
  댓글 수: 1
Rik
Rik 2020년 12월 20일
Why did you edit away your question? It is stored on Google cache anyway, so it's easy to restore.

댓글을 달려면 로그인하십시오.

채택된 답변

Roger Stafford
Roger Stafford 2017년 3월 4일
function R = randfixedsumint(m,n,S);
% This generates an m by n array R. Each row will sum to S, and
% all elements are all non-negative integers. The probabilities
% of each possible set of row elements are all equal.
% RAS - Mar. 4, 2017
if ceil(m)~=m|ceil(n)~=n|ceil(S)~=S|m<1|n<1|S<0
error('Improper arguments')
else
P = ones(S+1,n);
for in = n-1:-1:1
P(:,in) = cumsum(P(:,in+1));
end
R = zeros(m,n);
for im = 1:m
s = S;
for in = 1:n
R(im,in) = sum(P(s+1,in)*rand<=P(1:s,in));
s = s-R(im,in);
end
end
end
return
  댓글 수: 6
Yu Takahashi
Yu Takahashi 2021년 2월 9일
편집: Walter Roberson 2021년 2월 10일
Wondering whether it is possible to specify the max and min of the devided value? i.e., something like what you kindly provided in the randfixedsum function, thanks!
Ref
Bruno Luong
Bruno Luong 2023년 8월 12일
@Walter Roberson "Wondering whether it is possible to specify the max and min of the devided value?"

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Walter Roberson
Walter Roberson 2017년 3월 2일
  댓글 수: 9
Walter Roberson
Walter Roberson 2017년 3월 4일
Ah. I don't think I know how to implement your suggestion, though, at least not without generating all of the possible choices that sum to 20 and then picking one at random.
John D'Errico's https://www.mathworks.com/matlabcentral/fileexchange/12009-partitions-of-an-integer can calculate all of the possible partitions; a question is whether we can avoid having to take that step.
Walter Roberson
Walter Roberson 2017년 3월 4일
https://en.wikipedia.org/wiki/Partition_(number_theory)#Restricted_part_size_or_number_of_parts talks about restricted partitioning briefly, and ties it to change making problems, which does indeed sound equivalent to the approach I was taking. Those are in turn tied to knapsack problems.

댓글을 달려면 로그인하십시오.


Bruno Luong
Bruno Luong 2020년 8월 10일
m = 5;
n = 3;
s = 10;
This will generate uniform distribution with sum criteria
% generate non-negative integer random (m x n) array row-sum to s
[~,r] = maxk(rand(m,s+n-1),n-1,2);
z = zeros(m,1);
r = diff([z, sort(r,2), (s+n)+z],1,2)-1;
  댓글 수: 1
Bimal Ghimire
Bimal Ghimire 2020년 10월 4일
While generating conditional random numbers, how can we generate random numbers that has a limit of some maximum value and have certain specified sum value?

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Random Number Generation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by