How to generate multiple Vectors with random variables but sum 1

Hello Folks, i want to create multiple Vectors with random variables (btw. 0 and 1) but sum 1
for example [0 1 0 0] or [0.7 0.2 0 0.1] and so on
i want to scatterplot a large number of random portfolios and therefore i need random weights.
i'm sure there is an easy way but since i'm new to matlab and after looking for a long time i figured i ask the community.
thanks for your help.

 Accepted Answer

The method assures good statistical properties for the marginal probabilities, and a uniform distribution across the joint probability space. All good things.
If you download Roger's code, I suggest you run this test to compare methods. (I'll post a figure with the result later, if I can.)
% Roger Stafford's solution
B1 = randfixedsum(10,10000,1,0,1);
% "Easy method" [Please don't use!]
A = rand(100000,10);
B2 = bsxfun(@rdivide,A,sum(A,2));
% Compare the marginal distributions of one variable
figure
subplot(2,1,1),hist(B1(1,:),25)
subplot(2,1,2),hist(B2(:,1),25)

More Answers (1)

Easiest way is to normalize by the sum:
A = rand(1,10);
B=A./sum(A);
sum(B)
However, there are some things that make this non-truly random. If you care:

3 Comments

I highly recommend using Roger Stafford's FEX contribution, and not taking the "easy way out".
It really depends on the use case. For a homework problem, I would take the easy way out.
thanks again both of you for the answers provided.

Sign in to comment.

Categories

Community Treasure Hunt

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

Start Hunting!