该程序应执行以下操作:

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

  • 结果是随机结构在网格内合并。高正值的分组将影响附近的单元格并使它们偏斜,而低负值的分组将执行相同的操作,但会偏低。

    所有像元中所有值的总和应为零。尽管存在局部组的高偏和低偏数,但在足够大的样本量下,所有像元的总数应为零。

    问题是,经过1000次迭代后,这些值始终偏向负数。您具有结构和局部化的高点和低点,但是总值始终偏向负数。 (这意味着随着时间的推移,整个网格将仅填充负数)。

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

    编辑:我已将问题归结为以下功能。 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实现的浮点标准,至少可以说用十进制值进行算术是不容易的。

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

    仅当您最多保留两位小数时,此方法才有效。如果您需要的精度更高,那么我建议为该部分推荐使用Javascript以外的语言。

    09-05 05:48