Программа должна делать следующее:
- Инициализирует сетку значений «ActualGridValues» (X строк на Y столбцов), равную 0.
- Создает другую сетку значений, «RandomGridValues» (X строк на Y столбцов), определяет каждую ячейку в сетке как равную среднему значению N случайных чисел в диапазоне от -Z до Z.
- Добавляет число из 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;
}
}
}
RandNums
случайных значений в [-RandMax, RandMax], вам нужно сделать этоRandomGrid += (Math.random()*RandMax - 2*RandMax);
- иначе вы получите либо все положительные, либо все отрицательные значения в зависимости от знакаRandMax
- person Cris Stringfellow   schedule 12.03.2013RandMin
иRandMax
всегда будет равной). Возможно, вам стоит отнести это на math.stackexchange.com :-) - person Aaron Blenkush   schedule 12.03.2013