为什么这些随机数慢慢地趋向于负值



程序应该做以下事情:

  1. 初始化一个值的网格,"ActualGridValues",(X行Y列)等于0。
  2. 创建另一个数值网格"RandomGridValues"(X行乘Y列),将网格中的每个单元格定义为等于-Z到z范围内N个随机数的平均值。
  3. 将RandomGridValues中的数字添加到ActualGridValues中相应的单元格。
  4. 对于ActualGridValues中的每个单元格,它还添加相邻单元格的值。
  5. 无限重复步骤2-4。

结果是随机结构在网格内合并。高正值的分组将影响附近的单元格,并导致它们高度倾斜,低负值的分组将产生相同的效果,但倾斜程度较低。

所有单元格中所有值的和积应该为零。尽管存在高偏态数和低偏态数的局部组,但在足够大的样本量上,所有细胞的总数应该为零。

问题是,在1000次迭代之后,这些值始终是负的。你有结构和局部的高点和低点,但总价值总是负的。(这意味着随着时间的推移,整个网格将只充满负数)。

每次运行模拟时,值都偏负。有什么想法吗?

Edit:我已经将问题分离到以下函数。RandomGridValue中所有数字的平均值几乎总是为负。

//For every cell value, this function generates a string of random numbers between -RandMax/2 and +RandMax/2. It then takes the average of all of these numbers. It assigns that value to a cell in the RandomGridValue array. 
function AddChaos() {
     for (var l = 0; l < GridX; l++) {
         for (var m = 0; m < GridY; m++) {
             var RandomGrid = 0;
             for (var n = 0; n < RandNums; n++) {
                 RandomGrid = RandomGrid + Math.random() * RandMax * 2 - RandMax;
             }
             RandomGridValue[l][m] = RandomGrid / RandNums;
         }
     }
 }  

由于Javascript实现的浮点标准,用十进制值做算术至少是有bug的…

一种解决方法是通过乘以100将小数转换为整数,进行数学运算然后除以100。

只有当你最多有2位小数点时才有效。如果您需要比这更精确的内容,我建议您使用Javascript以外的语言。

相关内容

  • 没有找到相关文章

最新更新