【问题标题】:Random Numbers using Distributions in Matlab [duplicate]在 Matlab 中使用分布的随机数 [重复]
【发布时间】:2014-03-11 05:48:06
【问题描述】:

我需要创建一个函数,它返回一个长度为 n 的向量,其值范围为 0 到 1(或类似,0.01 到 .99 也可以),它遵循具有指定均值 mu 和 sd 的正态分布。也就是说,向量中约 68% 的值落在 ±1 s.d 之内。用户指定的平均值。因此,函数的输入是 n、mu、s.d。并返回一个向量。

非常感谢任何帮助。谢谢

【问题讨论】:

  • 我看到了,这不太一样。范围必须在 (0,1) 范围内,并且必须包含大约 98% 的数据。请参阅下面的评论。

标签: matlab random distribution probability gaussian


【解决方案1】:

也许我误解了你的要求,你不想要随机数,但正态分布曲线评估在 0 和 1 之间

高斯方程或正态分布为:

x = (1:n)/n;
y = 1/(sigma*sqrt(2*pi)).*exp(-((x-mu).^2)/(2*sigma^2));

既然你想要一个长度 = n 的向量,x 也应该是那个长度。所以你可以像上面那样做(它从 1/n 开始,以 1 结束)。然后根据这些值评估正态分布。

【讨论】:

    【解决方案2】:

    使用randn:

    v = randn(1,n)*sd+mu;
    

    randn(1,n) 函数将返回一个 1×n 矩阵,其中包含从标准正态分布中提取的伪随机值。

    将它乘以 sd 并加上 mu 将得到一组正态分布的数字,均值 mu 和标准差 sd。

    【讨论】:

    • +1 另见normrnd(统计工具箱),它基本上调用randn
    • 谢谢,但我没有统计工具箱(或者我不知道如何启动它)。您使用的代码不适合数字在 0 到 1 的范围内(例如: hist(randn(1,500)*2+.5); ),我试图避免出现黑盒。这是我现在几乎可以使用的代码,但问题是我无法确定 linspace 的适当界限。 xsigma=1; xmu=.5*6*xsigma; x=linspace(0,6*xsigma,1000); y=(xsigma*sqrt(2*pi))^-1 * exp(-((x-xmu).^2)/(2*xsigma^2)); plot(x/(6*xsigma),y); 我以为 6-sigma 会这样做,但事实并非如此。我想在 (0,1) 中捕获 98% 的曲线。
    • 查看编辑。如果您使用 0.5 的平均值和 2 的标准差,您将获得 0 到 1 范围之外的许多值。如果你想要 98% 的值在 0 到 1 之间,你应该使用 0.5 的平均值和远小于 2 的标准差(尝试 0.1)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 2012-10-08
    • 2017-03-10
    相关资源
    最近更新 更多