rand
Случайные числа
Синтаксис
r = rand() r = rand(m1,m2,...) r = rand(m1,m2,...,key) r = rand(x) r = rand(x,key) s = rand("seed") rand("seed",s) rand(key) key = rand("info")
Аргументы
- m1, m2, ...
целые числа, размер матрицы случайных чисел
r
.- key
строка, распределение случайных чисел (по умолчанию
key="uniform"
). Доступными значениями являются:"uniform"
(равновероятный) или"u"
"normal"
(нормальный) или"n"
- x
вещественная или комплексная матрица. Рассматриваются только её вещественное или комплексное содержимое и её размеры.
- r
вещественный массив чисел двойной точности (double) размером m1 на m2 на ... со случайными элементами.
- s
матрица чисел двойной точности размером 1 на 1, целочисленное значение, положительное, семя генератора случайных чисел (по умолчанию
s=0
).
Описание
Назначение данной функции в том, чтобы возвращать матрицу чисел двойной точности со случайными вещественными или комплексными элементами. В зависимости от входных аргументов, функция может возвращать матрицу случайных чисел двойной точности или может получать или устанавливать закон распределения случайных чисел, или может получать или устанавливать семя генератора случайных чисел.
Генерация случайных чисел
- r=rand()
возвращает матрицу чисел двойной точности размером 1 на 1 с одним случайным значением.
- r=rand(m1,m2)
это матрица случайных чисел размером
m1
наm2
.- r=rand(m1,m2,...,mn)
возвращает матрицу случайных чисел размером
m1
наm2
на ... наmn
.- r=rand(a)
возвращает матрицу случайных чисел того же размера, что и
a
. Матрицаr
является вещественной, еслиa
является вещественной иr
является комплексной, еслиa
является комплексной матрицей.
Смена закона распределения случайных чисел
Входной аргумент key
устанавливает закон распределения генерируемых
случайных чисел.
- rand("uniform")
устанавливает генератор случайных чисел на генерацию случайных чисел по равновероятному закону. Случайные числа равномерно распределены на интервале [0,1).
- rand("normal")
устанавливает генератор случайных чисел на генерацию случайных чисел по нормальному (Гаусс-Лапласовскому) закону распределения, с математическим ожиданием 0 и дисперсией 1.
- key=rand("info")
возвращает текущий закон распределения генератора случайных чисел ("uniform" для равновероятного или "normal" для нормального).
Получение или установка семени генератора случайных чисел
Есть возможность получить или установить семя генератора случайных чисел.
- s=rand("seed")
возвращает текущее значение семени.
- rand("seed",s)
устанавливает семя генератора случайных чисел равным
s
(по умолчаниюs=0
при первом вызове).
Примеры
В следующем примере мы генерируем случайные числа двойной точности с различными законами распределения.
// Получим одно случайное число (на основе текущего распределения) r=rand() // Получим матрицу размером 4 на 6 (на основе текущего распределения) r=rand(4,6) // Получим матрицу размером 4 на 6 со значениями элементов, // распределёнными по равновероятному закону распределения r=rand(4,6,"uniform") // Сформируем матрицу случайных чисел того же размера, что и x x=rand(4,4); r=rand(x,"normal") // Сформируем массив случайных чисел размером 2 на 2 на 2 r=rand(2,2,2)
В следующем примере мы изменим закон распределения чисел, генерируемых функцией
rand
. Сначала генерируем числа по нормальному закону распределения,
а затем числа но равновероятному закону на интервале [0,1).
// настроим генератор случайных чисел на // нормальный закон распределения rand("normal") r=rand(4,6) // получим текущий закон распределения key=rand("info") // настроим генератор случайных чисел на // равновероятный закон распределения rand("uniform") r=rand(4,6) // получим текущий закон распределения key=rand("info")
В следующем примере мы сгенерируем матрицу комплексных чисел размером 2 на 3 по нормальному закону распределения.
// формируем матрицу случайных комплексных чисел размером 2 на 3 x=rand(2,3)+%i*rand(2,3) // Формируем матрицу случайных комплексных чисел по нормальному // закону распределения того же размера, что и x r=rand(x,"normal")
В следующем примере мы построим на графике распределение случайных равновероятных чисел,
полученных rand
.
r=rand(1000,1,"uniform"); scf(); histplot(10,r); xtitle("Равновероятные числа из rand","X","Частота")
В следующем примере мы построим на графике распределение случайных чисел,
сгенерированных rand
по нормальному закону распределения.
Получение более или менее предсказуемых чисел
Генератор псевдослучайных "равновероятных" чисел является детерминированной последовательностью, которая предназначена для воспроизводства независимых одинаково распределённых чисел, равновероятных на интервале [0,1).
Для того, чтобы получить повторяемые моделирования, начальное семя генератора случайных
чисел равно нулю, так что последовательность будет оставаться одной и той же от одной
сессии к другой. Иными словами, начальные числа, производимые rand()
,
всегда: 0.2113249, 0.7560439, ...
В некоторых случаях моделирования мы можем захотеть инициализировать семя генератора
случайных чисел для того, чтобы получить менее предсказуемые последовательности.
В этом случае мы можем инициализировать семя с помощью выходного значения функции
getdate
:
n=getdate("s"); rand("seed",n);
Генератор
Генератор случайных "равновероятных" чисел описан в работе Майкла А. Малькольма, (Michael A. Malcolm), Клива Б. Молера (Cleve B. Moler) "Urand, A Universal Random Number Generator" (Urand, Универсальный Генератор Случайных Чисел), Stan-Cs-73-334, январь 1973, факультет информатики, кафедра гуманитарных и естественных наук Стенфордского университета.
Это линейный конгруэнтный генератор вида:
x = (a x + c) mod M
где константами являются
a = 843314861 |
c = 453816693 |
M = 231 |
Согласно авторам, этот генератор является генератором полной длины, иначе говоря, его период равен M = 231 = 2147483648.
Генератор случайных чисел с нормальным распределением ("normal"
)
основан на методе Бокса-Мюллера, где источником равновероятных случайных чисел является Urand.
Статистическое качество генератора
В функции grand доступны более лучшие генераторы случайных
чисел в том смысле, что они имеют как более длинный период, так и более лучшие
статистические свойства. В случае, когда качество случайных чисел имеет значение,
следует использовать функцию grand
.
Более того, функция grand
имеет больше возможностей.
Смотрите также
Report an issue | ||
<< prbs_a | random | sample >> |