Разработка алгоритмов и реализация генератора случайной величины из распределения хи-квадрат

Математическое описание распределения хи-квадрат. Методы розыгрыша случайной величины заданного распределения. Блок-схемы алгоритмов розыгрыша и фрагменты кода, реализующие данные алгоритмы. Тестирование и отладка программы-генератора случайных величин.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 26.01.2013
Размер файла 582,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

  • Введение
    • Историческая справка
  • 1 Математическое описание распределения хи-квадрат
  • 2 Методы розыгрыша случайной величины
    • 2.1 Метод обратной функции
    • 2.2 Метод Неймана
    • 2.3 МетодМетрополиса
  • Выводы

Введение

Выполнение данной курсовой работы можно условно разделить на несколько частей:

1. ознакомление с заданным распределением,

2. изучение методов преобразования случайных величин к заданному распределению вероятности,

3. разработка алгоритмов розыгрыша случайной величины,

4. реализация алгоритмов на языке программирования Delphi,

5. тестирование и отладка программы-генератора случайных величин.

В первом разделе данной курсовой работы предоставлено краткое математическое описание обратного распределения хи-квадрат, приведены графики функции плотности вероятности при типичных параметрах распределения.

Второй раздел работы содержит описание трех методов розыгрыша случайной величины заданного распределения, предоставлены блок-схемы алгоритмов розыгрыша и фрагменты кода, реализующие данные алгоритмы.

Историческая справка

Критерий ?? был предложен Карлом Пирсоном (Pearson) в 1900 году.[1] Его работа рассматривается как фундамент современной математической статистики. Предшественники Пирсона просто строили графики экспериментальных результатов и утверждали, что они правильны. В своей статье Пирсон привёл несколько интересных примеров злоупотреблений статистикой. Он также доказал, что некоторые результаты наблюдений за рулеткой (на которой он проводил эксперименты в течение двух недель в Монте-Карло в 1892 году) были так далеки от ожидаемых частот, что шансы получить их снова при предположении, что рулетка устроена добросовестно, равны одному из 1029!

Общее обсуждение критерия ?? и обширную библиографию можно найти в обзорной работе Вильяма Дж. Кокрена

1. Математическое описание распределения хи-квадрат

Распределение (хи-квадрат) с степенями свободы -- это распределение суммы квадратов независимых стандартных нормальных случайных величин. Пусть -- совместно независимые стандартные нормальные случайные величины, то есть: . Тогда случайная величина

имеет распределение хи-квадрат с степенями свободы, то есть .

Распределение хи-квадрат является частным случаем гамма-распределения, и имеет вид:

,

где означает Гамма-распределение, а -- Гамма-функцию.

Функция распределения имеет следующий вид:

,

где и обозначают соответственно полную и неполную гамма-функции.

Свойства распределения хи-квадрат

· Распределение хи-квадрат устойчиво относительно суммирования. Если независимы, и, а , то

.

· Из определения легко получить моменты распределения хи-квадрат. Если , то

,

.

· В силу центральной предельной теоремы, при большом числе степеней свободы распределение случайной величины может быть приближено нормальным . Более точно

по распределению при .

Математическое ожидание - .

Дисперсия - 2.

Асимметрия -

Эксцесс -

Мода -

Распределение . Распределение Пирсона

Плотность вероятности

Функция распределения

2. Методы розыгрыша случайной величины

2.1 Метод обратной функции

Метод обратной функции - это метод преобразования стандартного датчика псевдослучайных чисел в датчик любого другого распределения.

Чтобы разыграть случайную величину необходимо:

1. Рассчитать функцию вероятности

2. Решить уравнение

Найденное значение может быть записано в следующем виде

,

где обратная функция к .

Так как для обратного распределения Гаусса было сложно вычислить интеграл от функции плотности вероятности, данную задачу я решил численно, табулируя функцию с определенным шагом.

Блок схема алгоритма

Табуляция функции

function Tabulate(step, lambda:double; mu:double):Arr; stdcall;

var Sum,Fx,x:Double; i:Integer;

xValues,FxValues:array of double;

begin

Setlength(Result,2);

Sum:=0; Fx:=0; i:=0;

x:=0.00001;

while true do

begin

Sum:=Sum+Sqrt(lambda/(2*PI*x*x*x))*Exp((-lambda*sqr(x-mu))/(2*mu*mu*x))*step;

if Sum > 0.999 then Break;

Fx:=Sum;

SetLength(Result[1],i+1);

