100806

Моделирование случайных независимых величин

Лабораторная работа

Математика и математический анализ

В соответствии с условием задания определить параметры законов распределения, которым подчинены случайные величины. Включить генераторы случайных величин в полученную ранее имитационную модель и произвести моделирование СМО в условиях случайного изменения параметров имитационной модели.

Русский

2018-04-13

276 KB

0 чел.

Лабораторная работа №2

студента группы ПИ-41

Рамазанова Фарида Эльмаровича

Выполнение:__________     Защита:__________

МОДЕЛИРОВАНИЕ СЛУЧАЙНЫХ НЕЗАВИСИМЫХ ВЕЛИЧИН

ЦЕЛЬ РАБОТЫ: уточнение имитационной модели СМО посредством моделирования случайных величин, характеризующих параметры заявок и режимы функционирования устройств их обработки в реальной сложной системе

ЗАДАНИЕ К ЛАБОРАТОРНОЙ РАБОТЕ:

1. В соответствии с условием задания определить параметры законов распределения, которым подчинены случайные величины.

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

3. Для каждой случайной величины произвести тестирование программного генератора (по гистограмме, критериям согласия Колмогорова и Пирсона, корреляционному моменту) и убедиться в соответствии генерируемой последовательности заданию.

4. Включить генераторы случайных величин в полученную ранее имитационную модель и произвести моделирование СМО в условиях случайного изменения параметров имитационной модели.

Вариант №17

Ход работы:

1. Функции распределения случайных величин

(1) = 0,16−0,1611−(2−60)2

(2) = 4√232

1−(3−60)2(3) = 3√218

1−(3−60)2(4) = 2√28

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

3. Разработал модуль тестирования и протестировал каждый из генерирующих модулей.

Рисунок 1. Тестирование t1

По заданию:M[t] = 62,5

Рисунок 2. Тестирование t2

По заданию: M[t] = 60

=4

Рисунок 3. Тестирование t3

По заданию: M[t] = 60

=3

Рисунок 4. Тестирование t4

По заданию: M[t] = 60

=2

Модуль тестирования:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.IO;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

usingSystem.Windows.Forms;

namespacetest

