从matlab中的分段概率分布生成随机数

时间:2011-04-10 17:49:37

标签: matlab

我试图将以下分段函数作为概率分布输入到matlab中。然后我试图生成X的随机值。我有统计工具框,所以我可以使用它生成随机数,但我无法弄清楚如何输入函数,以便我可以实际生成随机数。

P(X)= Ax 0<=x<1
      A/2 1<=x<2
      0 otherwise

A是归一化常数。

我最终希望从这个分布中显示10,000个试验的直方图,并找出我的模拟的平均值和标准偏差。

1 个答案:

答案 0 :(得分:2)

来自给定分布的样本可以使用逆变换采样生成(参见http://en.wikipedia.org/wiki/Inverse_transform_sampling)这很简单,因为您只需生成均匀分布的值,然后计算累积分布函数的逆矩阵

累积分布函数可以通过整合propability density函数来计算,在你的情况下

x ^ 2/2 ... x来自&lt; 0,1&gt;

x / 2 ... x来自(1,2>

注意,归一化常数是A = 1 现在,执行此操作的m文件如下

function vals =genDist(len)
vals =  rand(len,1);
for i=1:length(vals)
    if vals(i)<=1/2 % vals(i) 0..0.5
        vals(i) = sqrt(2*vals(i));%inverse function of x^2/2 
    else % vals(i) 0.5-1
        vals(i) = vals(i)*2; %inverse function of x/2
    end
end