rand
X = rand возвращает одно равномерно распределенное случайное число в интервале (0,1).
X = rand( n ) возвращает n -by- n матрица случайных чисел.
X = rand( sz1. szN ) возвращает sz1 . -by- szN массивом случайных чисел, где sz1. szN указывает на размер каждой размерности. Например, rand(3,4) вернёт матрицу размером 3 на 4.
X = rand( sz ) возвращает массив случайных чисел, причем вектор sz задает size(X). Например, rand(3,4) вернёт матрицу размером 3 на 4.
X = rand( ___ , typename ) возвращает массив случайных чисел типа данных typename . Typename может быть либо ‘single’, либо ‘double’. Можно комбинировать с любым синтаксом из перечисленных выше.
X = rand( ___ ,’like’, p ) возвращает массив случайных чисел, подобных p; подобных — то есть того же типа. Можно задавать typename или использовать ‘like’, но не то и другое одновременно.
Примечание
‘seed’, ‘state’ и ‘twister’ в качестве входных параметров не рекомендованы. Вместо этого используйте функцию rng. Для получения дополнительной информации смотрите Замену Нежелательные Синтаксисы rand и randn.
Примеры
Матрица случайных чисел
Сгенерируйте матрицу 5 на 5 равномерно распределенных случайных чисел между 0 и 1.
r = rand(5)
r = 5×5 0.8147 0.0975 0.1576 0.1419 0.6557 0.9058 0.2785 0.9706 0.4218 0.0357 0.1270 0.5469 0.9572 0.9157 0.8491 0.9134 0.9575 0.4854 0.7922 0.9340 0.6324 0.9649 0.8003 0.9595 0.6787
Случайные числа в заданном интервале
Сгенерируйте вектор-столбец 10 на 1 равномерно распределенных чисел в интервале (-5,5).
r = -5 + (5+5)*rand(10,1)
r = 10×1 3.1472 4.0579 -3.7301 4.1338 1.3236 -4.0246 -2.2150 0.4688 4.5751 4.6489
В целом можно сгенерировать случайные числа N в интервале (a, b) с формулой r = a + (b-a).*rand(N,1) .
Случайные целые числа
Используйте функцию randi (вместо rand ), чтобы сгенерировать 5 равномерно распределенных случайных чисел между 10 и 50.
r = randi([10 50],1,5)
r = 1×5 43 47 15 47 35
Случайные комплексные числа
Сгенерируйте одно случайное комплексное число с действительными и мнимыми частями в интервале (0,1).
a = rand + 1i*rand
a = 0.8147 + 0.9058i
Сброс генератора случайных чисел
Сохраните текущее состояние генератора случайных чисел и создайте вектор 1 на 5 случайных чисел.
s = rng; r = rand(1,5)
r = 1×5 0.8147 0.9058 0.1270 0.9134 0.6324
Восстановите состояние генератора случайных чисел к s , и затем создайте новый вектор 1 на 5 случайных чисел. Значения те же, что и прежде.
rng(s); r1 = rand(1,5)
r1 = 1×5 0.8147 0.9058 0.1270 0.9134 0.6324
Всегда используйте функцию rng (а не rand или функции randn ), чтобы задать настройки генератора случайных чисел. Для получения дополнительной информации смотрите Замену Нежелательные Синтаксисы rand и randn.
Трехмерный массив случайных чисел
Создание массива 3 на 2 на 3 случайных чисел.
X = rand([3,2,3])
X = X(. 1) = 0.8147 0.9134 0.9058 0.6324 0.1270 0.0975 X(. 2) = 0.2785 0.9649 0.5469 0.1576 0.9575 0.9706 X(. 3) = 0.9572 0.1419 0.4854 0.4218 0.8003 0.9157
Определение типа данных случайных чисел
Создайте вектор 1 на 4 случайных чисел, элементы которых являются одинарной точностью.
r = rand(1,4,'single')
r = 1x4 single row vector 0.8147 0.9058 0.1270 0.9134
class(r)
ans = 'single'
Клонирование размера от существующего массива
Создайте матрицу случайных чисел с тем же размером как существующий массив.
A = [3 2; -2 1]; sz = size(A); X = rand(sz)
X = 2×2 0.8147 0.1270 0.9058 0.9134
Это — общий шаблон, чтобы объединить предыдущие две строки кода в одну строку:
X = rand(size(A));
Клонирование размера и тип данных от существующего массива
Создайте матрицу 2 на 2 случайных чисел одинарной точности.
p = single([3 2; -2 1]);
Создайте массив случайных чисел, который одного размера и тип данных как p .
X = rand(size(p),'like',p)
X = 2x2 single matrix 0.8147 0.1270 0.9058 0.9134
class(X)
ans = 'single'
Клонирование распределенного массива
Если вы имеете Parallel Computing Toolbox™, создаете распределенный массив 1000 на 1000 случайных чисел с базовым типом данных single . Для типа данных distributed синтаксис ‘like’ клонирует базовый тип данных в дополнение к основному типу данных.
p = rand(1000,'single','distributed');
Starting parallel pool (parpool) using the 'local' profile . connected to 6 workers.
Создайте массив случайных чисел, который одного размера, основной тип данных и базовый тип данных как p .
X = rand(size(p),'like',p);
class(X)
ans = distributed
classUnderlying(X)
ans = single
Входные параметры
n Размер квадратной матрицы
целочисленное значение
Размер квадратной матрицы, заданной как целочисленное значение.
- Если n является 0 , то X является пустой матрицей.
- Если n отрицательно, это эквивалентно n = 0.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
sz1. szN — Размер каждой размерности (в качестве отдельных аргументов)
целочисленные значения
Размер каждой размерности, заданной в качестве отдельных аргументов целочисленных значений.
- Если размером какой-либо размерности является 0 , то X является пустым массивом.
- Если размер какой-либо размерности отрицателен, то это обработано как 0 .
- После второго измерения rand игнорирует последующие измерения с размером 1. Например, rand(3,1,1,1) производит вектор 3 на 1 случайных чисел.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
sz — Размер каждой размерности (как вектор — строка)
целочисленные значения
Размер каждой размерности, заданной как вектор — строка из целочисленных значений. Каждый элемент этого вектора указывает на размер соответствующей размерности:
- Если размером какой-либо размерности является 0 , то X является пустым массивом.
- Если размер какой-либо размерности отрицателен, то это обработано как 0 .
- После второго измерения rand игнорирует последующие измерения с размером 1. Например, rand([3,1,1,1]) производит вектор 3 на 1 случайных чисел.
Пример: sz = [2,3,4] создает 2 массивом 3 на 4.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
typename — Тип (класс) создаваемых данных
‘double’ (значение по умолчанию) | ‘single’
Тип (класс) создаваемых данных, заданный как ‘double’ , ‘single’ или имя другого класса, который оказывает поддержку rand .
Пример: rand(5,’single’)
p Прототип создаваемого массива
числовой массив
Прототип создаваемого массива, заданный как числовой массив.
Пример: rand(5,’like’,p)
Типы данных: single | double
Поддержка комплексного числа: Да
Советы
- Последовательность чисел, произведенная rand , определяется внутренними настройками универсального генератора псевдослучайного числа, который лежит в основе rand , randi и randn . Можно управлять этим генератором, используя функцию rng.
Расширенные возможности
Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.
Указания и ограничения по применению:
- Тип данных (класс) должен быть встроенным в MATLAB ® числовым типом. Для других классов не вызывается статический метод rand . Например, rand(sz,’myclass’) не вызывает myclass.rand(sz) .
- Аргументы размера должны иметь фиксированный размер.
- «Смотрите информацию о генерации кода функций Toolbox (MATLAB Coder) в разделе «»Ограничения переменных размеров»».».
Массивы графического процессора
Ускорьте код путем работы графического процессора (GPU) с помощью Parallel Computing Toolbox™.
Указания и ограничения по применению:
- Смотрите rand в документации Parallel Computing Toolbox.
Распределенные массивы
Большие массивы раздела через объединенную память о вашем кластере с помощью Parallel Computing Toolbox™.
Указания и ограничения по применению:
- Смотрите rand в документации Parallel Computing Toolbox.
Смотрите также
Темы
- Создание массивов случайных чисел
- Случайные числа в определенной области значений
- Случайные числа в сфере
- Создание и управление потоком случайных чисел
- Поддержка класса функций создания массивов
- Замените Нежелательные Синтаксисы rand и randn
- Почему случайные числа повторяются после запуска?
Представлено до R2006a
Документация MATLAB
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2019 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
Создание массивов со случайными элементами MatLab
р = randperm(n) — возвращает случайные перестановки целых чисел 1:n в векторе-строке. Пример:
Функция rand генерирует массивы случайных чисел, значения элементов которых равномерно распределены в промежутке (0, 1):
rand(n) — возвращает матрицу размера nхn. Если n — не скаляр, то появится сообщение об ошибке;
rand(m.n) или rand([m п]) — возвращают матрицу размера mxn;
rand(m.n,p. ) или rand([m n р. ]) — возвращает многомерный массив;
rand(size(A)) — возвращает массив того же размера и размерности, что и А, с элементами, распределенными по равномерному закону;
rand (без аргументов) — возвращает одно случайное число, которое изменяется при каждом последующем вызове и имеет равномерный закон распределения;
rand(‘ state’) — возвращает вектор с 35 элементами, содержащий текущее состояние генератора случайных чисел с равномерным распределением. Для изменения состояния генератора можно применять следующие формы этой функции:
rand(‘state’ .s) — устанавливает состояние в s;
rand( ‘state’ ,0) — сбрасывает генератор в начальное состояние;
rand( ‘state’. j) — для целых j, устанавливает генератор в j-е состояние;
rand( ‘state’ ,sum(100*clock)) — каждый раз сбрасывает генератор в состояние, зависящее от времени.
0.9501 0.8913 0.8214
0.2311 0.7621 0.4447
0.6068 0.4565 0.6154
0.4860 0.0185 0.7919
Проверить равномерность распределения случайных чисел можно, построив большое число точек на плоскости со случайными координатами. Это делается с помощью следующих команд:
Полученный при этом график показан на рис. 10.1. Нетрудно заметить, что точки довольно равномерно распределены на плоскости, так что нет оснований не доверять заданному закону распределения координат точек.
Рис. 10.1. Случайные точки с равномерным распределением координат на плоскости
Функция randn генерирует массив со случайными элементами, распределенными по нормальному закону с нулевым математическим ожиданием и среднеквадратическим отклонением, равным 1:
randn(n) — возвращает матрицу размера nхn. Если n — не скаляр, то появится сообщение об ошибке;
randn(m.n) или randn([m n]) — возвращают матрицу размера mxn;
randn(m,n,p. ) или randn([m n р. ]) — возвращает массив с элементами, значения которых распределены по нормальному закону;
randn(size(A)) — возвращает массив того же размера, что и А, с элементами, распределенными по нормальному закону;
randn (без аргументов) — возвращает одно случайное число, которое изменяется при каждом последующем вызове и имеет нормальное распределение;
randn( ‘state’) — возвращает двухэлементный вектор, включающий текущее состояние нормального генератора. Для изменения состояния генератора можно применять следующие формы этой функции:
randn(‘state’,s) — устанавливает состояние в s;
randn(‘state’ ,0) — сбрасывает генератор в начальное состояние;
randn(‘state’, j) — для целых j устанавливает генератор в J-e состояние;
randn(‘state’, sum( 100*clock)) — каждый раз сбрасывает генератор в состояние, зависящее от времени.
-0.4326 -1.1465 0.3273
-1.6656 1.1909 0.1746
0.1253 1.1892 -0.1867
0.2877 -0.0376 0.7258
Проверить распределение случайных чисел по нормальному закону можно, построив гистограмму распределения большого количества чисел. Например, следующие команды
строят гистограмму (рис. 10.2) из 100 столбцов для 10 000 случайных чисел с нормальным распределением.
Рис. 10.2. Гистограмма для 10 000 нормально распределенных чисел в 100 интервалах
Из рисунка видно, что огибающая гистограммы действительно близка к нормальному закону распределения.
В пакете расширения Statistics Toolbox можно найти множество статистических функций, в том числе для генерации случайных чисел с различными законами распределения и определения их статистических характеристик.
MathWorks MATLAB
Запуск графического пользовательского интерфейса производится с использованием технологии X Window, следующей командой:
/opt/shared/matlab/r2013b/bin/matlab
module load matlab/r2013b matlab
Графический интерфейс должен запускаться только на узлах кластера, с помощью интерактиыного режима PBS (‘qsub -I -X …’), но не на интерфейсном сервере.
Общие сведения
Есть несколько вариантов запуска MATLAB-программ с использованием кластера:
Запуск MATLAB-программ в пакетном режиме на отдельных узлах. Для этого в описании сценария запуска задачи необходимо вызвать MATLAB командой
matlab -nodisplay -nodesktop -nojvm -nosplash -r "myfunc"
при условии, что в текущей директории есть файл myfunc.m , в котором определена функция myfunc . В этом случае число одновременно запущенных расчетов ограничено числом имеющихся у нас лицензий. Можно запустить одновременно пять расчетов.
Компиляция программ MATLAB в исполняемые файлы для запуска на любом числе компьютеров. Для этого используется компилятор Matlab Compiler. Для запуска этого компилятора требуется отдельная лицензия.
Запуск в параллельном режиме с использованием распределенных массивов и тех функций ядра MATLAB, для которых существует параллельная реализация. Для этого необходимо создать массив, который будет передаваться в качестве аргумента функциям MATLAB как распределенный (distributed). Этот вариант потребует изменений в MATLAB-программе. Подробнее можно прочитать в документации к Parallel Computing Toolbox. В этом режиме можно использовать 16 и более параллельных процессов.
Вызов функций matlab из C-программы. Подробнее об этом методе можно прочитать в документации к функции »mex».
Пожалуй, самый простой способ, это способ, не требующий компиляции, т.е. способ № 1. О нём подробнее рассказано в следующем разделе.
Запуск MATLAB-программ в пакетном режиме
Простую программу на matlab можно запустить в пакетном режиме. В качестве примера возьмем такую программу:
function myfunc A = rand(5); csvwrite('eig.txt',eig(A));
Эта программа генерирует случайную квадратную матрицу, вычисляет вектор её собственных значений и записывает этот вектор в файл eig.txt .
Запишем эту программу в файл myfunc.m ,
в той же директории создадим файл для запуска расчета run_myfunc.sh следующего содержания:
#!/bin/bash #PBS -l walltime=00:10:00 #PBS -l select=1:ncpus=1 cd $PBS_O_WORKDIR module load matlab/r2013b matlab -nodisplay -nodesktop -nojvm -nosplash -r "myfunc"
через некоторое время после постановки расчета в очередь командой qsub run_myfunc.sh в этой же директории будет создан файл eig.txt , содержащий пять вещественных или комплексных чисел, вычисленных с одинарной точностью.
MATLAB Compiler
Документация:
Ниже приведены ссылки на официальные страницы с описанием текущей версии MATLAB Compiler. Хотя там рассматривается более новая версия, чем установлена у нас, ссылки всё равно могут быть полезны:
Каждый пользователь перед первым использованием MATLAB Compiler должен создать персональный файл с параметрами компиляции. Для этого на интерфейсном сервере нужно выполнить:
module load matlab/r2013b mbuild -setup
Команда выведет на экран:
Options files control which compiler to use, the compiler and link command options, and the runtime libraries to link against. Using the 'mbuild -setup' command selects an options file that is placed in /mnt/storage/home/hpcuser/.matlab/R2013b and used by default for 'mbuild'. An options file in the current working directory or specified on the command line overrides the default options file in /mnt/storage/home/hpcuser/.matlab/R2013b. To override the default options file, use the 'mbuild -f' command (see 'mbuild -help' for more information). The options files available for mbuild are: 1: /mnt/storage/opt/shared/matlab/r2013b/bin/mbuildopts.sh : Build and link with MATLAB Compiler generated library via the system ANSI C/C++ compiler 0: Exit with no changes Enter the number of the compiler (0-1):
Нужно ввести ‘1‘ и нажать кнопку Enter.
В результате файл со стандартными настройками компиляции будет скопирован в домашнюю директорию пользователя в файл ‘~/.matlab/R2013b/mbuildopts.sh‘
По умолчанию для компиляции используется системный компилятор GCC, но при необходимости файл с опциями может быть скорректирован пользователем.
Для компиляции:
Запустите интерактивную задачу (‘qsub -I -X …’) для получения доступа к узлу кластера.

