我用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;
}
并有下一个例子:
我随机生成 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”坐标?我真的很困惑,我不是要代码;但是对于为什么我的输出不正确的一些解释。