Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
по лабораторной работе № 3
ОТЧЕТ на тему «Моделирование Пуассоновской СВ»
Улан-Удэ
Постановка задачи: На основе созданного датчика БСВ, смоделировать генератор пуассоновской с.в., получить гистограмму частот.
Теоретическая часть: БСВ (базовая случайная величина) – непрерывная случайная величина z равномерно распределенная на интервале (0; 1). Датчик БСВ – устройство или программа, выдающая по запросу одно или несколько независимых значений БСВ. Моделирование пуссоновской с.в.: Пуассоновская с.в. может принимать значения {0, 1,..., K,...}, вероятности которых определяются по формуле: где а – параметр распределения, а> 0. Генератор пуассоновской с.в. создается по следующему алгоритму: Практическая часть: Листинг программы: #include " stdio.h" #include " conio.h" #include " iostream" #include " math.h" void main(){ setlocale(0, " "); long long int A0, A1, N, M, K; long double g, h, Sum=0, Ma, Di, Ma1, Sum1=0, Ma2; long double Z[100000]; int n[14]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int d[10000]; K= 85481; N=0; printf(" Введите количество генереруемых чисел \n"); scanf(" %d", & N); M= 865449; A0=22131; printf(" Случайные величины \n"); for(int i=0; i< N; i++){ A1=(K*A0)%M; g=A1; h=M; Z[i]=g/h; A0=A1; if(i%9==0){printf(" \n"); } printf(" %.4f ", Z[i]); } int k1=0; float a=5; float G=exp(-a); float P=G; for (int i=0; i< N; i++) { while (Z[i]> G) { P=a/(k1+1)*P; G=G+P; k1++; } d[i]=k1; k1=0; G=exp(-a); P=G; printf(" d[%i]=%i", i, d[i]); if(i%7==0){printf(" \n"); } } for(int i=1; i< N; i++){ if(Z[0]==Z[i]){ printf(" \nПериод=%i", i); break; } } for(int i=0; i< N; i++) { if (d[i]< =0){n[0]++; }else if (d[i]< =1){n[1]++; }else if (d[i]< =2){n[2]++; }else if (d[i]< =3){n[3]++; }else if (d[i]< =4){n[4]++; }else if (d[i]< =5){n[5]++; }else if (d[i]< =6){n[6]++; }else if (d[i]< =7){n[7]++; }else if (d[i]< =8){n[8]++; }else if (d[i]< =9){n[9]++; }else if (d[i]< =10){n[10]++; }else if (d[i]< =11){n[11]++; }else if (d[i]< =12){n[12]++; }else if (d[i]< =13){n[13]++; } } printf(" \nКоличество вхождений"); for(int i=0; i< 14; i++) { printf(" \nn[%d]=%d", i, n[i]); } printf(" \n\nЧастоты: \n\n"); for(int i=0; i< 14; i++){ printf(" n[%d] %.5f \n", i, (float)n[i]/N); } for(int i=0; i< N; i++){ Sum=Sum+d[i]; Sum1=Sum1+(d[i]*d[i]); } Ma=Sum/N; Ma1=Sum1/N; printf(" \n\nМат. ожидание: %f\n", Ma); Sum=0; Di=Sum1/N-Ma*Ma; printf(" Дисперсия: %f\n", Di); getch(); } Гистограмма частот для N=10000:
Вывод:
Так как полученные математическое ожидание и дисперсия примерно равны своим теоретическим значениям, и получена «правильная» частотная гистограмма можно сказать, что данная модель работает правильно.
|