当产品为P时,通常产生N个数,其乘积通常为1?

时间:2014-06-13 20:34:48

标签: matlab random

我想生成N个随机点,其产品值为1。

我是这样用MATALB做的:

N_=10;
x1_=rand(1, N_);
p_=prod(x1_);
x_=x1_;
x_(end)=x1_(end)/p_;
prod(x_);

有简单的(其他方式)吗? P~ = 1时怎么办?

感谢。

4 个答案:

答案 0 :(得分:3)

执行此操作的一种方法是使用log(1) = 0a*b = exp(log(a+b))这一事实。

x = rand(N,1);
norm_log_x = log(x)-mean(log(x));
norm_x = exp(norm_log_x);
norm_x =

    2.6058
    2.7166
    0.6396
    1.3958
    1.0874
    1.5147
    0.7660
    0.1977
    1.2618
    0.5028

prod(norm_x)
ans =
    1.0000

要获得其他1的值,您可以执行以下操作:

P = 7;
norm_log_x = log(x)-mean(log(x))+log(P)/length(x);
norm_x = exp(norm_log_x);
prod(norm_x)    
ans =
    7.0000

答案 1 :(得分:1)

在您的情况下,最后一个号码具有不同的分布。假设您希望所有数字都具有相同的分布:

N_=10;
x1_=rand(1, N_);
p_=prod(x1_);
x_=x1_./(p_.^(1/N_))

答案 2 :(得分:1)

Lognormal distribution具有产品再次对数正态分布的属性。这也意味着,当你可以做最后一次"修复"并且不可能找到用于此"分配修整的数字"。

答案 3 :(得分:0)

我目前无法访问MATLAB,但您不能这样做。.

n      = 10;
x_sum  = 1;
x_rand = rand(x_sum, n);
x_rand = x_rand ./ sum(x_rand);

这种方式给出了一个随机列表,如果您不希望总和为1,则可以更改x_sum。如果您想要统一分布或其他统一分布,则可以替换rand()具有不同的内置功能。<​​/ p>

编辑: 我会快速运行以再次检查我的代码是否正确。

sum(x_rand);