你如何从 MATLAB 中的双峰高斯概率密度函数生成随机数?
how do you generate random numbers from a bimodal Gaussian Probability Density Function in MATLAB?
如何在 MATLAB 中从双峰高斯 PDF 生成数字?
对于单峰对称高斯 PDF,这非常简单:
x=randn(1000,1);
但现在我想从具有两个峰值(或两个平均值)的高斯 PDF 中绘制 1000 个数字。我该怎么做呢?
您可以通过组合具有不同均值和标准差的两个正态分布来生成双峰正态(高斯)分布(如 中所述)。
在 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);
我建议您使用 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);
如何在 MATLAB 中从双峰高斯 PDF 生成数字?
对于单峰对称高斯 PDF,这非常简单:
x=randn(1000,1);
但现在我想从具有两个峰值(或两个平均值)的高斯 PDF 中绘制 1000 个数字。我该怎么做呢?
您可以通过组合具有不同均值和标准差的两个正态分布来生成双峰正态(高斯)分布(如
在 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);
我建议您使用 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);