如何从MATLAB中的双峰高斯概率密度函数生成随机数?

时间:2017-12-07 06:02:18

标签: matlab gaussian

如何在MATLAB中从双峰高斯PDF生成数字?

对于单峰对称高斯PDF,它非常简单:

(err, result)

但是现在我想从具有两个峰值(或两个均值)的高斯PDF中绘制1000个数字。我该怎么做呢?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

您可以通过组合两个具有不同均值和标准差的正态分布来生成双峰法线(高斯)分布(如this comment中所述)。

在MATLAB中,您可以通过多种方式完成此任务:

首先,我们需要指定表征我们的正态分布的均值(mu)和标准差(sigma),通常标记为N(mu, sigma)

正态分布a: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.

现在让我们通过连接两个正态分布随机数的向量来生成双峰随机值:

选项1:使用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);

bimodal normal distributions