matlab - 如何在 MATLAB 中生成二维随机向量?

标签 matlab random probability-density

我在单位正方形 S = [0,1] x [0,1] 上定义了一个非负函数 f 使得 enter image description here

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

最佳答案

拒绝抽样

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

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

关于matlab - 如何在 MATLAB 中生成二维随机向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35249055/

相关文章:

matlab - 如何在不使用任何循环的情况下生成两个变量的函数?

random - 为什么 Perlin 噪声算法使用随机数查找表

Java:0 <= x < n 范围内的随机长数

r - 计算多列均值和单列 sigma 的概率密度函数值

r - 根据 R 中的二维密度图计算值的概率

matlab - MATLAB lsqnonlin 中用户定义的 Jacobean 模式被忽略

Matlab cumsum 重置为 NaN?

algorithm - 为什么我的逻辑回归迭代重新加权最小二乘算法的权重总是以 NaN 结尾?

python - 为 2D NumPy 数组的每一行高效应用不同的排列

machine-learning - 基于移动窗口的核密度估计