Предпросмотр материала:
Моделирование случайных величин и статистическая обработка выборки в MATLAB
Ковач Ирина Петровна
(ГБОУ гимназия № 1528)
Алгоритмы моделирования случайных величин
Случайные числа с различными законами распределения обычно моделируются с помощью преобразований одного или нескольких независимых значений базовой случайной величины. Базовая случайная величина α – это случайная величина с распределением R(0;1) (равномерным распределением в интервале (0;1)). В любой системе программирования имеется стандартная программа моделирования базовой случайной величины. Независимые случайные величины с распределением R(0,1) будем обозначать символами α1, α2, ... Рассмотрим алгоритмы моделирования случайных величин.
1. Равномерное распределение R(a, b):
.
Алгоритм моделирования:X = a + (b – a)α.
2. Нормальное (гауссово) распределение N(m, σ):
.
Алгоритм моделирования 1.
Зарезервирована константа c = 2π:
1)
;
2)
;
3)
,
;
4)
, ![]()
Алгоритм моделирования 2.
1)
,
:
2)
;
3) Если s ≥ 1, вернуться к п. 1;
4)
;
5)
,
;
6)
,
.
В качестве случайного числа можно взять любое из чисел X1 и X2.
3. Распределение хи-квадрат с k степенями свободы.
Алгоритм моделирования:
,
где
– независимые случайные
величины.
4. Распределение Стьюдента с k степенями свободы.
Алгоритм моделирования:
,
где
,
–
независимые случайные величины.
5. Распределение Фишера с k1, k2, степенями свободы.
Алгоритм моделирования:
,
где
,
-
независимые случайные величины.
Средства MATLAB для моделирования случайных чисел
В MATLAB можно написать программу и сохранить ее в виде m-файла-сценария или m-файла-функции с целью последующего многократного выполнения. m-файл-функция является типичным объектом языка программирования системы MATLAB. Структура m-файла-функции с одним выходным параметром выглядит так.
function var=f_name(список параметров)
% Основной комментарий
%Дополнительный комментарий
Тело файла с любыми выражениями
var=выражение
Здесь переменная var – выходной параметр, f_name – имя функции.
Функция возвращает свое значение var и может использоваться в математических выражениях в виде f_name(список параметров).
Все переменные в теле файла-функции являются локальными, то есть действуют только в пределах тела функции, в отличие от файла-сценария, все переменные которого являются глобальными.
Правила вывода комментариев те же, что и у файлов-сценариев.
Последняя конструкция (var=выражение) вводится, если требуется, чтобы функция возвращала результат вычислений. Если m-файл-функцию завершает строка, в конце которой точка с запятой (;), то для возврата значения функции используется программный оператор return.
Если выходных параметров больше одного, то структура модуля имеет следующий вид.
function [var1,var2,…]=f_name(список параметров)
%Основной комментарий
%Дополнительный комментарий
Тело файла с любыми выражениями
var1=выражение
var2=выражение
……………………
Здесь var1, var2, … – имена переменных, которые являются выходными параметрами.
Такую функцию нельзя использовать в математических выражениях, поскольку она возвращает не один результат. Данная функция используется (вызывается) как отдельный элемент программы в виде:
[var1,var2,…]=f_name(список параметров).
Если такая функция используется в виде f_name(список параметров), то возвращается значение только первого выходного параметра – переменной var1.
Если внутри функции целесообразно использовать глобальные переменные, то их нужно объявить с помощью команды
global var1 var2 …
Начиная с версии 5.0 в функции системы MATLAB можно включать подфункции. Они имеют такую же структуру, как и основная функция, и записываются в теле основной функции.
Для создания и отладки m-файла-функции необходимо войти в редактор-отладчик MATLAB, выбрав в меню командного окна MATLAB пункт Файл, затем пункты Создать и m-файл. После раскрытия окна редактора-отладчика необходимо набрать нужные команды программы, отредактировать их и сохранить полученный файл под именем f_name с помощью пунктов меню Файл, Сохранить как… редактора-отладчика.
Управляющие структуры языка программирования системы MATLAB
Диалоговый ввод-вывод
Disp(X) отображает массив, не печатая имя массива. Если X – текстовая строка, то отображается текст.
Пример 1.
x=[1 2 3];
disp(x)
1 2 3
disp('квадрат второго элемента=')
квадрат второго элемента=
disp(x(2)^2)
4
R=INPUT('Сколько яблок?') дает пользователю приглашение в текстовой строке и затем ожидает ввода с клавиатуры. Может быть введено любое MATLAB-выражение, которое вычисляется с использованием переменных в текущей рабочей области, и результат которого возвращается в R. Если пользователь нажимает клавишу <Enter>, ничего не вводя, то вводится пустая матрица.
R=INPUT('введите ваше имя', 's') дает приглашение в текстовой строке и ожидает ввода символьной строки. Напечатанный текст не вычисляется, а символы просто возвращаются как MATLAB-строка.
Пример 2.
r=input('введите угол в радианах')
введите угол в радианах 2*pi
r =6.2832
r=input('введите ваше имя','s')
введите ваше имя 2*pi
r =2*pi
Циклы типа for-end
Циклы типа for-end обычно используются для организации вычислений с заданным числом повторений цикла. Конструкция такого цикла имеет следующий вид.
for var=выражение
Инструкция,…, Инструкция
end
Выражение чаще всего записывается в виде b:s:e, где b – начальное значение переменной цикла var, s – приращение (шаг) этой переменной и e – конечное значение управляющей переменной, при достижении которого цикл завершается. Возможна запись выражения в виде b:e, в этом случае s = 1. Список выполняемых в цикле инструкций завершается оператором end. Для досрочного выполнения цикла можно использовать оператор break. Как только этот оператор появляется в программе, цикл прерывается. Возможно использование цикла в цикле.
Пример 3.
for i=1:3
for j=1:3
a(i,j)=i+j;
end
end
a
a =
2 3 4
3 4 5
4 5 6
Циклы типа while_end
while Условие
Инструкции
end
Цикл типа while выполняется до тех пор, пока выполняется Условие. Для прекращения выполнения цикла можно использовать оператор break.
Пример 4
x=1;i=1;
while x<=3
y(i)=x;
x=x+0.5;
i=i+1;
end
y
y =1.0000 1.5000 2.0000 2.5000 3.0000
Условный оператор if-elseif-else-end
Условный оператор if в общем виде записывается следующим образом.
if Условие
Инструкции 1
elseif Условие
Инструкции 2
else
Инструкции 3
end
Эта конструкция допускает несколько частных вариантов. Простейший из них – следующий.
if Условие
Инструкции
end
Данный оператор работает следующим образом. Пока Условие возвращает логическое значение 1 (то есть выполняется), выполняются Инструкции. Оператор end указывает на конец списка Инструкций. Инструкции в списке разделяются запятыми или точками с запятыми. Если Условие возвращает логическое значение 0 (то есть не выполняется), то Инструкции также не выполняются. Еще один вариант.
if Условие
Инструкции 1
else
Инструкции 2
end
В этом варианте выполняются Инструкции 1, если выполняется Условие 1, или Инструкции 2 в противном случае.
Условие в операторе if записывается в виде:
Выражение_1 Оператор_отношения Выражение_2
В качестве Оператора_отношения используются следующие логические операторы: ==, <, >, <=, >=, ~=. Двойные символы не имеют между собой пробелов.
Пример 5.
for i=1:3
for j=1:3
if i==j
a(i,j)=2;
elseif abs(i-j)==1
a(i,j)=-1;
else
a(i,j)=0;
end
end
end
a
a =
2 -1 0
-1 2 -1
0 -1 2
Переключатель switch-case-otherwise-end
Для осуществления множественного выбора (или ветвления) используется конструкция с переключателем типа switch.
switch switch_Bыражение
case case_Bыражение
Список_ инструкций
case { case_Bыражение1, case_Bыражение2,… }
Список_ инструкций
…
otherwise,
Список_ инструкций
End
Выполняется первый оператор case, у которого case_Bыражение соответствует switch_Bыражению. Если ни одно из case_Bыражений не соответствует switch_Bыражению, то выполняется список инструкций после оператора otherwise (если он существует). Выполняется только один case, а потом выполнение продолжается с оператора после end.
Пример 6.
Пусть существует m-файл-сценарий swit.m.
switch month
case{1,2,3}
disp('Первый квартал')
case{4,5,6}
disp('Второй квартал')
case{7,8,9}
disp('Третий квартал')
case{10,11,12}
disp('Четвертый квартал')
otherwise,
disp('Ошибка в данных')
end
Эта программа в ответ на значения переменной month (номер месяца) определяет номер квартала и выводит сообщение. Как это происходит, видно из следующей программы.
month=3;
swit
Первый квартал
month=10;
swit
Четвертый квартал
month=13;
swit
Ошибка в данных
Создание паузы в вычислениях
Для остановки программы используется оператор pause в следующих формах:
pause – останавливает вычисления до нажатия любой клавиши.
pause(N) – останавливает вычисления на N секунд. pause on – включает режим создания пауз.
pause off – выключает режим создания пауз.
Стандартные функции MATLAB для моделирования одномерных случайных чисел
y=chi2rnd(k) –
-распределение.
y=exprnd (lambda) – экспоненциальное распределение.
y=frnd (k1,k2) – распределение Фишера.
y=gamrnd (a,b) – гамма-распределение.
y=normrnd(m,sigma) – нормальное распределение.
y=trnd (k) – распределение Стьюдента.
y=unifrnd (a,b) – равномерное распределение.
y=rand(m,k) – моделирует (
)-матрицу со случайными данными, выбранными
из равномерного распределения в интервале (0,1).
r = unidrnd(k) – возвращает матрицу случайных чисел, выбранных из набора {1,2,..., k}. Размер r является размером k.
r = unidrnd(k,mm,nn) – возвращает (
)-матрицу
случайных чисел, выбранных из набора {1,2,..., k}.
Первичная обработка выборки
Эмпирическая
функция распределения. Пусть имеется выборка x1, ..., xn из распределения FX(x).
Простейший взгляд на нее состоит в том, что числа x1, ..., xn считаются
возможными значениями некоторой дискретной случайной
величины
, причем вероятности этих значений
одинаковы и равны 1/n. Ряд распределений этой случайной величины имеет следующий
вид.
Таблица 1
Ряд распределений случайной
величины ![]()
|
xi |
x1 |
x2 |
… |
xn |
|
|
|
|
… |
|
Эмпирической, или выборочной, функцией распределения
называется
функция распределения дискретной случайной величины
:
.
В соответствии с этим определением эмпирическая функция распределения задается формулой
,
где n(x) – количество выборочных значений, меньших x; n – объем выборки. Эмпирическую функцию распределения удобно строить с использованием вариационного ряда. В этом случае она определяется формулой
.
В этой формуле x(i) – i-й член вариационного ряда, i = 1, 2, ..., n–1. Эмпирическая функция распределения
представляет собой ступенчатую функцию,
поскольку это функция распределения дискретной случайной величины – см. рисунок
1.

