【问题标题】:Matlab Uniform Distribution to Exponential DistributionMatlab 均匀分布到指数分布
【发布时间】:2015-12-03 23:31:45
【问题描述】:

所以这就是问题:

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

我无法转换为指数。我给我的助教发了电子邮件,他没有提供太多帮助,但他确实告诉我我不需要循环。

这是我所拥有的:

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)

【问题讨论】:

    标签: matlab


    【解决方案1】:

    你缺少的是整体数学。

    您可以使用以下方法从单个可变概率分布生成抽签:(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。

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 2012-10-11
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 2015-01-18
      • 2012-07-04
      相关资源
      最近更新 更多