MATLAB: How to generate multiple Vectors with random variables but sum 1

random variables vector with 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.

Best 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)