Сделать заказ
Ваши преимущества

Вы сами выбираете эксперта

Цены ниже на 30%

Можно заказывать без предоплаты

Различные варианты оплаты

Сотни квалифицированных экспертов

Компьютерное моделирование систем массового обслуживания

Дисциплина Сети связи и системы коммутации
Заказчик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;iSeries[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. Получаете готовую работу
Отзывы
Пользовательское соглашение Электронная библиотека