我必须生成一个范围从20
到30
的随机变量,
以0.1
间隔,
它的pmf由1x101
矩阵(x=20, 20.1, ... 29.9, 30
)给出。
现在我必须使用给定的pmf
制作随机变量但是我所知道的关于生成R.V的所有东西都与高斯函数或均匀分布函数有关。
那么有没有办法用任意pmf实现生成随机变量?
答案 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