【问题标题】:Creating Gaussian random variable with MATLAB用 MATLAB 创建高斯随机变量
【发布时间】:2012-10-17 12:25:23
【问题描述】:

通过使用randn 函数,我想创建一个高斯随机变量X 使得X ~ N(2,4) 并将这个模拟的PDF 与理论曲线一起绘制。

【问题讨论】:

标签: matlab statistics distribution normal-distribution probability-density


【解决方案1】:

Matlab randn 从均值为零且标准差为 1 的正态分布生成实现。 任何其他正态分布的样本都可以通过以下方式简单地生成:

numSamples = 1000;
mu = 2;
sigma = 4;
samples = mu + sigma.*randn(numSamples, 1);

您可以通过绘制直方图来验证这一点:

figure;hist(samples(:));

请参阅matlab help。

【讨论】:

    【解决方案2】:
    N = 1000;
    x = [-20:20];
    samples = 2 + 4*randn(N, 1);
    ySamples = histc(samples,x) / N;
    yTheoretical = pdf('norm', x, 2, 4);
    plot(x, yTheoretical, x, ySamples)
    

    randn(N, 1) 创建一个N-by-1 向量。

    histc 是x 中给出的 bin 的直方图计数 - 您可以使用 hist 立即绘制结果,但这里我们想将其除以 N。

    pdf 包含许多有用的 PDF,普通只是一个例子。

    【讨论】:

      【解决方案3】:

      记住这一点:X ~ N(均值,方差)

      matlab 中的randn 产生具有零均值和单位方差的正态分布随机变量 W。 要将均值和方差更改为随机变量 X(具有自定义均值和方差),请遵循以下等式: X = 平均值 + 标准偏差*W 请注意,standard_deviation 是方差的平方根。

      N = 1000;
      x = [-20:20];
      samples = 2 + sqrt(4)*randn(N, 1);
      ySamples = histc(samples,x) / N;
      yTheoretical = pdf('norm', x, 2, sqrt(4)); %put std_deviation not variance
      plot(x, yTheoretical, x, ySamples)
      

      【讨论】:

        【解决方案4】:

        使用一行代码实现此目的的一种快速简便的方法是使用:

        mu = 2;
        sigma = 2;
        samples = normrnd(mu,sigma,M,N);
        

        这将生成一个 MxN 矩阵,从N(μ,?)(在本例中为= N(2,2))采样。 如需更多信息,请参阅normrnd。

        【讨论】:

        • 这与this answer 或this one 有何不同?加上 OP 想要 N(2,4),而不是 N(2,2)。此外,问题明确希望查看经验PDF 并与理论问题进行比较。
        猜你喜欢
        • 2010-09-18
        • 2015-02-13
        • 1970-01-01
        • 2013-02-20
        • 2016-12-09
        • 1970-01-01
        • 2012-07-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多