紧急!用matlab产生6个0到1间的随机数,且这6个数的和为1,怎么编程啊???

来源:百度知道 编辑:UC知道 时间:2024/05/20 06:46:05
用matlab产生6个0到1间的随机数,且这6个数的和为1,怎么编程啊???

clc;
a=zeros(6,1);
while a(6)==0
a(1:5)=rand(5,1);
s=sum(a);
if s<1
a(6)=1-s;
end
end
a
sum(a)

a =

0.0004
0.2851
0.1708
0.2032
0.0947
0.2458

ans =

1

我的答案是最好的!!!
rand('state',0)
Weights=rand(1000,6);
Total=sum(Weights,2);
Total=Total(:,ones(6,1));
Weights=Weights./Total
这是产生一千组满足你条件的数,你要一组就把那1000改成1就OK!!

rand(6, 1) 可以产生6个于0到1之间的伪随机数,均值为0,也就是说和为0.

应该是
x1=rand(1);
x2=rand(1);
x3=rand(1);
x4=rand(1);
x5=rand(1);
x6=1-x1-x2-x3-x4-x5

while x6<0
x1=rand(1);
x2=rand(1);
x3=rand(1);
x4=rand(1);
x5=rand(1);
x6=1-x1-x2-x3-x4-x5
end
x1 x2 x3 x4 x5 x6