How can I generate the 10 random number with total summation value of 1. The random number should be anything between 0 and 1. Thanks.
MATLAB: Random distribution with specific total amount
random number generator
Related Solutions
vpa(d,3)
We can tell from the number of decimal places that you show that you must be using symbolic numbers, so you can use vpa() to evaluate to a specific number of decimal places.
There is no way to round double precision numbers to a particular number of decimal places, because 0.1 is not exactly representable as a finite binary floating point number, for the same reasons that 1/7 is not exactly representable as a finite decimal number.
As pointed out by @John in the comments, you are getting this error because of finite precision of floating point numbers in the computer systems. A way around this is to compare numbers with tolerance. To do that here is one option, replace
if check == 0.25
with
if ismembertol(check, 0.25, 1e-6)
the third number to ismembertol() is the tolerance value i.e. how much difference from 0.25 on the left side of comparison will be considered equal to 0.25. For your code, this gives following a total of 13 combinations of weights
weight = 0.1600 0.2600 0.2800 0.2800 0.1600 0.2800 0.2600 0.2800 0.1600 0.2800 0.2800 0.2600 0.2500 0.2500 0.2500 0.2500 0.2600 0.1600 0.2800 0.2800 0.2600 0.2800 0.1600 0.2800 0.2600 0.2800 0.2800 0.1600 0.2800 0.1600 0.2600 0.2800 0.2800 0.1600 0.2800 0.2600 0.2800 0.2600 0.1600 0.2800 0.2800 0.2600 0.2800 0.1600 0.2800 0.2800 0.1600 0.2600 0.2800 0.2800 0.2600 0.1600
If you increase the tolerance
if ismembertol(check, 0.25, 1e-3)
then even more elements will satisfy the equality. 1e-3 gives 61 points
weight = 0.1600 0.2600 0.2800 0.2800 0.1600 0.2700 0.2700 0.2800 0.1600 0.2700 0.2800 0.2700 0.1600 0.2800 0.2600 0.2800 0.1600 0.2800 0.2700 0.2700 0.1600 0.2800 0.2800 0.2600 0.1900 0.2500 0.2700 0.2800 0.1900 0.2500 0.2800 0.2700 0.1900 0.2700 0.2500 0.2800 0.1900 0.2700 0.2800 0.2500 0.1900 0.2800 0.2500 0.2700 0.1900 0.2800 0.2700 0.2500 0.2400 0.2500 0.2500 0.2600 0.2400 0.2500 0.2600 0.2500 0.2400 0.2600 0.2500 0.2500 0.2500 0.1900 0.2700 0.2800 0.2500 0.1900 0.2800 0.2700 0.2500 0.2400 0.2500 0.2600 0.2500 0.2400 0.2600 0.2500 0.2500 0.2500 0.2400 0.2600 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2600 0.2400 0.2500 0.2600 0.2400 0.2500 0.2500 0.2600 0.2500 0.2400 0.2500 0.2700 0.1900 0.2800 0.2500 0.2700 0.2800 0.1900 0.2500 0.2800 0.1900 0.2700 0.2500 0.2800 0.2700 0.1900 0.2600 0.1600 0.2800 0.2800 0.2600 0.2400 0.2500 0.2500 0.2600 0.2500 0.2400 0.2500 0.2600 0.2500 0.2500 0.2400 0.2600 0.2800 0.1600 0.2800 0.2600 0.2800 0.2800 0.1600 0.2700 0.1600 0.2700 0.2800 0.2700 0.1600 0.2800 0.2700 0.2700 0.1900 0.2500 0.2800 0.2700 0.1900 0.2800 0.2500 0.2700 0.2500 0.1900 0.2800 0.2700 0.2500 0.2800 0.1900 0.2700 0.2700 0.1600 0.2800 0.2700 0.2700 0.2800 0.1600 0.2700 0.2800 0.1600 0.2700 0.2700 0.2800 0.1900 0.2500 0.2700 0.2800 0.2500 0.1900 0.2700 0.2800 0.2700 0.1600 0.2800 0.1600 0.2600 0.2800 0.2800 0.1600 0.2700 0.2700 0.2800 0.1600 0.2800 0.2600 0.2800 0.1900 0.2500 0.2700 0.2800 0.1900 0.2700 0.2500 0.2800 0.2500 0.1900 0.2700 0.2800 0.2500 0.2700 0.1900 0.2800 0.2600 0.1600 0.2800 0.2800 0.2600 0.2800 0.1600 0.2800 0.2700 0.1600 0.2700 0.2800 0.2700 0.1900 0.2500 0.2800 0.2700 0.2500 0.1900 0.2800 0.2700 0.2700 0.1600 0.2800 0.2800 0.1600 0.2600 0.2800 0.2800 0.2600 0.1600
So it depends on how much tolerance is acceptable for your problem.
Best Answer