如何在MATLAB中使用自己的概率质量函数生成随机变量?

时间:2015-05-29 04:00:42

标签: matlab random

我必须生成一个范围从2030的随机变量, 以0.1间隔, 它的pmf由1x101矩阵(x=20, 20.1, ... 29.9, 30)给出。

现在我必须使用给定的pmf

制作随机变量

但是我所知道的关于生成R.V的所有东西都与高斯函数或均匀分布函数有关。

那么有没有办法用任意pmf实现生成随机变量?

2 个答案:

答案 0 :(得分:1)

我认为这应该可以解决问题。

%// First I created some random data
N=1e6;
x=randn(1,N);x=(x-min(x))/(max(x)-min(x));
pmf=hist(x,101)./N;
%// It's a normal distribution but scaled to output to [0 1]

%// First, get the cdf
xh=cumsum(pmf);

%// Create the list of possible values of this random variable
Y=20:.1:30;

%// Create a uniformly distributed random variable between 0 and 1
R=rand()

%// Find where the cdf value is closest to R
[~,J]=min(abs(xh-R));

%// Find the resulting sample values
Y(J)

%// Just a little plot to make sure it's working
hold on
plot(Y,xh)
plot([20 30],[R R],[Y(J) Y(J)],[0 1])
hold off

答案 1 :(得分:0)

我认为您要做的是多项式抽样,请参阅http://se.mathworks.com/help/stats/mnrnd.html?refresh=true

如果您只想要一个样本,您可以(粗略地)执行类似

的操作
find( mnrnd(1,pmf))

其中pmf是概率向量(assert(sum(pmf)==1)

请注意,没有什么特别的使用20:.1:30,你基本上有101个箱子,每个箱子的概率由pmf

给出