Рис. 1. Эмпирическая и теоретическая функции распределения
Эмпирическая функция распределения является состоятельной оценкой генеральной
(теоретической) функции распределения
, так как, согласно теореме
Гливенко, имеет место сходимость по вероятности
при
.
Гистограмма. Гистограмма – это ступенчатая фигура, огибающая которой сверху
является графиком кусочно-постоянной функции
, являющейся
оценкой генеральной (теоретической) плотности распределения вероятностей fX(x).
Гистограмма строится следующим образом. Промежуток
, содержащий
все выборочные значения
, делится на некоторое
количество l непересекающихся промежутков длины
, j = 1, 2, ..., l и подсчитывается количество выборочных
значений nj, попавших в j-й промежутков. Если на каждом промежутке
как на основании построить прямоугольник высотой
,
где
– длина j-го
промежутка, то мы получим фигуру, которая называется гистограммой. Пример гистограммы
приведен на рисунке 2.

Рис. 2. Гистограмма и теоретическая плотность распределения
Гистограмма является состоятельной оценкой генеральной плотности распределения вероятностей при увеличении объема выборки n и числа промежутков l, если при этом стремится к нулю максимальная из длин промежутков разбиения.
Есть два способа построения гистограммы.
1.
Равноинтервальный способ. Выбирают количество интервалов l, а длину Δ
каждого интервала определяют по формуле
.
2. Равновероятный способ. Выбирают количество выборочных значений m,
попавших в каждый промежуток. Объем выборки должен быть кратен m.
Тогда число промежутков l =n/m и интервалы
будут следующими:
,
, …,
где x(i) – i-й член
вариационного ряда. При этом способе промежутки имеют различную длину – и
границы промежутков попадают на выборочные значения. Принято считать, что
граничное значение делится поровну между двумя интервалами, то есть 1/2 значения попадает в левый
промежуток и 1/2 – в правый. Понятно, что при этом в крайний левый промежуток попадает m – 1/2 значений, в крайний правый m + 1/2 значений, а в средние промежутки – по m
значений.
Опишем программы для получения оценок законов распределения и отображения их на экране.
Сортировка в MATLAB
y = sort(x) сортирует элементы вектора x в возрастающем порядке. Здесь x – исходный вектор, y – отсортированный вектор. Если x – матрица, функция y = sort(x) сортирует каждый столбец x в возрастающем порядке.
y = sort(x,d) сортирует матрицу x вдоль измерения d.
[y,i] = sort(x,d) возвращает также индексную матрицу i. Если x – вектор, то элементы индексной матрицы указывают номера элементов вектора y в исходном векторе x (см. toolbox\matlab\datafun).
Программа сортировки используется для формирования вариационного ряда из имеющейся выборки.
Лестничные графики в MATLAB
stairs(y) строит лестничный (ступенчатый) график по значениям элементов вектора y.
stairs(x,y) строит лестничный график по значениям элементов вектора y в точках скачков, определенных в x. Значения x должны располагаться в возрастающем порядке (см. toolbox\matlab\specgraph).
Функция stairs(x,y) используется для получения и графического отображения эмпирической функции распределения. В этом случае x – вариационный ряд, а y(i) = i/n, i = 1, 2, ..., n.
Гистограммы в MATLAB
n=hist(y) распределяет элементы вектора y в 10 интервалов одинаковой длины:

