matlab 0到1之间取10个1位小数,总和为1

b=rand(1,10);
c=sum(b);
d=b/c;
这个是自己乱编的,小数点肯定不是1位了。。。
用了digfts什么的貌似也不行,我是小白啊。。。哪个大神救救我呀。。。
或者定义数组[0,0.1,0.2...,0.9,1],在这里面随机取10个数,但是总和要为1也可以。

>> a=rand(1,10)
a =
0.8147 0.9058 0.1270 0.9134 0.6324 0.0975 0.2785 0.5469 0.9575 0.9649
>> b=sum(a)
b =
6.2386
>> c=a/b
c =
0.1306 0.1452 0.0204 0.1464 0.1014 0.0156 0.0446 0.0877 0.1535 0.1547
>>sum(c)
ans =
1
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-08
T = 10;
flag = 1;
while flag %防止出现sum(b)<1情况
b = [];
for i = 1 : 10
b(i) = randi([0 T]);
T = T - b(i);
if T == 0
b(i+1:10) = 0;
break;
end
end
if sum(b) == 10
flag = 0; %终止while
end
end
b = b / 10;本回答被提问者采纳
相似回答