SetLength(Result[2],i+1);

Result[1,i]:=Fx;

Result[2,i]:=x;

x:=x+step;

inc(i);

end;

end;

Розыгрыш случайного числа методом обратной функции

function GenerateRandomValues(step,lambda:double; mu:double):Double; stdcall;

var j, minIndex:Integer; min, StdRandomValue:Double;

xValues,FxValues:array of double;

begin

if (GLambda <> lambda) then

begin

GLambda:=lambda;

GMu:=mu;

x_Fx_Values:=Tabulate(step,lambda,mu);

end

else if (GMu <> mu) then

begin

GLambda:=lambda;

GMu:=mu;

x_Fx_Values:=Tabulate(step,lambda,mu);

end;

StdRandomValue:=Random;

min:=10000;

minIndex:=0;

j:=0;

while j <= (Length(x_Fx_Values[1])-1) do

begin

if(Abs(StdRandomValue-x_Fx_Values[1,j])<min) then

begin

min:=Abs(StdRandomValue-x_Fx_Values[1,j]);

minIndex:=j;

end;

inc(j);

end;

Result:=x_Fx_Values[2,minIndex];

end;

2.2 Метод Неймана

Данный метод подходит для моделирования случайных величин, возможные значения которых не выходят за пределы некоторого ограниченного интервала (a,b). Для генерации обратного распределенияГаусса, которое определено на интервале от нуля до плюс бесконечности, вычисляется интервал значимости, на котором изменение значения плотности на соседних значениях Х больше некоторой малой величины и производится генерация случайной величины на интервале от отрицательного предела до положительного.

Для реализации этого метода необходимо определить максимальное значение, которое принимает функция плотности вероятности.

После этого разыгрывается случайная точки из стандартного датчика в прямоугольнике, ограниченном слева и справа границами интервала (а,b), а сверху максимальным значение функции плотности вероятности на заданном интервале. алгоритм распределение программа генератор

Если полученная точка находится под кривой графика функции плотности, то значению случайной величины присваивается значение абсциссы случайной величины стандартного датчика.

Блок-схема алгоритма

Определение максимума функции плотности вероятности

functionGetMaxPDF(step, lambda:double; mu:double):Double; stdcall;

var x:double; i:Integer;

FxValues:array of double;

begin

x:=0.0001; i:=0;

while x<1000 do

begin

SetLength(FxValues,i+1);

FxValues[i]:= Sqrt(lambda/(2*PI*x*x*x))*Exp((-lambda*sqr(x-mu))/(2*mu*mu*x));

x:=x+step;

inc(i);

end;

//получаем максимальное значение функции плотности распределения

Result:=MaxValue(FxValues);

end;

Определение значения коэффициента b

function GetB(lambda,mu:double):Double; stdcall;

var x,Fx:Double;

begin

x:=lambda/2; Fx:=100;

while(Fx > 10E-10) do

begin

Fx:= Sqrt(lambda/(2*PI*x*x*x))*Exp((-lambda*sqr(x-mu))/(2*mu*mu*x));

x:=x+0.1;

end;

result:=x;

end;

Розыгрыш случайной величины методом Неймана

functionGenerateRandomValueNeiman(step,lambda,mu,b:double):double; stdcall;

var x,Fx,StdRandomValue:Double; i:Int64;

begin

if (GLambda <> lambda) then

begin

GLambda:=lambda;

GMu:=mu;

maxRoForNeiman:= GetMaxCDF(step,lambda, mu);

end

else if (GMu <> mu) then

begin

GLambda:=lambda;

GMu:=mu;

maxRoForNeiman:= GetMaxCDF(step,lambda, mu);

//b:=GetB(lambda, mu);

end;

StdRandomValue:=Random;

x:=0+b*StdRandomValue;

StdRandomValue:=Random;

Fx:=StdRandomValue*maxRoForNeiman;

while Fx >(Sqrt(lambda/(2*PI*x*x*x))*Exp((-lambda*sqr(x-Mu))/(2*Mu*Mu*x))) do

begin

StdRandomValue:=Random;

x:=0+b*StdRandomValue;

StdRandomValue:=Random;

Fx:=StdRandomValue*maxRoForNeiman;

end;

result:=x;

end;

2.3 Метод Метрополиса

Метод Метрополиса решает стандартную задачу преобразования случайной величины и относится к классу методов отбора.

Алгоритм метода

1. Определяем значение :

где - равномерная величина распределенная на некотором интервале

2. Вычисляем соответствующее значение

