【问题标题】:How to generate random numbers with normal distribution in matlab [duplicate]如何在matlab中生成具有正态分布的随机数[重复]
【发布时间】:2014-05-27 21:40:22
【问题描述】:

我想生成遵循正态分布并在某个范围内的随机数,例如 [3,17]。 我试过normrnd,但我无法指定它的范围。

【问题讨论】:

  • “正态分布”和“在某个范围内”是不兼容的要求。正态随机变量的范围是无限的
  • “正态分布”以0 为中心(可以通过加法移动)并用“mu,sigma”定义。如果您想要从 3 到 17 的随机分布(所有值或多或少均等分布),请尝试:round(rand(1,1000)*14+3) 这会产生从 3 到 17(14+3) 的整数值。如果您不想要整数值,请删除/修改 round-command
  • @TheMinion 但是rand 生成的数字是均匀分布而不是正态分布。
  • 我可以使用abs(randn(1)*14+3) 吗?
  • @Misaki。 Abs 不应该有任何影响,因为正值的绝对值就是值本身。是的,我的代码导致了均匀分布。我真的不明白你的发行版应该是什么样子。正如路易斯·门多在评论中所写。没有一定范围的正态分布。你想要一个以 10 为中心、宽度为 7 的高斯分布吗?你能画/张贴一张图表吗?

标签: matlab random


【解决方案1】:

统计工具箱允许创建截断分布

警告:这不再是正态分布

数据将不再服从正态分布,假设将失效,通常不是一个好主意...

在没有给出分布的平均值或标准差的情况下,将使用以下值:

mu = 10; %center of the range
sigma = 14/6; % range covers mu + or - 3*s.d.

可以按如下方式进行分布和截断

pd=makedist('normal','mu',mu,'sigma',sigma)
pd=truncate(pd,3,17);

可以使用random从此分布生成给定大小的样本

nrows=10;
ncols=5;  
data=random(pd,ncols,nrows);

示例

hist(random(pd,10e6,1),10000)

可以看到数据落在 3 到 17 之间,并且在这些范围内看起来类似于正态分布……但由于截断,它不再是正态分布

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-17
    • 2015-03-22
    • 2011-09-08
    • 1970-01-01
    • 2017-03-10
    • 2014-11-06
    • 2012-01-20
    • 2011-12-24
    相关资源
    最近更新 更多