и возвращает количество элементов, попавших в каждый интервал, в виде вектора n. Если y – матрица, то hist работает со столбцами.
n=hist(y,l), где l – скаляр, использует l интервалов одинаковой длины:
.
n=hist(y,x), где x – вектор, возвращает количество элементов вектора y, попавших в интервалы с центрами, заданными вектором x. Число интервалов в этом случае равно числу элементов вектора x.
[n,x]=hist(…) возвращает числа попаданий в интервалы (в векторе n), а также положения центров интервалов (в векторе x).
hist(…) строит гистограмму без возвращения параметров, то есть строит прямоугольники высотой hj = nj, где nj – число элементов, попавших в j-й интервал, j = 1, 2, ..., l (см. toolbox\matlab\datafun).
Функция hist используется для получения и отображения гистограммы.
Этапы статистической обработки выборки в MATLAB
1. Создать m-файлы-функции, реализующие алгоритмы моделирования случайных величин, приведенные в пункте 2.2.
2.
Выполнить
моделирование случайных чисел с различными законами распределений. Для
каждого распределения вывести по 100 случайных чисел
,
используя:
а) собственные m-файлы-функции;
б) стандартную программу MATLAB.
3. Для каждого распределения вывести на экран в одно графическое окно гистограмму и генеральную плотность распределения вероятностей, а в другое графическое окно – эмпирическую функцию распределения и генеральную функцию распределения. Для вывода генеральных плотностей распределения вероятности и функций распределения использовать программы MATLAB. Для согласования масштабов гистограммы и генеральной плотности распределения вероятностей необходимо генеральную плотность распределения умножить на коэффициент
.
4. Исследовать сходимость эмпирических распределений к генеральным при увеличении объема выборки n.
5. Для каждой выборки вычислить с помощью функции:
Function
[xmean,s2,s3,s4,xmin,xmax,wtsum,wt,iwt,ifail]=g01aaf(x<,wt,iwt,ifail>);
· выборочные среднее xmean;
· среднее квадратичное отклонение s2;
· коэффициент асимметрии s3;
· коэффициент эксцесса s4;
· минимальное значение выборки xmin;
· максимальное значение выборки xmax;
·
сумму весов wtsum по данным
, помещенным в векторе x и имеющим соответствующие веса w1,w2, … , wn, помещенные в векторе wt.
Если присваивания весов не требуется, то параметр wt не указывается, при этом веса устанавливаются равными 1. Параметр iwt = 0.
6. Сравнить найденные выборочные характеристики с соответствующими параметрами моделируемых распределений при различных объемах выборок n
Литература
1. Аллавердиев А.М., Ревякин А.М. Теория вероятностей и математическая статистика: Методическое пособие. М.: МГИДА, 2004.
2. Афифи А., Эйзен С. Статистический анализ. Подход с использованием ЭВМ. М.: Мир, 1982.
3. Вуколов Э.А. Основы статистического анализа: Практикум по статистическим методам и исследованию операций с использованием пакетов STATISTICA и EXCEL: Учебное пособие. М.: ИНФРА-М., 2004.
4. Ревякин А.М., Терещенко А.М., Третьяков В.А. Методическое пособие по математической статистике для индивидуальной работы студентов вечернего факультета. М.: МИЭТ, 1989.
5. Тюрин Ю.Н. и др. Теория вероятностей и статистика. М.: Изд-во МЦНМО; АО Московский учебник, 2004.
6. Тюрин Ю.Н. и др. Теория вероятностей и статистика: Методическое пособие для учителя. М.: Изд-во МЦНМО МНОО, 2005.
7. Теория и практика статистических исследований / Под. ред. А.М. Ревякина и В.В. Костылева. - М.: МГАДА, 2007.- 354 с.
Для проведения комбинированных уроков математики и информатики в классах технического профиля можно использовать язык программирования системы MATLAB. Так можно написать программу и сохранить ее в виде m-файла-сценария или m-файла-функции с целью последующего многократного выполнения.
m-файл-функция является типичным объектом языка программирования системы MATLAB
В данном статье описаны алгоритмы моделирования случайных величин:
- равномерного распределения,
- нормального (гауссово) распределения,
- распределения хи-квадрат с k степенями свободы,
- распределения Стьюдента с k степенями свободы,
- распределение Фишера с k1, k2, степенями свободы.
Для проведения комбинированных уроков математики и информатики в классах технического профиля можно использовать язык программирования системы MATLAB. Так можно написать программу и сохранить ее в виде m-файла-сценария или m-файла-функции с целью последующего многократного выполнения.
m-файл-функция является типичным объектом языка программирования системы MATLAB
В данном статье описаны алгоритмы моделирования случайных величин:
- равномерного распределения,
- нормального (гауссово) распределения,
- распределения хи-квадрат с k степенями свободы,
- распределения Стьюдента с k степенями свободы,
- распределение Фишера с k1, k2, степенями свободы.
Профессия: Методист
Профессия: Руководитель отделения (департамента, комплекса, управления, центра) библиотеки
Профессия: Библиотекарь
Профессия: Начальник отдела (заведующий отделом) архива
В каталоге 7 615 курсов по разным направлениям