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

use*_*636 5 matlab gaussian

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

对于单峰对称高斯 PDF 来说,这非常简单:

x=randn(1000,1); 
Run Code Online (Sandbox Code Playgroud)

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

cod*_*tor 4

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

在 MATLAB 中,您可以通过多种方式执行此操作:

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

正态分布a:N(-1, 0.5)

mu_a = -1;      % Mean (a).
sigma_a = 0.5;  % Standard deviation (a).
Run Code Online (Sandbox Code Playgroud)

正态分布b:N(2, 1)

mu_b = 2;       % Mean (b).
sigma_b = 1;    % Standard deviation (b).
Run Code Online (Sandbox Code Playgroud)

最后,让我们定义随机向量的大小:

sz = [1e4, 1];  % Size vector.
Run Code Online (Sandbox Code Playgroud)

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

选项 1:使用randn

x_1 = [sigma_a*randn(sz) + mu_a, sigma_b*randn(sz) + mu_b];
Run Code Online (Sandbox Code Playgroud)

选项 2:使用normrnd

x_2 = [normrnd(mu_a, sigma_a, sz), normrnd(mu_b, sigma_b, sz)];
Run Code Online (Sandbox Code Playgroud)

选项 3:使用random

x_3 = [random('Normal', mu_a, sigma_a, sz), random('Normal', mu_b, sigma_b, sz)];
Run Code Online (Sandbox Code Playgroud)

让我们可视化结果:

subplot(1, 3, 1); histogram(x_1);
subplot(1, 3, 2); histogram(x_2);
subplot(1, 3, 3); histogram(x_3);
Run Code Online (Sandbox Code Playgroud)

双峰正态分布