Являются ли числа, сгенерированные rand () в matlab зависимыми? - PullRequest
0 голосов
/ 04 января 2019

У меня есть вопрос о rand () в MATLAB.

Я хочу знать, зависят ли числа, сгенерированные rand ().

Например, я генерирую непосредственно 1 *2 матрица N от rand ().

Будет ли N (1) влиять на N (2)?Если N (1) равно 0,2, то N (2) будет больше или меньше 0,2 с большей вероятностью?

1 Ответ

0 голосов
/ 04 января 2019

В отсутствие специального оборудования компьютеры не могут генерировать случайные числа. Они используют алгоритмы для генерации псевдослучайных чисел, которые называются генераторами псевдослучайных чисел ("PRNG").

В случае Matlab он использует Mersenne Twister в качестве генератора по умолчанию . Связанная запись в Википедии прекрасно суммирует сильные и слабые стороны Mersenne Twister.

Из-за того, как работает PRNG, последующие выходы PRNG зависят от . Или, как предположил Джеймс Полк, точнее сказать, что последующие значения зависят от внутреннего состояния, которое изменяется детерминистическим образом при каждом вызове.

Если вы повторно запустите PRNG с тем же значением, он выдаст ту же последовательность чисел, что и раньше. Смотрите пример ниже в Python (который также использует Mersenne Twister).

In [1]: import random                                                                                    

In [2]: random.seed('foobar')                                                                            

In [3]: [random.randint(0, 255) for j in range(15)]                                                      
Out[3]: [128, 127, 178, 80, 112, 31, 1, 234, 24, 206, 253, 213, 6, 215, 16]

In [4]: random.seed('foobar')                                                                            

In [5]: [random.randint(0, 255) for j in range(15)]                                                      
Out[5]: [128, 127, 178, 80, 112, 31, 1, 234, 24, 206, 253, 213, 6, 215, 16]

И со временем последовательность повторится. Это называется «период» PRNG.

Если этот PRNG только что был запущен, может пройти некоторое время, прежде чем он выдаст хороший случайный результат из-за большого внутреннего состояния. Вы должны запустить тесты, чтобы увидеть, так ли это в Matlab. Возможно, разработчики Matlab имели дело с генерацией и отбрасыванием значительного количества случайных чисел при инициализации генератора.

Чтобы проверить это, сгенерируйте несколько блоков по 1 КБ случайных байтов, используя matlab. Затем используйте, например, dieharder или ent , чтобы проверить и сравнить случайность последующих блоков.

...