0

我用Java开发了以下代码:

/**
 * Método que sirve como generador lineal con unos parámetros dados.
 * @param multiplier    multiplicador de la seed dada.
 * @param seed  semilla inicial del programa; indicará en que punto del periodo comienza el generador.
 * @param addition  adición adicional a la semilla.
 * @param modulus   módulo usado.
 * @param num   cantidad de numeros a generar.
 * @return un vector con los valores generados.
 */

public static BigDecimal[] generadorLineal(BigDecimal multiplier, BigDecimal seed, BigDecimal addition, BigDecimal modulus, int num)
{
    BigDecimal numeros[] = new BigDecimal[num];
    numeros[0] = multiplier.multiply(seed);
    numeros[0] = numeros[0].add(addition);
    numeros[0] = numeros[0].remainder(modulus);

    for(int i = 1; i < num; i++){
        numeros[i] = multiplier.multiply(numeros[i-1]);
        numeros[i] = numeros[i].add(addition);
        numeros[i] = numeros[i].remainder(modulus);
    }

    /*for(int i = 0; i < num; i++){ //normalization (0,1)
        numeros[i] = numeros[i].divide(modulus.subtract(BigDecimal.valueOf(1)), 2, RoundingMode.HALF_UP);
    }*/

    return numeros;
}

并有下一个例子:

LCG 示例

我随机生成 50 个点;实际上是八:

  • p1(x1,y1) = (5,5)
  • p2(x2,y2) = (25,25)
  • p3(x3,y3) = (29,29)
  • p4(x4,y4) = (17,17)
  • p5(x5,y5) = (21,21)
  • p6(x6,y6) = (9,9)
  • p7(x7,y7) = (13,13)
  • p8(x8,y8) = (1,1)

接下来的42分是同一时期。这是我得到的输出:

输出

但是,我的老师告诉我结果是错误的;因为它应该只分布在我画布的坐标 x,y 中的五个点以上;或者换一种说法,我的点数是错误的,我的坐标“y”不正确。我当然不明白为什么它应该只有五个不同的点,或者我应该如何生成我的“y”坐​​标。

如果该 LCG 生成的周期是 8,这是否意味着程序正在为我的画布生成八个不同的“x”坐标?我真的很困惑,我不是要代码;但是对于为什么我的输出不正确的一些解释。

4

0 回答 0