Matlab统一分布到指数分布

时间:2015-12-03 23:31:46

标签: matlab

所以这就是问题:

假设我们只有一个随机数生成器,它有一个U(0,1)分布。但是我们想要生成具有非均匀分布的随机数序列(例如,Exp(2))。现在,请首先使用随机数生成器生成105个均匀(U(0,1))分布式样本,然后将这些样本转换为数据点,这些数据点应具有Exp(2)分布,最后使用hist函数绘制这些变换样本

我无法转换为指数级别。我给TA发了电子邮件,他没有多大帮助,但他确实告诉我,我不需要循环。

以下是我所拥有的:

distnames = {'Uniform', 'Exponential'};
lower=0;
upper=1;
uds = makedist(distnames{1},'lower' ,lower, 'upper', upper);
nums = random(uds, 1, 10); %using 10 randoms for testing, needs to be 10^5

for k=1:length(nums)
    mu=2;
    uds = makedist(distnames{2},'mu' ,mu);
    points = pdf(uds);
end

%%hist(points)

1 个答案:

答案 0 :(得分:3)

你缺少的是整体数学。

您可以使用以下方法从单个变量概率分布生成绘制:(1)均匀随机数生成器和(2)您尝试生成的分布的累积分布函数(逆CDF)的逆

为什么会这样?

设F ^ -1表示逆cdf。设X是均匀分布在(0,1)上的随机变量。 Y = F ^ -1(X)的分布是多少?事实证明,以这种方式生成的Y具有CDF F.证明大纲:

P(Y<= a) = P(F^-1(X) <= a) 
         = P(X <= F(a)) 
         = F(a)             (since X is uniform on (0,1) and 0 <= F(a) <= 1)
The CDF of Y (i.e. P(Y <= a)) is equal to F

如何生成伪随机抽取的示例

例如。从标准正态分布生成伪随机抽取:

y = norminv(rand(), 0, 1);   % In Matlab, 'norminv' is inverse CDF function
                             % for normal distribution. (0 is mean, 1 is stdev)

您的代码长度约为1行。用任何反向CDF替换norminv。