Компьютерное моделирование систем массового обслуживания
Дисциплина Сети связи и системы коммутацииЗаказчик | frodo ☆ 0 ✍ 2 ♥ 0 |
Вид работы | Курсовая |
ВУЗ | ЯрГУ им. П.Г. Демидова |
Срок | 08.06.2017 |
Преподаватель | Дубов М.А. |
Вариант | Не указан |
Бюджет | 5000 ₽ |
Теория телетрафика Моделирование Систем Массового Обслуживания прог. MathLab пакетом Simulink Генераторы псевдослучайных чисел. Моделирование поведения случайных объектов и процессов предполагает наличие в составе библиотеки используемых программ некоторого эталона случайных событий. Этим эталоном является программа, позволяющая получать псевдослучайные и квазиравномерно распределенные числа в интервале (0,1), которая называется генератором равномерно распределенных случайных чисел. Любая имитационная модель, а также компьютерные игры, имитирующие события, исход которых нельзя предугадать заранее, используют генераторы случайных чисел. Применяя генераторы равномерно распределенных случайных величин, можно разрабатывать генераторы случайных величин с заданными законами распределения. Получать случайные числа также можно, используя какое-нибудь физическое явление, например тепловой шум в полупроводниках, и на его основе создавать специальное устройство для ввода случайных чисел в компьютер. Этот способ используется при повышенных требованиях к характеристикам случайных чисел, например, в системах шифрования и криптоанализе. В обычных приложениях имитационного моделирования и компьютерных играх требования к случайным последовательностям не столь высоки, поэтому применяют программные методы получения случайных чисел. Существуют разные способы получения случайных чисел. Рассмотрим эти способы. Текст программ генерации непрерывных случайных величин и случайных процессов #include#include #include /* генератор равномерного распределения */ double gen_int(double a, double b) { double z; z=(double)rand()/RAND_MAX; z = a + (b - a)*z; return z; } /* генератор экспоненциального распределения */ double gen_exp(double a) { double z; z=-(1.0/a)*log(((double)rand()/RAND_MAX)+ MINDOUBLE); return z; } /* генератор нормального распределения на основе центральной предельной теоремы */ double gen_normal(double a, double s) { int i; double z; z = 0.0; for(i=0;i<12;i++) { z += 2.0*((double)rand()/RAND_MAX)-1.0; } z = 0.5*z*s + a; return z; } /* текст программы имитации случайного процесса с заданной корреляционной функцией и оценки корреляционной функции по полученной реализации */ double *mv_mod = NULL; double *cv_mod = NULL; int CC; int NMOD; int NP; double *XV = NULL; double *CV = NULL; int NBUF; int PBUF; int N = 0; #define N_4PI 1.3313353638003897127975349179503 /* корреляционная функция */ double ModFunc(double vT, double a, double D) { double v; v = D * exp(-a*a*vT*vT); return v; } void PrepareMod(int P,double dT,double a,double D) { int i,c; double vk; N = 1; XV = new double[P]; CV = new double[P]; NBUF = P; for(i=0;i = NMOD) k -= NMOD; v += mv_mod[k] * cv_mod[i+NP]; k = CC - i; if(k < 0) k += NMOD; v += mv_mod[k] * cv_mod[NP-i]; } XV[PBUF] = v; return v; } void NextModVal(void) { int k; N++; CC++; if(CC >= NMOD) CC = 0; k = CC - NP - 1; if(k < 0) k+=NMOD; mv_mod[k] = gen_normal(0,1); PBUF++; if(PBUF >= NBUF) PBUF=0; } double GetBuf(int id) { int k; if(id == 0) return XV[PBUF]; k = PBUF - id; if(k < 0) k+=NBUF; return XV[k]; } void AddCorV(void) { double v; int i; if(N <= NBUF) return; v = GetModVal(); for(i=0;i NBUF) for(i=0;i Series[0]->AddXY(x,v,"",clRed); } PrepareMod(300,0.5,0.05,0.4); for(i=0;i<5000;i++) { v = GetModVal(); AddCorV(); NextModVal(); Chart1->Series[0]->Add(v,"",clGreen); } FinalizeCor(); for(i=0;i<300;i++) { x = (double)i*0.5; v = CV[i]; Chart2->Series[1]->AddXY(x,v,"",clBlue); } UnPrepareMod(); } /* метод обратных функций */ double gen_obr_f(void) { double v1,v2,rv; bool is_gen = false; while(!is_gen) // пока не получим случайное число { v1 = gen_int(0,1); // равномерно распределенные v2 = gen_int(0,1); v1 = SvMin + (SvMax - SvMin) * v1; v2 *= pGen->GetMaxFxValue(); //max плотности if(v2 <= pGen->GetFxValue(v1)) // плотность { rv = v1; is_gen = true; } } return rv; } /* метод кусочной аппроксимации */ double BndAPDV[NUM_INT+1]; // границы интервалов // заполняются перед вызовом процедуры double prepare_kus_apr(void) { int i; BndAPDV[0] = 0; for(i=1;i<= NUM_INT;i++) { /* вычисляем по обратной функции распределения */ BndAPDV[i] = obr_f((double)i/NUM_INT); } } double gen_kus_apr(void) { v1 = gen_int(0,1); // равномерно распределенные v2 = gen_int(0,1); // i = Floor(v1 * (double)ni); // № интервала if(i >= ni) i = ni-1; rv = BndAPDV[i] + v2* (BndAPDV[i+1] – BndAPDV[i]); return rv; }
Шаг №1. Делаете заказ
Шаг №2. Выбираете автора
Шаг №3. Получаете готовую работу
Отзывы