3. После этого, если значение 1, то выход.

4. Если 1, разыгрываем случайную величину из стандартного датчика и, если , то . В противном случае переход к пункту 1.

При реализации данного метода начальное значение рационально выбирать в самой высокой точке распределения. рационально выбирать величиной сравнимой с характерным размером распределения.

Блок-схема алгоритма

Розыгрыш случайной величины методом Метрополиса

functionMetropolisGenerator(lambda,mu,right,delta,xMax:double) : double; stdcall;

var x, w, prevX: double;

begin

prevX:=xMax;

w:=0;

repeat

x := prevX + (-1 + 2 * Random) * delta;

if x>0 then

w := (Sqrt(lambda/(2*PI*x*x*x))*Exp((-lambda*sqr(x-mu))/(2*mu*mu*x)))/(Sqrt(lambda/(2*PI*prevX*prevX*prevX))*Exp((-lambda*sqr(prevX-mu))/(2*mu*mu*prevX)));

until ((w > Random) and (x > 0) and (x < right));

prevX := x;

Result := x;

end;

//определениемаксимальногозначенияPDF

function MaxPDF(step,lambda,mu):double; stdcall;

var x:double; i:Int64;

xValues,FxValues:array of double;

maxValue:double; maxIndex:Int64;

begin

x:=step; i:=0;

while x<mu do

begin

SetLength(FxValues,i+1);

SetLength(xValues,i+1);

FxValues[i]:= Sqrt(lambda/(2*PI*x*x*x))*Exp((-lambda*sqr(x-mu))/(2*mu*mu*x));

xValues[i]:=x;

x:=x+step;

inc(i);

end;

i:=0;

while i<Length(FxValues) do

begin

if FxValues[i]>maxValue then

begin

maxValue:=FxValues[i];

maxIndex:=i;

end;

end;

Result:=xValues(maxIndex);

end;

Выводы

В ходе выполнения курсовой работы мною была разработана программа-генератор случайных величин из обратного распределения Гаусса.

На примерах приведенных выше видно, что численные значения, полученные в результате вычислений незначительно отличаются от теоретических. Гистограммы частот также незначительно отличаются от теоретической кривой функции плотности вероятности данного распределения. При тестировании было выявлено, что более точные результаты давал метод Неймана, но при определенных параметрах распределения этот метод работал намного дольше остальных. Метод Метрополиса давал более грубые оценки дисперсии и математического ожидания, чем остальные методы.

На основании многократного тестирования программы можно сделать выводы, что генератор случайных чисел работает правильно и позволяет получать случайные величины из обратного распределения Гаусса.

В работе были использованы следующие возможности, предоставляемые средой Delphi:

1. Динамические библиотеки

2. Реализация разреженных массивов с использованием массива указателей

3. Функции TryStrToFloatи TryStrToIntдля проверки ввода

4. Оператор Application.ProcessMessager

5. Динамические массивы

6. Работа с текстовыми файлами

7. Работа с компонентами TChartи TStringGrid

8. Работа с буфером обмена и др.

Размещено на Allbest.ru

...

