【问题标题】:How to generate a 2D random vector in MATLAB?如何在 MATLAB 中生成二维随机向量?
【发布时间】:2016-05-16 21:36:28
【问题描述】:

我在单位正方形S = [0,1] x [0,1] 上定义了一个非负函数f,这样

我的问题是,如何使用MATLAB根据概率密度函数fS生成一个二维随机向量?

【问题讨论】:

  • 我认为除非你的密度是可分的(所以你的两个分量是独立的随机变量),那么这是一个非常困难的问题。你知道如何在纸上做到这一点吗?如果你知道纸上的算法,你就可以编写代码。
  • @AndrasDeak 不幸的是,我不知道如何在纸上做到这一点。我只是想根据一些概率分布生成一个随机向量,我所能做的就是在 Matlab 中使用预定义的 pdf 函数
  • 我会使用rejection sampling 来解决这个问题。另请参阅this answer,虽然使用不同的语言,但可以作为指南
  • @akamath 你错过了 OP 需要一个特定的分布:) “我有一个非负函数 f”,他们只是没有告诉我们它是什么。他们这样做是对的:如果它不是由独立的组成,它并没有真正产生影响。
  • @LuisMendo 的建议听起来很棒。选择一个统一的随机点,看看另一个统一的随机点是否达到(重新)归一化的概率密度(就像你用“p概率”做某事一样)。如果合适,就保留这一点,否则就扔掉。

标签: matlab random-sample probability-density


【解决方案1】:

拒绝抽样

Luis Mendo 提出的建议非常好,因为它适用于几乎所有的分布函数。基于this answer,我为 m 编写了代码。

以这种方式使用拒绝抽样的重要一点是,您必须知道该范围内 pdf 的最大值。如果您高估了最大值,您的代码只会运行得更慢。如果你低估它会产生错误的数字!

这个想法是你采样许多均匀分布的点并根据点的概率密度接受。

pdf=@(x).5.*x(:,1)+3./2.*x(:,2);
maximum=2; %Right maximum for THIS EXAMPLE. 
%If you are unable to determine the maximum of your 
%function within the [0,1]x[0,1] range, please give an example.
result=[];
n=10;
while (size(result,1)<n)
    %1. sample random point:
    val=rand(1,2);
    %2. Accept with probability pdf(val)/maximum
    if rand<pdf(val)/maximum
        %append to solution
        result(end+1,:)=val;
    end
end

我知道这个解决方案不是一个快速的实现,但我想从一个尽可能简单的实现开始,以确保拒绝抽样的概念变得清晰。

【讨论】:

    【解决方案2】:

    ICDF

    除了拒绝抽样之外,还有一种不同的方法可以在更数学的层面上解决这个问题,但您需要先坐下来做一些数学运算,最终得出更好的解决方案。对于一维分布,您通常使用 ICDF(反累积密度函数)函数进行采样,只需使用 ICDF(rand(n,1)) 即可获得随机样本。

    如果您设法进行数学运算,您可以在 matlab 中为您的 PDF 函数定义两个函数 ICDF1(第一维的 ICDF)和 ICDF2(第二维的 ICDF)。

    第一个 ICDF1 会将 unifrom 随机分布样本映射到随机分布第一维的样本值。

    如果 ICDF1 和均匀分布的样本,第二个 ICDF2 会将输出映射到您的预期解决方案。

    这里是一些 matlab 代码,假设您已经定义了 ICDF1ICDF2

    samples=ICDF1(rand(n,1));
    samples(:,2)=ICDF2(samples,rand(n,1));
    

    此解决方案的最大优势在于,它不会拒绝任何样本,可能会更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 2021-02-28
      相关资源
      最近更新 更多