"Greg Heath" <firstname.lastname@example.org> wrote in message <email@example.com>... > "Dmitrey Yershov" <firstname.lastname@example.org> wrote in message <email@example.com>... > > Hello. I need to generate non-negative rundom numbers sum of which is equal to 1. Each number xi is constrained: ai<=xi<=bi. How can I do this? Similar question was solved here > > > > http://www.mathworks.com/matlabcentral/fileexchange/9700 > > > > but in this alghorithm a<=xi<=b (a and b are the same for all xi). Any ideas? > > Z = a + (b-a)*rand(m,n); > > sumZ = repmat(sum(Z),m,1); > > I'll let you figure out the rest. > > Hope this helps > > Greg - - - - - - - - - - I'd like to know the answer to that too, Greg. Suppose your m = 3, n = 1, a = 0, and b = 2/3, and suppose z comes up randomly with z = [.6;.1;.1] as is possible. How is that point supposed to be projected onto a plane so as to have a sum of 1? A simple division by its sum(z) = .8 gives [.75;.125;.125] which exceeds the stated limit.
The space of points in this case having a sum of 1 within the permitted three-dimensional cube cuts it in half in a planar hexagon, and it is difficult to see how to project all points in the cube onto this hexagon in a simple manner using just the sum(z), never mind doing so in an area-wise uniform manner throughout the hexagon.
This is one of the reasons I went to the trouble of writing 'randfixedsum' which breaks such a hexagon into triangles and deals with each separately. However doing a similar thing with an n-dimensional rectangular box other than an n-dimensional cube as Dmitrey wishes to do is a project involving much more complicated simplex structure. At the moment I have no idea how to set about such a task.