在matlab中生成常数和的随机向量

时间:2018-02-04 05:04:05

标签: matlab

如何生成一个D维随机向量,其元素是0到1之间的实数,其和等于一个常数值,如w小于或等于D.一个随机向量,如R:

R = [r1 r2 ... rD]; 
0<=ri<=1;
r1 +r2+ ... +rD = w; 
w<=D;
inputs: w, D;

2 个答案:

答案 0 :(得分:0)

如果您正在寻找这个?我用pi作为目标总和,但你可以使用任何东西:

x = rand(1000,1);
x = pi * x / sum(x);
sum(x) - pi

  ans    4.4409e-16

答案 1 :(得分:0)

由于您没有指定随机数应遵循的分布(我希望答案不是&#34;统一&#34;),我能想出的最简单的解决方案涉及Dirichlet Distribution

% Define the parameters...
D = 100;
w = 64;

% Draw a sample of D values from the Dirichlet Distribution...
a = ones(1,D);
R = gamrnd(repmat(a,1,1),1,1,D);
R = R ./ repmat(sum(R,2),1,D);

% Adjust R according to w...
R = R .* w;

% Test the output with tolerance...
R_sum = sum(R);
abs(R_sum - w) < (1e4 * eps(min(R_sum,w)))
相关问题