Моделирование систем. Моделирование систем 2е издание, исправленное
Скачать 5.72 Mb.
|
1. Какой закон распределения случайной величины используется при вычислении кратных интегралов методом Монте-Карло? 2. Чему равен интегрант трехкратного интеграла при вычислении объема тел методом Монте-Карло? 3. От чего зависит точность метода Монте-Карло? 4. Как определяется оценка "исправленного" среднеквадратического отклонения? Исследование качества генераторов случайных чисел Цель работы: изучить и практически освоить оценки качества генераторов случайных чисел (ГСЧ) в различных системах программирования по заданным теоретическим показателям, с помощью критериев согласия и с помощью нормированной автокорреляционной функции на предмет независимости случайных чисел. Теоретическая часть В практике моделирования и особенно в практике статистических испытаний приходится использовать случайные последовательности или просто случайные числа. При моделировании систем на ЭВМ программная имитация случайных воздействий любой сложности сводится к генерированию некоторых стандартных (базовых) процессов и к их последующему функциональному преобразованию. Получение случайных чисел с требуемым законом распределения обычно выполняется в два этапа: 1. Формирование физическим или программным методом случайного числа , равномерно распределенного на 2. Программный переход от к случайному числу , имеющему требуемое распределение [16] В связи с этим особое значение приобретают случайные числа, равномерно распределенные в интервале . Например, генерирование экспоненциально распределенных случайных чисел может быть выполнено по формуле где: — параметр экспоненциального закона; — равномерно распределенное случайное число из интервала Существуют физические и программные датчики (генераторы) случайных чисел. Программные датчики случайных чисел фактически генерируют псевдослучайные числа. Согласно Лемеру, последовательность псевдослучайных чисел можно считать случайной, если "каждый ее член непредсказуем для непосвященного и она удовлетворяет ряду традиционных статистических тестов". Полученные с помощью программных методов случайные последовательности в идеале должны состоять из: равномерно распределенных, статистически независимых, воспроизводимых, неповторяющихся чисел. Практическая часть 1. Исследование качества генераторов случайных чисел (ГСЧ) по критерию отклонения математического ожидания, дисперсии среднего квадратического отклонения Известно, что при равномерном законе распределения случайной непрерывной величины в интервале соответствующее математическое ожидание , дисперсия и среднеквадратичное отклонение имеют следующие теоретические значения: ; ; ( ). Критерий заключается в сравнении теоретических параметров равномерного распределения с реальными значениями, полученными для конечной выборки. 1.1. Анализ качества ГСЧ системы MATLAB В системе MATLAB всех версий используется функция , реализующая равномерно распределенные числа в интервале Среднее значение массива чисел определяется функцией , дисперсия — функцией , среднее квадратическое отклонение (стандартное отклонение) — функцией (см. ). Программный код анализа случайных чисел: clear, clc %% Генерирование выборки 500 случайных чисел x = rand(500, 1); %% Вычисление среднего значения выборки m1 = mean(x) %% Вычисление дисперсии данной выборки s2 = var(x) %% Вычисление среднего квадратического отклонения s = std(x) %% Расчет относительных погрешностей в процентах %% по математическому ожиданию m = 0.5; Dm = abs((mean(x)- m)/m)*100; fprintf('\n Относительная погрешность по математическому ожиданию: %g%%\n', Dm); %% по дисперсии d = 1/12; Dd = abs((var(x)- d)/d)*100; fprintf(' Относительная погрешность по дисперсии: %g%%\n', Dd); %% по среднему квадратическому отклонению sd = sqrt(d); Ds = abs((std(x)- sqrt(1/12))/sqrt(1/12))*100; fprintf(' Относительная погрешность по стандартному отклонению: %g%%\n', Ds); %% Генерирование дополнительной выборки y = rand(500, 1); %% Диаграмма оценки равномерности случайных чисел fig1 = figure(1); set(fig1, 'name', 'Случайные числа функции rand') plot(x,y,'o', 'markersize', 4); str = '\bf\fontsize{11}\fontname{times}Проверка на равномерность случайных чисел'; title(str) xlabel('\bf\fontsize{11}\fontname{times} Random numbers') ylabel('\bf\fontsize{11}\fontname{times} Random numbers') В программе выполняется построение диаграммы визуальной оценки равномерности случайных чисел. Числа-кружочки на диаграмме должны равномерно заполнить квадрат со стороной, равной единице. На рис. 5.1 приведен пример проверки случайной последовательности на равномерность распределения в интервале Рис. 5.1. Проверка равномерности случайных чисел для функции rand Задание 1 1. Проведите в зависимости от номера компьютера статистическое исследование функции при различных объемах выборки: малых ; средних ; больших . Результаты испытаний усредните. Компьютер № 1: 11 испытаний (n: 24, 142, 600); Компьютер № 2: 12 испытаний (n: 22, 144, 650); Компьютер № 3: 13 испытаний (n: 20, 146, 700); Компьютер № 4: 14 испытаний (n: 18, 148, 750); Компьютер № 5: 15 испытаний (n: 16, 150, 800); Компьютер № 6: 16 испытаний (n: 14, 152, 850); Компьютер № 7: 17 испытаний (n: 12, 154, 900); Компьютер № 8: 18 испытаний (n: 10, 156, 950); Компьютер № 9: 19 испытаний (n: 19, 149,1000). Компьютер № 10: 20 испытаний (n: 20, 150, 1010). 2. Постройте график изменения относительных погрешностей среднего, дисперсии, стандартного отклонения от числа испытаний. 3. Пункт 1 задания выполните для выборок, сформированных в системах EXCEL, DELPHI (консольное приложение), PASCAL, С, GPSS/PC. Сформированные выборки импортируйте в MATLAB, где произведите необходимый анализ. Формирование выборки случайных чисел в GPSS/PC выполните по номеру датчика случайных чисел, который соответствует номеру компьютера ( .). 4. Постройте гистограммы в системе MATLAB для сформированных выборок (полученных в различных системах) с помощью графической функции (см. ). Примечание. В системе GPSS/PC сформируйте выборки только малых и средних объемов (в соответствии с номером компьютера). 1. Для фиксации случайных чисел в GPSS/PC можно использовать операторы , и блок 1.2. Исследование качества ГСЧ, сформированного по методу Фибоначчи Генератор случайных чисел, использующий метод Фибоначчи, применялся в начале 50-х годов ХХ века [9] . Рекуррентное соотношение Фибонначи имеет вид , где: — целые числа, лежащие между нулем и некоторым большим числом , который называется модулем; — порядковый номер числа [9] Для получения случайных чисел из интервала следует вычислить дробь Программный код формирования случайных чисел по методу Фибоначчи: clear,clc,close all N = 500; %% количество генерируемых чисел M = 2^30; %% модуль %% 1-я последовательность случайных чисел X0 = 12345; %% 1-е произвольное число X1 = 67890; %% 2-е произвольное число for n = 1 : N X = mod( X1 + X0, M); %% следующее число X0 = X1; X1 = X; Zx(n,1) = X; end Rx = Zx/M; mf = mean(Rx); fprintf('\n Среднее выборочное для метода Фибоначчи: %g%%\n', mf); sf2 = var(Rx); fprintf(' Выборочная дисперсия для метода Фибоначчи: %g%%\n', sf2); sf = std(Rx); fprintf(' Выборочное стандартное отклонение: %g%%\n', sf); %% Расчет относительных погрешностей в процентах m = 0.5; fprintf('\n Относительная погрешность по математическому ожиданию: %g%%\n', abs((mf - m)/m)*100); d = 1/12; fprintf(' Относительная погрешность по дисперсии: %g%%\n', abs((sf2 - d)/d)*100); %% по среднему квадратическому отклонению sd = sqrt(d); fprintf(' Относительная погрешность по стандартному отклонению: %g%%\n', abs((sf - sd)/sd)*100); %% 2-я последовательность случайных чисел Y0 = 333; %% 1-е произвольное число Y1 = 123; %% 1-е произвольное число for n = 1 : N Y = mod( Y1 + Y0, M); %% следующее число Y0 = Y1; Y1 = Y; Zy(n,1) = Y; end Ry = Zy/M; %% Диаграмма оценки равномерности случайных чисел fig2 = figure(2); set(fig2, 'name', 'Случайные числа Фибоначчи') plot(Rx,Ry,'o', 'markersize', 4); str = '\bf\fontsize{11}\fontname{times}Проверка на равномерность случайных чисел'; title(str) xlabel('\bf\fontsize{11}\fontname{times} Random numbers') ylabel('\bf\fontsize{11}\fontname{times} Random numbers') Пример выполнения программы (без диаграммы) Среднее выборочное для метода Фибоначчи: 0.49687% Выборочная дисперсия для метода Фибоначчи: 0.0861675% Выборочное стандартное отклонение: 0.293543% Относительная погрешность по математическому ожиданию: 0.626048% Относительная погрешность по дисперсии: 3.40103% Относительная погрешность по стандартному отклонению: 1.6863% Задание 2 1. Напишите программу формирования простых трехзначных чисел с целью их использования в качестве начальных чисел в методе Фибоначчи. Рассчитайте относительные погрешности по математическому ожиданию, дисперсии, стандартному отклонению. 2. Напишите программу формирования случайных чисел Фибоначчи без вспомогательных массивов и 3. Постройте гистограммы в системе MATLAB для сформированных выборок ( и ) с помощью графической функции (см. ) с разбивкой графического окна с помощью функции (см. ). 1.3. Исследование качества ГСЧ, сформированного по методу срединных квадратов Метод срединных квадратов был предложен Нейманом [19] и заключается в следующем: выбирается число, меньшее 1, разрядностью . Оно возводится в квадрат. Из полученного результата (разрядность которого должна быть , если нет, то добавляются нули справа от полученного числа) выбираются чисел из середины полученного после возведения в квадрат числа. Число записывается после десятичной точки. Далее все повторяется. Для примера выберем 4-разрядное ( ) число . После возведения в квадрат получим число, равное 0.01522756. Из него выбираем четыре срединные цифры, т. е. 5227. Получаем новое случайное (псевдослучайное) число . Описанные действия отобразим в следующем виде: и так далее. Задание 3 1. Напишите программу формирования случайных чисел по методу срединных. 2. Начальное число выберите (по указанию преподавателя) из следующего списка, приведенного в таблице 5.1 Таблица 5.1. Варианты заданий для метода срединных квадратов № 1 ; ; ; ; ; ; ; ; ; № 2 ; ; ; ; ; ; ; ; ; № ; ; ; 3 ; ; ; ; ; ; № 4 ; ; ; ; ; ; ; ; ; Примечание. Для проверки периодичности (непериодичности) формируемой случайной последовательности можно применить, например, функцию (см. ). 1. Проведите, в зависимости от номера компьютера, статистическое исследование ГСЧ (вычисление среднего значения выборки, дисперсии, стандартного отклонения выборки) при различных объемах выборки: малых , средних , больших . Результаты испытаний усредните и сравните с аналогичными результатами, которые проведены для выборки, сформированной с помощью функции rand системы MATLAB. Компьютер № 1: (объем выборки: 24, 142, 600); Компьютер № 2: (объем выборки: 22, 144, 650); Компьютер № 3: (объем выборки: 20, 146, 700); Компьютер № 4: (объем выборки: 18, 148, 750); Компьютер № 5: (объем выборки: 16, 150, 800); Компьютер № 6: (объем выборки: 14, 152, 850); Компьютер № 7: (объем выборки: 12, 154, 900); Компьютер № 8: (объем выборки: 10, 156, 950); Компьютер № 9: (объем выборки: 17, 157, 999); Компьютер № 10: (объем выборки: 19, 158, 1010). 2. Постройте в системе MATLAB гистограммы для сформированных выборок случайных чисел по методу срединных квадратов и сравните с гистограммой для выборок, сформированных с помощью функции системы MATLAB. 3. Постройте гистограммы для сформированных выборок. 4. Постройте диаграмму визуального контроля равномерного заполнения квадрата со стороной, равной единице. 1.4. Исследование качества ГСЧ, сформированного по линейному конгруэнтному методу Формирование случайных (псевдослучайных) чисел по линейному конгруэнтному методу основывается на следующем рекуррентном соотношении: (5.1) где: — вновь формируемое число; — множитель (мультипликативная константа); — предыдущее число ( — назначаемое число); — приращение (инкремент); — модуль, бинарная операция для обозначения остатка от деления двух чисел; — целочисленная константа [19] . Для -разрядных целых чисел . В самом простом случае принимается, что Массив случайных чисел из интервала будет формироваться следующим образом: (5.2) где — числа, определяемые по формуле (5.1). В стандартной процедуре реализации линейного конгруэнтного метода (5.1) принимается, что — целые положительные числа. Приведем определение конгруэнтности двух чисел и : два числа и конгруэнтны (сравнимы) по модулю числа , если они дают одинаковые остатки при делении на этот модуль . Таким образом, по формуле (5.1) число будет конгруэнтно по модулю числу При выборе чисел придерживаются следующих правил: 1. — должны быть взаимно простыми числами. Причем число определяет собой период числовой псевдослучайной последовательности: чем больше , тем длиннее последовательность псевдослучайных чисел; 2. кратно для любого простого , являющегося делителем В качестве множителя рекомендуется принимать первообразный корень по модулю . Приведем следующее классическое определение. Первообразный корень по модулю — натуральное число , такое, что наименьшее положительное число , для которого разность делится на (без остатка), совпадает с , где — число натуральных чисел, меньших и взаимно простых с Например, при первообразным корнем по модулю 7 является число 3. Действительно, , т. е. количеству чисел ряда , каждое из которых взаимно просто с числом 7. Два числа называются взаимно простыми, если в качестве общего делителя они имеют только единицу. Числа не делятся на 7 без остатка, и лишь делится на 7 (частное от деления равно 104). В системе MATLAB формирование простых чисел производится с помощью функции (см. ). Для проверки, являются ли два числа взаимно простыми, можно применить функцию , которая определяет наибольший общий делитель для двух чисел. В самом простом случае принимается, что При этом можно использовать следующие рекомендации по выбору параметров генератора: 1. Начальное значение может быть произвольно. 2. Выбор должен удовлетворять трем требованиям: , двоичные знаки не должны иметь очевидного шаблона. 3. В качестве следует выбирать нечетное число, такое, что Пример формирования модуля в командном окне MATLAB: >> N = 7*10^6; >> m = primes(N); >> M = m(end) M = 6999997 Задание 4 1. Полагая в формуле (5.1) , напишите в MATLAB программу формирования случайных чисел, приняв следующие числа для расчета модуля в зависимости от номера варианта: № 1 № 1: № 2: ; № 3: ; № 4: ; № 5: ; № 6: ; № 7: ; № 8: ; № 9: № 2 № 1: ; № 2: ; № 3: ; № 4: ; № 5: ; № 6: ; № 7: ; № 8: ; № 9: № 3 № 1: ; № 2: ; № 3: ; № 4: ; № 5: ; № 6: ; № 7: ; № 8: ; № 9: № >№ 1: ; № 2: ; № 3: ; 4 № 4: ; № 5: ; № 6: ; № 7: ; № 8: ; № 9: 2. В качестве первого назначаемого случайного числа (в зависимости от номера варианта) примите следующие значения: № 1 № 1: , № 2: , № 3: , № 4: , № 5: , № 6: , № 7: , № 8: , № 9: , где — массив простых чисел, сформированный с помощью выражения № 2 № 1: , № 2: , № 3: , № 4: , № 5: , № 6: , № 7: , № 8: , № 9: , где — массив простых чисел, сформированный с помощью выражения № 3 № 1: , № 2: , № 3: , № 4: , № 5: , № 6: , № 7: , № 8: , № 9: , где — массив простых чисел, сформированный с помощью выражения № 4 № 1: , № 2: , № 3: , № 4: , № 5: , № 6: , № 7: , № 8: , № 9: , где — массив простых чисел, сформированный с помощью выражения 3. Вычислите период формируемой случайной последовательности (с помощью функции ). 4. Произведите статистический анализ созданного ГСЧ по линейному конгруэнтному методу. 5. Постройте гистограммы полученных распределений случайных чисел с помощью функции 6. Постройте функции плотности и распределения для сформированных выборок случайных чисел. Совместите диаграммы с теоретическими функциями. 2. Статистическое тестирование выборки псевдослучайных чисел по критерию Колмогорова–Смирнова По критерию Колмогорова–Смирнова (КС-критерию) осуществляется проверка простой статистической гипотезы (нулевой гипотезы) о том, что функция распределения случайной величины совпадает с некоторой известной функцией при некотором уровне значимости . КС-критерием можно пользоваться уже при объеме выборки В системе MATLAB КС-критерий реализован функцией Рассмотрим пример использования функции для проверки гипотезы о том, что функция распределения выборки, сформированной с помощью функции , соответствует функции распределения экспоненциального закона с параметром 1 той же самой выборки. Программное решение примера в командном окне MATLAB: >> x = rand(25,1); F0 = expcdf(x,1); >> H = kstest(x,[x,F0]) H = 1 Полученный результат означает, что нулевая гипотеза отвергается, т. е. выборочная функция равномерного распределения в интервале имеет значительные расхождения с предполагаемой функцией экспоненциального распределения с уровнем значимости = 0.05 (по умолчанию). Если закладывается другой уровень значимости, отличный от 0.05, то тогда он должен быть введен в функцию . На том же примере это будет выглядеть так (с уровнем значимости 0.012): >> x = rand(25,1); F0 = expcdf(x,1); >> H = kstest(x,[x,F0],0.012) H = 1 По-прежнему нулевая гипотеза отвергается. Рассмотрим пример использования функции для проверки гипотезы о том, что функция распределения выборки, сформированной с помощью , соответствует функции распределения равномерного закона из интервала той же самой выборки. Решение примера в командном окне MATLAB: >> x = rand(25,1); F0 = unifcdf(x,0,1); >> H = kstest(x,[x,F0]) H = 0 Нулевая гипотеза о равномерном распределении выборки принимается. Задание 5 1. По критерию Колмогорова–Смирнова протестируйте выборки случайных чисел, сформированных по методу срединных квадратов. 2. По критерию Колмогорова–Смирнова протестируйте выборки случайных чисел объема 100, 500, 1000, сформированных по линейному конгруэнтному методу. 3. Исследование качества ГСЧ по критерию независимости случайных чисел с помощью нормированной автокорреляционной функции Корреляционная функция называется автокорреляционной, если производится статистический анализ одного случайного процесса (или одной выборки случайных чисел). Нормированной корреляционной функцией называется отношение центрированной корреляционной функции к дисперсии случайного процесса [4] Для нахождения значений нормированной корреляционной функции необходимо предварительно центрировать значения случайного процесса или значения отсчетов случайной величины, т.е. выполнить операцию , где: — случайное число; — теоретическое математическое ожидание равномерного распределения. Для определения корреляционной функции по результатам опыта выбирается достаточно большой объем выборки, чтобы можно было в широком диапазоне формировать разницу между двумя соседними значениями случайных чисел. Эту разницу для непрерывного времени обычно обозначают через и тогда корреляционная функция обозначается как . Если объем выборки составляет N, то диапазон вычисления корреляционной функции будет определяться как Величина задает область определения корреляционной функции. Например, может меняться от 0 до 6-8. При этом должно быть много больше 6 или 8. Область суммирования принимает значения от 1 (первое случайное число выборки) до После этого корреляционная функция вычисляется по следующей экспериментальной формуле: (5.3) где — случайное число из заданной выборки случайных чисел. Расчет по приведенной формуле: если взято какое-либо случайное число, то другое случайное число отстоит от первого на величину . Обозначим нормированную корреляционную функцию как Центрированную корреляционную функцию обозначим через . Тогда нормированная корреляционная функция будет определяться в виде отношения где — дисперсия данной выборки случайных чисел. Вычисление можно выполнять по приведенной экспериментальной формуле (5.3), если в ней применяются центрированные случайные числа. ГСЧ считается хорошим, если при , не равным нулю, модуль нормированной корреляционной функции меньше 0.1, т. е. Приведем пример программного анализа независимости последовательности случайных чисел, формируемых функцией , с помощью автокорреляционной функции. Программный код решения примера: clear,clc %% Ввод параметров в интерактивном режиме V1 = inputdlg({'Введите число больше 10.......................................',... 'Сдвиг больше 1'},'Корреляционная функция',1,{'800','6'}); %% Преобразование к числам с плавающей точкой V2 = str2num(char(V1)); % Гарантированное выделение целой части V = fix(V2(1)); z = fix(V2(2)); % Формирование выборки случайных чисел N = rand(V,1); %% Центрирование выборки случайных чисел относительно математического ожидания Nc = N - 0.5; %% Расчет автокорреляционной функции sum1 = Nc(1:(V-z)); sum2 = Nc((1+z):V); Rc = sum(sum1.*sum2)/(V-z); s = var(N); Rn = (Rc/s); %% Проверка качества случайных чисел if abs(Rn) < 0.1 fprintf('\n\t ГСЧ выcокого качеcтва\n') else fprintf('\n\t ГСЧ низкого качеcтва\n') end %% Интерактивное сообщение helpdlg('Смотрите результаты в командном окне','Корреляционная функция') В программе по умолчанию исследуется объем выборки величиной 800 со сдвигом между числами, равным 6. Задание 6 1. Произведите расчет нормированной корреляционной функции для интервального сдвига в пределах от 0 до 50. 2. Постройте график нормированной автокорреляционной функции, т. е. зависимость от . 3. Произведите расчет нормированной корреляционной функции для объема выборки в соответствии с номером компьютера: Компьютер № 1: N = 410; Компьютер № 2: N = 520; Компьютер № 3: N = 630; Компьютер № 4: N = 740; Компьютер № 5: N = 850; Компьютер № 6: N = 960; Компьютер № 7: N = 1070; Компьютер № 8: N = 1180; Компьютер № 9: N = 1190; Компьютер № 10: N = 1210. 4. Выполните первые три пункта задания для анализа ГСЧ в Excel. 5. Выполните первые три пункта задания для анализа ГСЧ в Delphi (консольное приложение). 6. Выполните первые три пункта задания для анализа ГСЧ в Pascal. 7. Выполните первые три пункта задания для анализа ГСЧ в С. 8. Выполните первые три пункта задания для анализа ГСЧ, созданного по методу срединных квадратов в MATLAB. 9. Выполните первые два пункта задания для анализа ГСЧ, созданного по методу Фибоначчи в MATLAB. 10. Выполните первые два пункта задания для анализа ГСЧ, созданного по линейному конгруэнтному методу в MATLAB. 11. Сделайте заключение о системе программирования, в которой ГСЧ является наиболее качественным. Контрольные вопросы |