{

   public partial classForm1: Form

   {

       intmode = 0;

       intind = -1;

       Random random =newRandom();

       publicForm1()

       {

           InitializeComponent();

           ind = tabControl1.SelectedIndex;

           chart1.Series[0].IsVisibleInLegend =false;

           chart2.Series[0].IsVisibleInLegend =false;

           chart3.Series[0].IsVisibleInLegend =false;

           chart4.Series[0].IsVisibleInLegend =false;

           mode = 1;

           Test(mode, 0.016, 0, 0);

}

public doubleAssignment(intmode,doublel,doublesigma,doublem) {

           if(mode == 1)

           {

               varx = random.NextDouble();

               return(-1 / l * Math.Log(x));

           }

else

{varx = random.NextDouble();varx2 = random.NextDouble();return(sigma * Math.Cos(2*Math.PI*x) * Math.Sqrt(-2*Math.Log(x2)) + m);

} }

       public voidTest(intmode,doublel,doublesigma,doublem)

       {

varM = 25;varN = M * 100;vareV = 0.0;varsD = 0.0;double[] kolmogorL =new double[] { 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3,

1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0 };

           double[] kolmogorP =new double[] { 1.0, 1.0, 1.0, 1.0, 0.997, 0.964, 0.864, 0.711, 0.544, 0.393, 0.27,

0.178, 0.112, 0.068, 0.04, 0.022, 0.012, 0.006, 0.003, 0.002, 0.001 };

           varrandom =newList<double>();

           varreal =newList<double>();

           varstatistP =newList<double>(new double[M]);

           for(vari = 0; i < N; i++)

           {

               varf = Assignment(mode, l, sigma, m);

               random.Add(f);

           }

           varYmax = random.Max();

           varYmin = random.Min();

           vardeltaY = (Ymax - Ymin) / M;

           eV = random.Sum() / N;

           for(vari = 0; i < N; i++)

           {

               sD += Math.Pow(random[i] - eV, 2);

               varindex = (random[i] - Ymin) * (M / (Ymax - Ymin));

               if(index >= 0 && index < M)

                   statistP[(int)index] += 1;

           }

           sD /= N - 1;

           for(vari = 0; i < M; i++)

           {

statistP[i] /= N;

sigma)) * 0.001;

x += deltaY;

staticFunc += statistP[i];

switch(mode)

{

   case1:

       if(x < 0)

           theoreticFunc = 0;

else

           theoreticFunc = 1 - Math.Exp(-l * x);

       break;

   case2:

       varj = Ymin;

       varfunc = 0.0;

       while(j <= x)

       {

func += 1 / (sigma * Math.Sqrt(2 * Math.PI)) * Math.Exp(-Math.Pow(j - m, 2) / (2 * sigma *

j += 0.001; }

       theoreticFunc = func;

break; }

varabs = Math.Abs(staticFunc - theoreticFunc);

if(D < abs)

D = abs;

}

for(vari = 0; i < M; i++)

{

   switch(mode)

   {

       case1:

           chart1.Series[0]["PixelPointWidth"] ="10";

           chart1.Series[0].Points.AddXY(i, statistP[i] / deltaY);

           chart1.Series[0].Points[i].AxisLabel =" ";

           label2.Text = eV.ToString();

           break;

       case2:

           switch(ind)

{case1:

                   chart2.Series[0]["PixelPointWidth"] ="10";

                   chart2.Series[0].Points.AddXY(i, statistP[i] / deltaY);

                   chart2.Series[0].Points[i].AxisLabel =" ";

                   label3.Text = eV.ToString();

                   label5.Text = sD.ToString();

                   break;

               case2:

                   chart3.Series[0]["PixelPointWidth"] ="10";

                   chart3.Series[0].Points.AddXY(i, statistP[i] / deltaY);

                   chart3.Series[0].Points[i].AxisLabel =" ";

                   label9.Text = eV.ToString();

                   label7.Text = sD.ToString();

                   break;

               case3:

                   chart4.Series[0]["PixelPointWidth"] ="10";

                   chart4.Series[0].Points.AddXY(i, statistP[i] / deltaY);

                   chart4.Series[0].Points[i].AxisLabel =" ";

                   label13.Text = eV.ToString();

                   label11.Text = sD.ToString();

break; };

break; }

}

varstaticFunc = 0.0;

vartheoreticFunc = 0.0;

varD = -999999.9;

varx = Ymin;

for(vari = 0; i < M; i++)

{

}varlambd = Math.Round(D * Math.Sqrt(N), 1);varpLambd = kolmogorP[Array.IndexOf(kolmogorL, lambd)];label16.Text = lambd.ToString();label17.Text = pLambd.ToString();/*--------------------------------------------------------------------------------------*/varintervalP = Ymin;varsupX = 0.0;varbetta = 0.0;for(vari = 0; i < M; i++)

5

* sigma)) * 0.001;

case1:

   varfunc1 = 0.0;

   varj1 = intervalP;

   while(j1 <= intervalP + deltaY)

   {

       func1 += l * Math.Exp(-l * j1) * 0.001;

j1 += 0.001; }

res = func1;

   break;

case2:

   varfunc2 = 0.0;

   varj2 = intervalP;

   while(j2 <= intervalP + deltaY)

   {

       func2 += 1 / (sigma * Math.Sqrt(2 * Math.PI)) * Math.Exp(-Math.Pow(j2 - m, 2) / (2 * sigma

j2 += 0.001; }

res = func2;

} }

{

   varres = 0.0;

   switch(mode)

   {

break; }

   supX += Math.Pow(statistP[i] - res, 2) / res;

   intervalP += deltaY;

}

supX *= N;

switch(mode)

{

   case1:

       betta = M - 2;

       break;

   case2:

betta = M - 3;

break; }

label21.Text = supX.ToString();label19.Text = betta.ToString();/*--------------------------------------------------------------------------------------*/vartaus =new int[] { Convert.ToInt32(0.00002 + l + m), Convert.ToInt32(0.002 + l+ m) };varmas =newList<double>();varcm = 0.0;varcs = 0.0;foreach(var tauintaus){

   for(inti = 0; i < N - tau; i++)

   {

       cm += random[i] * random[i + tau];

       vart = 0.0;

       for(intj = 0; j < N - tau; j++)

           t += random[j + tau];

       cs += random[i] * t;

   }

   cm /= (N - tau);

   cm -= Math.Pow(N - tau, 2);

   mas.Add(cm);

}

varp = 0.0;

while(p < 0.9)

{

varcp = (1 - p) * (Math.Sqrt(1 / N) + 0.001);

if(Math.Abs(mas[0]) < cp && Math.Abs(mas[1]) < cp)

   break;

elsep += 0.01;

private voidtabControl1_Click(objectsender, EventArgs e)

{

   ind = tabControl1.SelectedIndex;

   switch(ind)

   {

       case0:

           chart1.Series[0].Points.Clear();

           mode = 1;

           Test(mode, 0.016, 0, 0);

           break;

case1:

} }

} }

   chart2.Series[0].Points.Clear();

   mode = 2;

   Test(mode, 0, 4, 60);

   break;

case2:

   chart3.Series[0].Points.Clear();

   mode = 2;

   Test(mode, 0, 3, 60);

   break;

case3:

   chart4.Series[0].Points.Clear();

   mode = 2;

Test(mode, 0, 2, 60);

   break;

4. Произвел моделирование СМО в условиях случайного изменения параметров имитационной модели.

Рисунок 5. Протокол моделирования

Сравнил результаты моделирования:

Рисунок 6. Результаты из работы №1

Рисунок 7. Результаты из работы №2