Подобные документы

  • Способы получения случайных чисел в программировании и их использование для решения ряда задач. Принцип действия и тестирование работы генератора случайных чисел в Borland C++, его преимущества. Генерация одномерной и двумерной случайной величины.

    лабораторная работа [105,4 K], добавлен 06.07.2009

  • Рассмотрение методов оценки вероятностных характеристик случайной последовательности: математического ожидания, дисперсии, среднеквадратических отклонений, автокорреляционной функции. Изучение закона распределения по критерию согласия хи-квадрат Пирсона.

    лабораторная работа [176,3 K], добавлен 03.03.2010

  • Сравнение методик расчета и анализа частотного распределения. Синтез номограммы комбинационных частот с использованием рядов Фарея. Программная реализация алгоритмов оптимизации распределения преобразователя частоты с перестраиваемым преселектором.

    дипломная работа [3,5 M], добавлен 07.04.2017

  • Проектирование датчика случайных чисел, пригодного для моделирования случайной последовательности с заданным законом распределения. Методы моделирования. Разработка алгоритма и программы датчика. Исследование свойств выработанной им последовательности.

    лабораторная работа [124,2 K], добавлен 15.06.2010

  • Стадии процесса моделирования. Функция распределения непрерывной случайной величины. Методы моделирования (обратной функции, суперпозиции, исключения). Нормальные случайные величины. Метод Монте-Карло, точки равновесия. Моделирование динамических систем.

    курсовая работа [1,2 M], добавлен 06.08.2013

  • Структура и функции генератора случайных чисел. Методы предельного уменьшения ошибки второго рода. Усиление шумового сигнала. Его дискретизация по времени и аналого-цифровое преобразование. Формирование случайной последовательности и ее корреляция.

    курсовая работа [299,4 K], добавлен 11.12.2014

  • Логнормальное распределение. Применение моделирования логнормального распределения. Постановка и реализация поставленной задачи. Математическое ожидание. Инструкция пользователю. Описание программного модуля. Общие данные логнормального распределения.

    курсовая работа [364,6 K], добавлен 08.01.2009

  • Реализация линейных списков в языке программирования C++. Основные операции при работе с ними. Разработка интерфейса и алгоритмов. Описание работы программы на псевдокоде. Составление программного кода. Тестирование, отладка и результат работы программы.

    курсовая работа [1,1 M], добавлен 07.01.2014

  • Моделирование работы генератора случайных двоичных чисел с ограниченной последовательностью 0 и 1, подчиняющегося равномерному закону распределения, заданному с помощью модели Гильберта. Представление программного решения задачи средствами языка С++.

    лабораторная работа [857,7 K], добавлен 05.06.2011

  • Анализ разновидностей, моделей и типов, классов, видов и элементов КИИ. Объект исследования с плотностью вероятности успешной (во времени) компьютерной атаки, распределенной по закону Хи-квадрат. Осуществление вычислительного эксперимента по риск-оценке.

    курсовая работа [812,4 K], добавлен 13.07.2014

  • Описание алгоритма и исходного кода программы формирования графовой модели заданного фрагмента принципиальной электрической схемы. Разработка схемы алгоритмов решения задачи. Результаты решения контрольных примеров, выполненные с помощью программы.

    контрольная работа [47,8 K], добавлен 14.10.2012

  • Общая характеристика и функциональные возможности системы "Компьютерное тестирование". Связи между информационными объектами. Проектирование алгоритмов обработки данных. Реализация алгоритмов обработки информации, разработка соответствующих макросов.

    контрольная работа [542,8 K], добавлен 19.10.2010

  • Теоретическое обоснование и разработка программы создания мини игры "Магический квадрат". Анализ содержания понятия "магический квадрат". Методы построения магических квадратов. Разработка программ создания мини-игр на языке программирования Delphi.

    курсовая работа [3,5 M], добавлен 18.01.2011

  • Оценка неизвестной функции распределения величины или ее плотности распределения вероятности. Алгоритм основной программы, функции для построения графика исходного массива, гистограммы и графика функции Лапласа. Результат обработки сейсмического сигнала.

    курсовая работа [194,4 K], добавлен 16.12.2012

  • Описание широкополосных сетей интегрального обслуживания, классификация алгоритмов маршрутизации. Реализация логического способа формирования плана распределения информации в схеме маршрутизатора. Математическая модель и метод анализа маршрутизации.

    дипломная работа [1,1 M], добавлен 31.10.2010

  • Описание компонентов сети конфиденциальной связи. Система распределения ключей на основе линейных преобразований. Описание разработанных программ. Криптостойкость алгоритма распределения ключей. Алгоритм шифрования данных в режиме обратной связи.

    курсовая работа [98,3 K], добавлен 26.09.2012

  • Применение и генерирование независимого случайного процесса. Исследование вариантов формирования случайных величин с разными законами распределения. Оценка их независимости с помощью построения гистограммы распределения в программной среде LabVIEW.

    контрольная работа [611,5 K], добавлен 18.03.2011

  • Характеристика графического языка UML. Моделирование случайной величины с заданным законом распределения. Мультипликативный конгруэнтный метод Лемера. Диаграмма вариантов использования для ресторана. Операции классов, их взаимодействие и подчиненность.

    курсовая работа [663,1 K], добавлен 05.01.2016

  • Особенности разработки и реализации обучающей программы и схемы алгоритмов на языке программирования С++. Понятие равномерной и неравномерной дискретизации. Представление информации (составление кода) в виде таблицы перекодировки или многочлена.

    курсовая работа [704,6 K], добавлен 06.03.2013

  • Характеристика вероятностного алгоритма и особенности его использования. Принцип работы и назначение генератора случайных чисел, сущность псевдослучайных чисел. Рассмотрение и реализация метода середины квадрата, разработка алгоритма и его кодирование.

    курсовая работа [50,3 K], добавлен 18.09.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.