所以这就是问题:
假设我们只有一个随机数生成器,它有一个U(0,1)分布。但是我们想要生成具有非均匀分布的随机数序列(例如,Exp(2))。现在,请首先使用随机数生成器生成105个均匀(U(0,1))分布式样本,然后将这些样本转换为数据点,这些数据点应具有Exp(2)分布,最后使用hist函数绘制这些变换样本
我无法转换为指数级别。我给TA发了电子邮件,他没有多大帮助,但他确实告诉我,我不需要循环。
以下是我所拥有的:
distnames = {'Uniform', 'Exponential'};
lower=0;
upper=1;
uds = makedist(distnames{1},'lower' ,lower, 'upper', upper);
nums = random(uds, 1, 10); %using 10 randoms for testing, needs to be 10^5
for k=1:length(nums)
mu=2;
uds = makedist(distnames{2},'mu' ,mu);
points = pdf(uds);
end
%%hist(points)
答案 0 :(得分:3)
你缺少的是整体数学。
您可以使用以下方法从单个变量概率分布生成绘制:(1)均匀随机数生成器和(2)您尝试生成的分布的累积分布函数(逆CDF)的逆
设F ^ -1表示逆cdf。设X是均匀分布在(0,1)上的随机变量。 Y = F ^ -1(X)的分布是多少?事实证明,以这种方式生成的Y具有CDF F.证明大纲:
P(Y<= a) = P(F^-1(X) <= a)
= P(X <= F(a))
= F(a) (since X is uniform on (0,1) and 0 <= F(a) <= 1)
The CDF of Y (i.e. P(Y <= a)) is equal to F
例如。从标准正态分布生成伪随机抽取:
y = norminv(rand(), 0, 1); % In Matlab, 'norminv' is inverse CDF function
% for normal distribution. (0 is mean, 1 is stdev)
您的代码长度约为1行。用任何反向CDF替换norminv。