Запустите на узле MATLAB GUI , переключите вверху на закладку ‘APPS’ и нажмите на стрелочку справа от строки с иконками:
В выпадающем списке в разделе ‘Application deployment’ нажмите на иконку ‘Application Compiler‘. В результате откроется окно приложения MATLAB Compiler.
Нажмите на иконку ‘+’ справа от поля ‘Add main file‘, выберите файл MATLAB’а с кодом. Например, пусть это будет ‘myfunc.m’
Нажмите на зелёную иконку ‘Package‘ справа.
Когда компиляция завершится, откроется окно с тремя 3 директориями, содержащими 3 варианта скомпилированного приложения:
for_redistribution
for_redistribution_files_only
for_testing
Для запуска полученного исполняемого файла на компьютере без установленного MATLAB необходимо предварительно установить пакет MATLAB Compiler Runtime (MCR). Версия MCR должна совпадать с версией MATLAB, использованного при компиляции (в нашем случае, это ‘R2013b’).
Все дистрибутивы MCR можно свободно скачать с официальной страницы: https://www.mathworks.com/products/compiler/mcr.html
Дистрибутив MCR для Linux x64, соответствующий MATLAB R2013b, также можно взять на кластере — это файл ‘/opt/shared/matlab/r2013b/toolbox/compiler/deploy/glnxa64/MCRInstaller.zip’
На нашем комплексе MCR уже установлен в директорию ‘/opt/shared/matlab/r2013b.mcr‘. При необходимости самостоятельно установить MCR выполните:
unzip MCRInstaller.zip
или, если дистрибутив скачан с сайта:
unzip MCR_R2013b_glnxa64_installer.zip
./install
Запуск скомпилированного приложения из директории ‘for_testing’ осуществляется с помощью скрипта ‘run_myfunc.sh’ (название скрипта зависит от названия модуля), которому в качестве параметра необходимо передать путь до установленного MCR:
./run_myfunc.sh /opt/shared/matlab/r2013b.mcr
Скрипт ‘run_myfunc.sh’ настраивает необходимые переменные окружения в соответсвии с путём до установленного MCR и затем запускает находящийся рядом исполняемый бинарный файл ‘myfunc’.
Нюансы использования компилятора смотрите в MATLAB Compiler User’s Guide R2013b.
Parallel Computing Toolbox
Технология, позволяющая распараллеливать выполнение программ на несколько процессорных ядер, а также использовать NVidia GPU.
Distributed Computing Server
Предоставляет возможность запуска программ MATLAB (в том числе, распараллеливающихся на несколько вычислительных узлов) на кластере, через разные планировщики, включая PBS Pro. Является развитием ‘Parallel Computing Toolbox’. Пользователь работает через стандартный графический интерфейс MATLAB (далее называемый ‘клиент’) и через него получает дополнительные вычислительные ресурсы на кластере. На нашем комплексе возможны два варианта использования, настраиваемые разными способами:
Клиент работает на узле кластера, пользователь взаимодействует с ним с использованием технологии X Window. Этот способ является предпочтительным.
Клиент работает на персональном компьютере пользователя, с которого имеется доступ к кластеру по протоколам SSH/SFTP.
Настройка клиента на кластере
С помощью интерактивной задачи PBS попасть на узел и запустить MATLAB через X Window:
module load matlab/r2013b matlab
В закладке Home открыть Environment → Parallel → Manage Cluster Profiles.
В появившемся окне создать профиль: Add → Custom → PBS Pro
Нажать ‘Edit‘, изменить такие параметры:
JobStorageLocation — директория для временных файлов. В принципе, можно оставить незаполненным, но лучше указать поддиректорию в своей домашней директории или в рабочей области.
NumWorkers = число, сколько ядер процессора будет запрашиваться.
HasSharedFileSystem = true
RshCommand = ssh
Также обратите внимание на SubmitArgumet и ResourceTemplate — с их помощью можно передавать команде ‘qsub’ дополнительные параметры, а также изменять правило генерации ‘select’ для qsub.
Переключиться на закладку ‘Validation results’. Нажать кнопку ‘Validate‘. Все тесты должны завершиться со статусом ‘passed’.
При желании через меню окна ‘Cluster Profiles Manager’ можно переименовать настроенный профиль и установить его как ‘профиль по умолчанию’.
Настройка клиента на ПК
Если клиент работает на операционной системе семейства Windows, необходимо преобразовать закрытую часть персонального RSA ключа в формат, используемый в Unix-системах:
Запустить ‘PUTTYGEN.EXE’
Кнопкой ‘Load’ загрузить свой ранее созданный .ppk-файл
Сохранить в нужном формате: Conversion → Export OpenSSH key
Получившийся файл должен содержать примерно такое:
-----BEGIN RSA PRIVATE KEY----- MIICWgIBAAKBgQCA2/bpBoLogSg51qhIDIU+KaSPhfm3fhTVAIQdgjQwdmsKDQne M0S6QvKfj3+tX5NJdV0WBie2F0NSgRCvtPZj8Z6/edL/fanW7bUBQiDCkspWC/yV . XsaozzouYGPk8OvtAkB8Uo2OK5fOxLTV1pglGNd9WbG/kuWOBYeIlBGCPAhy0jLo Xo91ZfMgwwzP1pP5hIhf86axqD5ATqgveMuit+tj -----END RSA PRIVATE KEY-----
Перейти в директорию на персональном компьютере, в которую установлен MATLAB
Скопировать содержимое поддиректории ‘toolbox\distcomp\examples\integration\pbs\nonshared‘ в ‘toolbox\local\‘
Открыть файл ‘toolbox\local\getSubmitString.m‘ и отредактировать, заменив
submitString = sprintf('qsub -N %s -j oe -o %s %s %s %s', . jobName, quotedLogFile, envString, additionalSubmitArgs, quotedCommand);
submitString = sprintf('qsub -N %s -j oe -V -o %s %s %s', . jobName, quotedLogFile, additionalSubmitArgs, quotedCommand);
Запустить MATLAB, если уже работал — перезапустить.
В закладке Home открыть Environment → Parallel → Manage Cluster Profiles.
В появившемся окне создать профиль: Add → Custom → Generic
Нажать ‘Edit‘, изменить такие параметры:
JobStorageLocation — директория для временных файлов на персональном компьютере
NumWorkers = число, сколько ядер будет запрашиваться.
ClusterMatlabRoot = /opt/shared/matlab/r2013b (директория с MATLAB на кластере)
OperatingSystem = Unix
HasSharedFileSystem = false
Поле IndependentSubmitFcn:
Вместо ‘/mnt/storage/home/hpcuser/matlab’ укажите путь до директории для временных файлов на кластере — или в своей домашней директории, или в своей рабочей области.
Поле CommunicatingSubmitFcn:
Вместо ‘/mnt/storage/home/hpcuser/matlab’ укажите путь до директории для временных файлов на кластере — или в своей домашней директории, или в своей рабочей области.
GetJobStateFcn = @getJobStateFcn
DeleteJobFcn = @deleteJobFcn
Переключиться на закладку ‘Validation results’. Нажать кнопку ‘Validate’. Вас попросят ввести свой логин на кластере, путь до созданного ранее файла с закрытой частью ключа и парольную фразу к этому файлу. Все тесты должны завершиться со статусом ‘passed’.
При желании через меню окна ‘Cluster Profiles Manager’ можно переименовать настроенный профиль и установить его как ‘профиль по умолчанию’.
1.5.5 Моделирование случайных величин в Matlab
95 Примечание1. Для получения стандартизованных гауссовских с.в. с нулевым математическим ожиданием и единичной дисперсией необходимо использовать m-функцию randn, вызов и назначение которой аналогичен функции rand. Примечание2. Последовательность генерируемых с.в. зависит от начального состояния датчика, которое может быть определено с помощью функции s=rand(‘state’) или randn(‘state’). С помощью m функции rand(‘state’,j) датчик устанавливается в состояние, соответствующее j- ому обращению. При rand(‘state’,0) датчик устанавливается в начальное состояние. Аналогичные установки могут быть выполнены и для функции randn, формирующей гауссовские с.в. На Рис. 1.5.1 в качестве иллюстрации приведены значения 40 реализаций, полученных с помощью m функции randn. y 2 1 0 -1 -2
| 0 | 10 | 20 | 30 | 40 | i |
Рис.1.5.1 Реализация стандартизованных гауссовских с.в., полученных в Matlab с помощью m функции randn (y=randn(1,40); plot(y)) Для определения выборочных значений математического ожидания, дисперсии и медианы для последовательности с.в. в Matlab могут быть использованы функции, описанные в таблице 1.5.3. Таблица 1.5.3. Функции для определения выборочных характеристик [1.10]
Функция mean(x) std(x) median(x)
Назначение Вычисляет выборочное математическое ожидание (среднеарифметическое значение) элементов массива x с использованием соотношения (1.5.7), где L определяет длину массива x . Вычисляет выборочное СКО в соответствии с выражением (1.5.6) Вычисляет выборочную медиану для элементов массива x . При вычислении медианы элементы массива располагаются в порядке возрастания. При нечетном L в качестве медианы выступает элемент x L / 2 + 1/ 2 при четном — 1 2 ( x L / 2 + x L / 2 + 1 ) .
Для примера в таблице 1.5.4 приведены рассчитанные с помощью описанных функций mean(x), std(x) и median(x) выборочные математические ожидания, дисперсии и медианы, полученные для 10, 100, 1000 реализаций стандартизованных гауссовских с.в., сформированные с помощью x=randn(1,n).
96 Таблица 1.5.4. Значения выборочных математического ожидания, дисперсии и медианы для последовательности моделируемых гауссовских стандартизованных с.в.
| Число с.в. | Математическое ожидание | Дисперсия | Медиана |
| 10 | -0.6762 | 0.976 | -0.5374 |
| 100 | -0.0855 | 0.9714 | 0.0114 |
| 1000 | 0.0012 | 0.9915 | 0.0111 |
Как и следовало ожидать, приведенные в таблице числовые характеристики в большей степени согласуются с предполагаемыми (нулевое математическое ожидание и единичная дисперсия) при увеличении количества моделируемых с.в. Проиллюстрируем с помощью гистограмм следующий известный из теории вероятностей факт – ф.п.р.в. суммы независимых между собой одинаково распределенных случайных величин при увеличении числа слагаемых стремится к гауссовскому (нормальному) виду. Иными словами происходит нормализация случайной величины, формируемой в результате суммирования независимых между собой одинаково распределенных с.в. В таблице 1.5.5 приведены гистограммы с.в., сформированных из равномерно распределенной центрированной в пределах от -b до +b (b=1) с.в., и суммы двух, трех, пяти и десяти независимых между собой распределенных центрированных с.в., распределенных по тому же закону. Каждая из этих с.в. умножена на коэффициент, так, чтобы дисперсия результирующей с.в. была равна 1. В конце таблицы приведена гистограмма стандартизованной с.в. – с нулевым математическим ожиданием и единичной дисперсией. Из таблицы видно, что, уже при количестве слагаемых, равном пяти, гистограмма результирующей с.в. близка к гистограмме стандартизованной гауссовской с.в.
97 Таблица 1.5.5. Нормализация суммы независимых между собой одинаково распределенных величин.
| Вид с.в. | Гистограммы | |||||||||
| 800 | ||||||||||
| 700 | ||||||||||
| ξ 1 | 600 | |||||||||
| (b=1) | 500 | |||||||||
| b | 400 | |||||||||
| 3 | 300 | |||||||||
| 200 | ||||||||||
| 100 | ||||||||||
| 0 | -1.5 | -1 | -0.5 | 0 | 0.5 | 1 | 1.5 | 2 | ||
| -2 | ||||||||||
| 1400 | ||||||||||
| ξ 1 +ξ 2 | 1200 | |||||||||
| η = | 1000 | |||||||||
| b N , (b=1), (N=2) | 600 | |||||||||
| 800 | ||||||||||
| 3 | 400 | |||||||||
| 200 | ||||||||||
| 0 | -2 | -1.5 | -1 | -0.5 | 0 | 0.5 | 1 | 1.5 | 2 | 2.5 |
| -2.5 | ||||||||||
| 1500 | ||||||||||
| ζ = ξ 1 + ξ 2 | + ξ 3 , (b=1), (N=3) | 1000 | ||||||||
| b | N | 500 | ||||||||
| 3 | ||||||||||
| 0 | -2 | -1 | 0 | 1 | 2 | 3 | ||||
| -3 | ||||||||||
| 2500 | ||||||||||
| ς = ξ 1 +ξ 2 +ξ 3 +ξ 4 +ξ 5 , (b=1), | 2000 | |||||||||
| 1500 | ||||||||||
| b N | 1000 | |||||||||
| 3 | ||||||||||
| (N=5) | 500 | |||||||||
| 0 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | |
| -5 | ||||||||||
| 2500 | ||||||||||
| 10 | 2000 | |||||||||
| ρ = | ∑ ξ i | 1500 | ||||||||
| i = 1 | , (b=1), (N=10) | |||||||||
| b N | 1000 | |||||||||
| 3 | 500 | |||||||||
| 0 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | |
| -5 | ||||||||||
| 2500 | ||||||||||
| 2000 | ||||||||||
| Стандартизованная | 1500 | |||||||||
| гауссовская с.в. | 1000 | |||||||||
| 500 | ||||||||||
| 0 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | |
| -5 | ||||||||||
98 Выше речь шла о моделировании случайных величин. Рассмотрим примеры моделирования реализаций случайного вектора. В случае, когда компоненты вектора между собой независимы, т.е. матрица ковариаций диагональная, для получения реализации вектора достаточно промоделировать отдельно каждую компоненту в соответствии с заданными свойствами. На Рис. 1.5.2 представлен пример реализаций двумерных центрированных гауссовских векторов, представленных в виде соответствующих точек на плоскости для случая, когда
| P | x | σ 1 2 | 0 | 1 | 0 | ||
| = | σ 2 | = | 4 | 2 | . | ||
| 0 | 0 | ||||||
| 2 | |||||||
Рис. 1.5.2 Пример реализаций двумерных центрированных гауссовских векторов с независимыми компонентами σ 1 2 = 4 2 , σ 2 2 = 1 . Если матрица ковариаций недиагональная, то необходимо, как это описано в разделе 1.3.5 предварительно найти ортогональную матрицу T , с помощью которой от исходного вектора x с зависимыми компонентами, переходят к вектору ~ x с независимыми компонентами. Затем,
| ~ j | , с помощью обратного преобразования можно получить | ||||
| сформировав реализации вектора x | |||||
| искомые реализации вектора x | j | = Т | т | ~ j | . |
| x | |||||
К примеру, если требуется получить реализации двумерного центрированного гауссовского
| вектора x с недиагональной матрицей ковариаций ковариаций вида | P x | σ 2 | K | , то |
| = 1 | σ 2 | |||
| K | ||||
| 2 |
сначала, используя соотношения (1.3.50), (1.3.51), следует отыскать собственные числа и дирекционный угол для этой матрицы ковариаций. Затем сформировать набор реализаций для
| ~ j | ~ | a | 2 | 0 | ||||||||||
| с матрицей ковариаций P | x | = | , и используя ортогональную матрицу | |||||||||||
| вектора x | b 2 | |||||||||||||
| 0 | ||||||||||||||
| T | т | sin τ | cos τ | , получить искомый набор x | j | = Т | т | ~ j | . | |||||
| = | x | |||||||||||||
| − cos | τ | sin τ | ||||||||||||