Добрый день,
долго занимаясь вычислительной математикой прошел стороной сабж, и, к своему стыду, кроме x_{i+1}=(c+x_i*a)/b ничего не знаю...
Посоветуйте, пожалуйста, простой в вычислении генератор случайных чисел для такой задачи:
есть 2-3-4-...гиперкуб размерности n1*n2*...*nk
Мне необходимо получить в нем M псевдослучайных точек, так чтобы для всех гиперплоскостей n1*...*ni*...*nk было не менее [M/ni] и не более [M/ni]+1 точек, полагая, что [M/ni] больше 0, и [] - операция целое.
На пальцах для 2-х мерного случая это означает, что число таких псевдослучайных точек внутри каждой строки равно друг другу или отличается не более, чем на единицу и то же самое действительно для всех столбцов.
Очень желательно иметь еще возможность сгенерить такие M точек, а потом увеличить до M_+, и догенерить (M_+)-M оставшихся точек.
Хочу формулу или понятный алгоритм в виде блок-схемы, так как мне надо имплементировать его на CUDA, FPGA, и восьмибитнике, так чтобы не было использовано много памяти (не более 512 байт в восмибитнике, или 128 четырехбайтных слов в CUDA или один M9K в плиске). Из-за этого ограничения я не могу запомнить предыдущие сгенеренные точки и их использовать при вычислении следующих точек.
Как я понимаю, это очень распространенная задача для Монтекарловки, но, как-то на раз ничего хорошего ни на гуглить, ни на матскинетить я не смог.
Долго и упорно читать монографии и совеццкие книги - времени нет, да и мало вероятно, что там это есть.
Нужна идея, ссылка на статью по теме, или ссылка на описание похожего алгоритма.
Кто в теме, пожалуйста, посоветуйте!
Спасибо
ИИВ
|