高斯分布也就是正态分布
很多时候我们只知道高斯分布的概率密度函数怎么画,但是如果要产生一列高斯随机数据,该怎么产生呢?假如指定均值和方差,怎么做一个高斯数据生产器呢?
通过以下代码我们可以生成均值为0,方差为1的高斯随机数。
//生成100个(0,1)之间的随机数
Random ran = new Random(1);
double[] dou = new double[100];
for (int i = 0; i < dou.Length/2; i++)
{
double r1= ran.NextDouble();
double r2= ran.NextDouble();
dou[2*i] = Math.Sqrt(-2.0*Math.Log(r1))*Math.Cos(2.0*Math.PI*r2);
dou[2*i+1] =Math.Sqrt(-2.0*Math.Log(r1))*Math.Sin(2.0*Math.PI*r2);
}
通过以下代码可以生成均值为u,方差为σ²的数据
//生成100个(u,σ)之间的随机数
Random ran = new Random(1);
double[] dou = new double[100];
for (int i = 0; i < dou.Length/2; i++)
{
double r1= ran.NextDouble();
double r2= ran.NextDouble();
dou[2*i] = Math.Sqrt(-2.0*Math.Log(r1))*Math.Cos(2.0*Math.PI*r2)* σ + u;
dou[2*i+1] = Math.Sqrt(-2.0*Math.Log(r1))*Math.Sin(2.0*Math.PI*r2)*σ + u;
}
还有一个更为简单和容易理解的方法
% 生成高斯随机信号
rng('default'); % 设置随机数种子,保证结果可复现
N = 1000; % 信号长度
mu = 0; % 均值
sigma = 1; % 标准差
gaussian_signal = mu + sigma * randn(N, 1);
% 绘制信号曲线
plot(gaussian_signal);
title('高斯随机信号');
xlabel('样本序号');
ylabel('振幅');