你如何在MATLAB中从双峰高斯分布PDF生成数字呢?
对于单峰对称高斯分布PDF,这非常容易:
对于单峰对称高斯分布PDF,这非常容易:
x=randn(1000,1);
现在我想从一个有两个峰值(或两个均值)的高斯分布中抽取1000个数字。我该怎么做呢?
mu
)和标准偏差(sigma
),通常表示为N(mu, sigma)
。N(-1, 0.5)
。mu_a = -1; % Mean (a).
sigma_a = 0.5; % Standard deviation (a).
正态分布 b: N(2, 1)
mu_b = 2; % Mean (b).
sigma_b = 1; % Standard deviation (b).
最后,让我们定义随机向量的大小:
sz = [1e4, 1]; % Size vector.
randn
。x_1 = [sigma_a*randn(sz) + mu_a, sigma_b*randn(sz) + mu_b];
选项2:使用 normrnd
x_2 = [normrnd(mu_a, sigma_a, sz), normrnd(mu_b, sigma_b, sz)];
选项 3:使用 random
x_3 = [random('Normal', mu_a, sigma_a, sz), random('Normal', mu_b, sigma_b, sz)];
让我们可视化结果:
subplot(1, 3, 1); histogram(x_1);
subplot(1, 3, 2); histogram(x_2);
subplot(1, 3, 3); histogram(x_3);
我提供了一种使用gmdistribution的替代方案:
% Means (X1 -> -0.5 and X2 -> 1.2)
m = [-0.5; 1.2];
% Standard Deviations (X1 -> 2.1 and X2 -> 1.3)
s = cat(3,2.1,1.3);
% Weights (X1 and X2 Equally Weighted 0.5)
w = ones(1,2) / 2;
% Create the Gaussian Mixture Model...
gmd = gmdistribution(m,s,w);
% Draw 1000 random numbers from it...
x = random(gmd,1000);
% Plot a histogram...
histogram(x,100);
gmdistribution
函数是正确的工具。 - codeaviator
x1
,另一组样本x2
则从第二个绘制。然后结合起来得到混合物的一个样本。每个成分的绘制次数取决于它在混合物中的权重。 - mikkola