I want to get N random numbers that the sum of them is a value.
For example, let's suppose I want 5 random numbers that their sum is 1
Then, a valid possibility is:
0.2 0.2 0.2 0.2 0.2
Other possibility is:
0.8 0.1 0.03 0.03 0.04
And so on. I need this for the creation of the matrix of belongings of the Fuzzy C-means.
Unfortunately, a number of the answers here are incorrect if you'd like uniformly random numbers. The easiest (and fastest in many languages) solution that guarantees uniformly random numbers is just
where
n
is the number of random numbers you want to generate andm
is the sum of the resulting array. This approach produces positive values and is particularly useful for generating valid probabilities that sum to 1 (let m = 1).In Java:
I think it is worth noting that the currently accepted answer does not give a uniform distribution:
To see this let's look at the case N=2 and M=1. This is a trivial case, since we can generate a list [x,1-x], by choosing x uniformly in the range (0,1). The proposed solution generates a pair [x/(x+y), y/(x+y)] where x and y are uniform in (0,1). To analyze this we choose some z such that 0 < z < 0.5 and compute the probability that the first element is smaller than z. This probaility should be z if the distribution were uniform. However, we get
I did some quick calculations and it appears that the only solution so far that appers to result in a uniform distribution was proposed by Matti Virkkunen: