当前位置: 首页 > 知识库问答 >
问题:

关于JavaScript数学的问题。随机()与基本逻辑

冉永宁
2023-03-14

我写了一段简单的代码来比较随机数组的差异,并发现了一些东西。。。我不太明白。

  1. 我生成两个填充随机数的数组
  2. 将随机数之间的差异相加
  3. 打印出平均差值

我本以为结果是接近0.5的随机数,但实际上是0.3333。

为什么随机数数组位于0.3而不是0.5?

const result = document.getElementById('result');
const generateRandomNrArray = (nrNumbers) => {
	let i;
	let result = [];
	for (i = 0; i < nrNumbers; i++) {
		result.push(Math.random());
	}
	return result;
}
const getArrayDiff = (arr1, arr2) => {
  var diff = 0;
  arr1.forEach(function (v1, index) {
      diff += Math.abs(v1 - arr2[index]);
  });
  return diff;
}
const run = (nr) => {
  const arr1 = generateRandomNrArray(nr);
  const arr2 = generateRandomNrArray(nr);
  const totalDiff = getArrayDiff(arr1, arr2); 
  
  result.innerHTML = "Average difference:" + (totalDiff / nr);
}
button {font-size: 2em;}
<div id="result"></div>
<button id="run" onclick="run(1500)">Click Me</button>

共有3个答案

吕俊哲
2023-03-14

这里有一个几何参数来说明为什么结果会收敛到1/3。

首先,让我们定义f(x,y)=abs(x-y)。我们需要证明的是,对于X和Y是均匀分布在[0,1]中的两个独立随机变量,E(X,Y)=1/3。

如果我们将函数f在3D中可视化,作为正方形[0,1]x[0,1]上的高度场,f下的体积由两个四面体组成,其底部是半单位正方形,其高度是单位高。

E(X, Y)是f下的体积。根据金字塔体积公式,两个四面体中的每一个都有体积a*h/3,其中a是它的基面积,h是它的高度。这意味着每个四面体都有体积1/2 * 1 * 1/3 = 1/6,因此E(X,Y)=2 * 1/6 = 1/3。

能翔宇
2023-03-14

(事实上,你不是在看差异,而是在看随机数之间的绝对差异。这是有区别的。(请原谅双关语。)

如果有两个独立的均匀分布随机变量X,Y~U[0,1],则它们的绝对差|X-Y将遵循三角形分布,期望值为1/3。一切都是应该的。这个分配结果,以及计算期望值,是概率论中相当标准的作业问题。直觉直接遵循马克的论点。

以下是绝对和非绝对差异的直方图。在左边,你可以看到更小的绝对差异有更多的质量,这降低了期望。

R代码:

set.seed(1)
xx <- runif(1e5)
yy <- runif(1e5)
par(mfrow=c(1,2))
hist(abs(xx-yy),main="|X-Y|",col="grey",xlab="")
hist(xx-yy,main="X-Y",col="grey",xlab="")

(顺便说一句,如果你有一个概率/统计问题,我们的姐妹网站交叉验证是一个很好的资源。)

羊舌洛华
2023-03-14

这基本上归结为一个极限,这是有道理的。考虑0和10之间的数字组合,并计算你可以做出的各种不同。

例如,有一个组合的差值为9-(0,9)。有5个,相差5:

[0, 5],  
[1, 6], 
[2, 7], 
[3, 8], 
[4, 9]

但是有九个组合相差1:

[1, 2], 
[2, 3], 

... 
[8, 9]

0-10时,计数为:

{1: 9, 2: 8, 3: 7, 4: 6, 5: 5, 6: 4, 7: 3, 8: 2, 9: 1}

共有45种组合,这些组合的平均差异为3.6666而非5,因为它们之间的差异较小,而较大。

当您将粒度从0-10增加到0-100时,同样的模式适用。有99种组合会导致差异1,只有50种组合的差异为50,平均值为33.6666

随着有效位数从相反方向增加到相反方向,并在0和1之间进行越来越精细的分割,您会发现与限制接近1/3的过程相同。将平均差异拉低的差异比拉低的差异小得多。对于0-1,在0.1的间隔内,您将看到9与0.1的差值,5与0.5的差值,在0.01处,将有99与0.01的差值,50与0.5的差值。当间隔接近0时,差异的平均值接近1/3

 类似资料:
  • 问题内容: 我对本地数据库和基于服务的数据库有一些疑问:使用基于服务的数据库是否要求用户安装SQL Server?如果是这样,有没有解决的办法?本地数据库是否要求用户安装SQL Server?本地数据库和基于服务的数据库之间有什么区别?(我正在谈论Visual Studio中的项目) 问题答案: 客户端不需要安装SQL即可以编程方式连接到其他地方的数据库。无论哪种机制包含连接数据库的代码,通常都会

  • 我在用数学。函数获取从0到“max”数字范围内的整数。但据sonarqube称,这是“安全热点”的媒介问题。

  • 我试图理解与Spring数据JPA的使用。考虑以下是从表中拉出的位置。 公共接口用户存储库扩展了JpaRepository{ 一切都很好。现在,在同一个界面上,我可以添加如下方法,其中它是从中提取的,它将与实体类不匹配。 A这也很好用。现在我真正的问题是,如果实体类与无关,为什么我们需要实体类。我们只是想确保代码能够正确编译吗?这是否意味着我甚至可以将任何类放入

  • 9.1.2 随机问题的建模与模拟 现实中有许多不确定的事件,称为随机事件。例如抛一枚硬币,结果是正面朝上还是反 面朝上,这是不确定的。研究随机事件的数学方法是统计,例如经过大量统计试验可以得出 结论:抛硬币时正面朝上和反面朝上的可能性是相等的,各占 50%。注意,说硬币正面朝 上和反面朝上的可能性各占 50%,并不意味着抛硬币试验将得到“正,反,正,反,…” 的结果,完全有可能出现一连串的正面或一

  • 我不能为我的生活,弄清楚为什么这将不调用用户输入正确?用户应该给出一个范围的上限和下限,然后当他们提交时,他们会得到一个介于这两个数字之间的随机数。我假设问题是我调用“.value”的时候,但我不知道有什么其他的方法,所以任何帮助都是非常感谢的。

  • 我想破译基于频率分析的文本,编程不是问题,但有一些数学困难。 (别担心,不是为了黑客攻击,我想试试十二宫杀手340密码,但问题只是关于破译http://zodiackillerciphers.com/wiki/images/7/7d/340-cipher-hi-resolution.jpg的一般问题,而不是密码的其他问题。) 我已经把它分解为5个简短的问题,都与成本函数有关,以表明我的努力,简短的