如何在MATLAB中生成2D随机向量?

我有一个在单位平方S = [0,1] x [0,1]上定义的非负函数f,这样就可以了

《如何在MATLAB中生成2D随机向量?》

我的问题是,如何根据概率密度函数f使用MATLAB从S生成2D随机向量?

最佳答案 拒绝抽样

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

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

点赞