【发布时间】:2014-03-24 20:17:01
【问题描述】:
我的问题:
如何在 Javascript 中创建具有给定均值和标准差 (sd) 的随机数列表?
示例:
我想创建一个包含 5 个介于 1 到 10 之间的随机数的列表。结果平均值应该是 5,标准差应该是 2。
到目前为止我做了什么:
我的想法是(http://jsfiddle.net/QASDG/3/):
- 创建一个函数(名为“createData”),它创建 5 个介于 1 和 10 之间的随机数并将它们推入一个“数组”
- 此函数还应计算这 5 个数字的平均值(和标准差)。
- 使用“do-while”循环:只要“平均值变为 5”(并且“sd 变为 2”),就执行上述功能。但是当我调用 do-while 循环时,浏览器当然会崩溃,因为在很多情况下平均值为 != 5(而 sd != 2)。
注意:我还没有添加 SD,因为代码不是很优雅。
我从该站点找到了另一个脚本,该脚本声明:“此代码的目标是生成一个集合,其中包含 5 个正态分布的随机数,均值为 1.0,标准差为 0.5。” http://rosettacode.org/wiki/Random_numbers#JavaScript。我尝试通过添加“Math.floor”并更改“for”循环(i
function randomNormal() {
return Math.floor(Math.cos(2 * Math.PI * Math.random()) * Math.sqrt(-2 * Math.log(Math.random())))
}
var a = []
for (var i=0; i < 5; i++){
a[i] = randomNormal() / 2 + 1
}
我想如何修改我的代码:
我不太确定我是否理解了这段代码的数学部分。根据网页,它将创建一个正态分布(这很好但不是必需的)。所以我还需要的是:
- 我在哪里可以更改给定的平均值和 sd(例如 mean = 5, sd = 2)以创建随机数(满足这些属性)。
- 如何实现 1 到 10 之间的范围? (也许我可以使用类似:Math.floor(Math.random()*10)+1)
非常感谢!
【问题讨论】:
-
不是
Math.floor在那个地方总是四舍五入到0吗? -
wikihow.com/Calculate-Standard-Deviation 现在编码。向我们展示您尝试了什么,然后我们提供帮助。我敢打赌这是你在学校的练习,老实说这很有趣,所以为了你自己的好不要寻找现成的解决方案,不要要求现成的解决方案
-
@Peter:请重新阅读问题。他不想计算标准差,他想生成一个具有所需属性的集合。此外,他确实提供了他尝试过的代码。
-
@Peter:那你为什么要评论“告诉我们你尝试了什么”并链接到wikihow.com/Calculate-Standard-Deviation?
-
@OhDaeSu:在我看来,在 1 到 10 的范围内找不到 5 个整数,平均值 = 5,sd = 2。在你的情况下是否可以设置sd 不是数字,而是范围?
标签: javascript random numbers