Название: Проверка гипотезы о нормальности закона распределения экспериментальных данных
Вид работы: лабораторная работа
Рубрика: Информатика и программирование
Размер файла: 238.88 Kb
Скачать файл: referat.me-136846.docx
Краткое описание работы: Моделирование работы генератора случайных двоичных чисел с ограниченной последовательностью 0 и 1, подчиняющегося равномерному закону распределения, заданному с помощью модели Гильберта. Представление программного решения задачи средствами языка С++.
Проверка гипотезы о нормальности закона распределения экспериментальных данных
Проверка гипотезы о нормальности закона распределения экспериментальных данных
1. Цель работы
Смоделировать работу генератора случайных двоичных чисел, имеющего закон распределения, заданного с помощью модели Гильберта; ограниченной последовательности 0 и 1.
2. Основная часть
В качестве входной последовательности выбрали следующую:
2) 1100101010111100001000010000001010101111000010010000100111100100
Моделирование случайной последовательности проводилась средствами языка С++ (среда BorlandBuilderC++ )
Текст программы
генератор двоичный число гильберт
//---------------------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "systemsimulation.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//Вывод в поле RichEdit с заданием цвета выводимого текста
//REditAddColor(RichEdit1, "Test", clRed);
void __fastcall TMainForm::REditAddColor(TRichEdit *RichEditX, AnsiString Text, TColor Color)
{
//HideCaret(RichEditX->Handle);
RichEditX->SelAttributes->Color = Color; //задаёмцветтекста
RichEditX->Lines->Add(Text);//выводимтекст
RichEditX->Perform(EM_LINEINDEX, RichEditX->Lines->Count-1, 0);//устанавливаемпозициюкаретки
RichEditX->Perform(EM_SCROLLCARET, 0, 0);//прокручиваем поле к позиции каретки
}
//---------------------------------------------------------------------------
//Основываясь на входной последовательности формируем закон распределения
void __fastcall TMainForm::ZakonRaspr(AnsiString InSequence, double *P)
{
//P0 //P1 //P00 //P01 //P10 //P11
P[0] = 0; P[1] = 0; P[2] = 0; P[3] = 0; P[4] = 0; P[5] = 0;
int i;
//по определённому алгоритму формируем закон распределения
for(i = 1; i <= InSequence.Length(); i += 2)
{
switch(((AnsiString)InSequence[i]+(AnsiString)InSequence[i+1]).ToInt())
{
case 00:
{
P[0] += 2;//P0
P[2] ++; //P00
} break;
case 01:
{
P[0] ++;//P0
P[1] ++;//P1
P[3] ++;//P01
} break;
case 10:
{
P[1] ++;//P1
P[0] ++;//P0
P[4] ++;//P10
} break;
case 11:
{
P[1] += 2;//P1
P[5] ++; //P11
} break;
}
}
P[2] /= InSequence.Length()/2;// P00/(длина входной последовательности разделённая на 2)
P[3] /= InSequence.Length()/2;// P01/(длина входной последовательности разделённая на 2)
P[4] /= InSequence.Length()/2;// P10/(длина входной последовательности разделённая на 2)
P[5] /= InSequence.Length()/2;// P11/(длина входной последовательности разделённая на 2)
P[0] /= InSequence.Length(); // P0/(длина входной последовательности)
P[1] /= InSequence.Length(); // P1/(длина входной последовательности)
}
//---------------------------------------------------------------------------
//генерирует случайное число с плавающей запятой в заданном диапазоне
double __fastcall TMainForm::Randouble(double min, double max)
{return (double)rand()/(double)RAND_MAX*(max-min)+min;
}
//---------------------------------------------------------------------------
//генерируем последовательность из случайных чисел
AnsiString GenSequence;
AnsiString __fastcall TMainForm::GenModel(double *P, int Count)
{
double Pi1, Pi2, Pi3, Pi4;
GenSequence = "";
Pi1 = P[2];
Pi2 = P[2] + P[3];
Pi3 = P[2] + P[3] + P[4];
Pi4 = P[2] + P[3] + P[4] + P[5];
double rnd;
for (int i = 0; i < Count; i+=2)
{
rnd = Randouble(0.0, 1.0);
if (rnd < Pi1) { GenSequence += "00"; }
if ((rnd >= Pi1) && (rnd < Pi2)) { GenSequence += "01"; }
if ((rnd >= Pi2) && (rnd < Pi3)) { GenSequence += "10"; }
if ((rnd >= Pi3) && (rnd < Pi4)) { GenSequence += "11"; }}
return GenSequence;}
//---------------------------------------------------------------------------
//моделирование случайной последовательности двоичных чисел
void __fastcall TMainForm::ModelSlPosl(double *P, int Count, bool Prn)
{
double **experiment = new double*[3];
for (int i = 0; i < 3; i++)
{experiment[i] = new double[6];
ZakonRaspr(GenModel(P, Count), experiment[i]);
}
REditAddColor(RichEdit1, "|---------------------------------------------------------------------------------------------------------|", clBlue);
REditAddColor(RichEdit1, "| Длина| | Номеропыта | Среднее | Теоретическое | |", clBlue);
REditAddColor(RichEdit1, "|последовательности|Параметры| 1 | 2 | 3 | значение| значение|Ошибка|", clBlue);
REditAddColor(RichEdit1, "|---------------------------|---------------|-----|------|------|-------------|--------------------|---------|", clBlue);
AnsiString PrnScr;
double SrZnach, Err;
AnsiString Prametru[6] = {"P0","P1","P00","P01","P10","P11"};
for(int i = 0; i <= 5; i ++)
{SrZnach = (experiment[0][i] + experiment[1][i] + experiment[2][i])/3;
Err = fabs(P[i] - (experiment[0][i] + experiment[1][i] + experiment[2][i])/3);
PrnScr.sprintf("|%18d|%9s|%5.3lf|%5.3lf|%5.3lf|%9.3lf|%15.3lf|%6.3lf|", Count, Prametru[i], experiment[0][i], experiment[1][i], experiment[2][i], SrZnach, P[i], Err); REditAddColor(RichEdit1, PrnScr, clBlue);
switch(i)
{case 0:
{LineP0->Add(SrZnach, "при N = " + (AnsiString)Count, clRed);
if(Prn)LineP0->Add(P[i], "Теорет.", clRed);
} break;
case 1:
{
LineP1->Add(SrZnach, "при N = " + (AnsiString)Count, clGreen);
if(Prn)LineP1->Add(P[i], "Теорет.", clGreen);
} break;
}
}
for (int i = 0; i < 3; i++) { delete [] experiment[i]; }
delete [] experiment;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::StartSimulationClick(TObject *Sender)
{LineP0->Clear();
LineP1->Clear();
RichEdit1->Lines->Clear();
StartSimulation->Enabled = false;
double P[6];
//формируем закон распределения
ZakonRaspr(InSequence->Lines->Strings[0], P);
//проводим моделирование случайной последовательности двоичных чисел
//для различных длин последовательностей
ModelSlPosl(P, 100);
ModelSlPosl(P, 1000);
ModelSlPosl(P, 10000, true);
StartSimulation->Enabled = true;}
//---------------------------------------------------------------------------
При моделировании использовался генератор случайных чисел с равномерным распределением: при моделировании события А, наступающего с вероятностью Р, берется случайное число х из равномерного распределения на интервале (0, 1) и сравнивается с Р. Если х≤Р, то считается, что событие А наступило, в противном случае наступило событие Ā.
Моделирование случайной последовательности двоичных чисел проводилось для различных длин последовательностей (N=100, N=1000, N=10000), результаты которого представлены на рис. 1, 2
Рис. 1
Рис. 2
3. Вывод
При моделировании
В ходе выполнения задания смоделировали работу генератора случайных двоичных чисел, подчиняющегося равномерному закону распределения, заданного с помощью модели Гильберта; ограниченной последовательности 0 и 1. Мы представили законы распределения случайных чисел, заданных в неявном виде, в виде гистограмм, а далее с помощью языка программирования С++ обеспечили процедуру генерирования случайных чисел, с различными длительностями их последовательности, соответствующих вышеуказанному закону распределения.Из рис.1,2 видно, что при увеличении длины последовательности экспериментально полученные данные приближаются к теоретическим данным.
Похожие работы
-
Энтропия сигналов
Объединение как совокупность нескольких ансамблей дискретных, случайных событий. Безусловная энтропия - среднее количество информации, приходящееся на один символ. Описание информационных свойств непрерывного источника. Понятие дифференциальной энтропии.
-
Моделирование работы. Simula
Моделирование работы в машинном зале в терминах Simula. Схема решения задачи в терминах языка Симула. Глобальные переменные и массивы.
-
Об “арифметических возможностях” компьютера и “компьютерных возможностях” арифметики
При изучении математики и информатики необходимо акцентировать внимание обучаемых на основные различия действий с числами в обычной, неограниченной (“человеческой”) и ограниченной (“машинной”) разрядной сетке, арифметике.
-
Получение случайных чисел
Алгоритмизация и программирование задач с использованием датчиков случайных чисел. Способы получения случайных чисел с различными законами распределения.
-
Программирование с использованием генератора случайных чисел
1. Введение. 1.1. Цель работы Овладение навыками алгоритмизации и программирования задач с использованием датчиков случайных чисел, способами получения случайных чисел с различными законами распределения, навыками оценки качества псевдослучайных чисел и их соответствия заданному закону распределения.
-
Моделирование линейных систем
Решение задачи на построение имитационной модели статической линейной системы, имеющей три входа и один выход. Предполагается, что на систему действуют случайные возмущения, результатом которых являются случайные составляющие с нормальным разделением.
-
Моделирование датчиков случайных чисел с заданным законом распределения
Проектирование датчика случайных чисел, пригодного для моделирования случайной последовательности с заданным законом распределения. Методы моделирования. Разработка алгоритма и программы датчика. Исследование свойств выработанной им последовательности.
-
Построение и анализ простой эконометрической модели
Проверка наличия линейной связи между соответствующими показателями деятельности коммерческих банков Украины в модуле Multiple Regression ППП Statistica. Расчет теоретических значений зависимой переменной и ошибки модели, вид графика линейной функции.
-
Имитационное моделирование системы, осуществляющей модель локальной вычислительной сети (ЛВС) кольцевой структуры
Моделирование, анализ и исследование характеристик локальной вычислительной сети кольцевой структуры. Составление отчета о количестве необработанных заявок, особенности обработки всех данных, результаты отчета проиллюстрированы в виде гистограммы.
-
Метод аппаратурной имитации случайных чисел, относящихся к нечётким множествам
Одним из важных этапов разработки различных образцов техники, систем управления и регулирования является изучение их функционирования в условиях случайных факторов.