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

Автор: Пользователь скрыл имя, 16 Октября 2012 в 19:04, лабораторная работа

Краткое описание

Задание на лабораторную работу.

В лабораторной работе рассматриваются вопросы, связанные с моделированием случайной величины Y, которая в общем случае является функцией других случайных величин:
Y=f(Y1, Y2, …, Yn).
Для выполнения данного задания используются методы и процедуры, изложенные в параграфах 2.2 – 2.4 используя теоретические положения раздела 1.

Файлы: 1 файл

#1.fin.docx

— 150.18 Кб (Скачать)

 

 

 

 

 

 

 

 

 

 

 

 

Для закона Эрланга 2-го порядка.

 

F(x)

f(x)

5918

5918

9026

3108

9796

770

9975

179

9996

21

10000

4

10000

0

10000

0

10000

0

10000

0

10000

0

10000

0


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для смешанного закона распределения.

 

F(x)

f(x)

6847

6847

8526

1679

9152

626

9415

263

9566

151

9667

101

9736

69

9787

51

9834

47

9858

24

9885

27

9898

13


 

 

 

 

 

 

 

 

 

Оценка числовых характеристик  и результат работы программы.

 

 

 

 

 

 

 

 

 

 

 

 

Вывод:

В данной лабораторной работе рассматривались вопросы, связанные с моделированием случайной величины Y, которая в общем случае является функцией других случайных величин. В результате моделирования были получены гистограммы функций распределения случайных величин и функций плотности распределения случайных величин. Также были теоретически и эмпирически рассчитаны значения числовых характеристик случайных величин – математического ожидания и дисперсии. Теоретически рассчитанные значения числовых характеристик случайных величин несколько отличаются от значений, полученных эмпирически. Это прежде всего связано с качеством работы генератора случайных чисел. Так как ГСЧ имеет погрешность в своей работе, то возникает неточность в расчете числовых характеристик случайных величин. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Исходный код программы.

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

 

namespace modeling_1

{

    public partial class Form1 : Form

    {

        Random rnd;

        int M, N, k, intervalsCount;

        float lambda, lambdaExp;

        int[] N1;//счетчики попаданий для экспоненциального  распределения

        int[] N2;//счетчики попаданий для распределения  Эрланга

        int[] N3;//счетчики попаданий для смешанного  распределения

 

        public Form1()

        {

            InitializeComponent();

            rnd = new Random();

            N = Convert.ToInt32(textBox1.Text);

            M = Convert.ToInt32(textBox2.Text);

            lambdaExp = (float)Convert.ToDouble(textBox3.Text);

            lambda = (float)Convert.ToDouble(textBox4.Text);

            k = Convert.ToInt32(textBox5.Text);

            intervalsCount = Convert.ToInt32(textBox16.Text);

 

           

 

            N1 = new int[intervalsCount];

            N2 = new int[intervalsCount];

            N3 = new int[intervalsCount];

           

        }

 

        private void CalcY()

        {

            float y1 = 0, y2, y;

            float sum1 = 0, sum = 0;

            float sqsum1 = 0, sqsum = 0;

            float sum2 = 0, sqsum2 = 0;

 

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

            {

              //экспоненциальное распределение

                y1 = ExponentialLaw(lambdaExp);

                sum1 += y1;

                sqsum1 += y1 * y1;

                for (int j = 0; j < intervalsCount; j++)

                {

                    if (y1 > j && y1 <= j + 1)

                    {

                        N1[j]++;

                        break;

                    }

                }

                //Эрланга к-го порядка

                y2 = ErlangLaw();              

                sum2 += y2;

                sqsum2 += y2 * y2;

                for (int j = 0; j < intervalsCount; j++)

                {

                    if (y2 > j && y2 < j + 1)

                    {

                        N2[j]++;

                        break;

                    }

                }

 

                //Y = Y1 / Y2 / (Y1 + Y2);

                y = y1 / y2 / (y1 + y2);

                sum += y;

                sqsum += y * y;

                for (int j = 0; j < intervalsCount; j++)

                {

                    if (y > j && y <= j + 1)

                    {

                        N3[j]++;

                        break;

                    }

                }

            }

 

            float M1, D1, M2, D2, M3, D3;

 

            M1 = sum1 / N;

            textBox6.Text = M1.ToString();

            D1 = sqsum1 / N - M1 * M1;

            textBox7.Text = D1.ToString();

 

            M2 = sum2 / N;

            textBox10.Text = M2.ToString();

            D2 = sqsum2 / N - M2 * M2;

            textBox11.Text = D2.ToString();

 

            M3 = sum / N;

            textBox15.Text = M3.ToString();

            D3 = sqsum / N - M3 * M3;

            textBox14.Text = D3.ToString();

 

            WriteData();

        }

 

        private float ExponentialLaw(float z)

        {           

            float x = 0;

            bool flag = true;

            while (flag)

            {

                x = (float)rnd.Next(M) / M;

                if (x != 0)

                    flag = false;

            }

 

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

        }

 

        private float ErlangLaw()

        {

            float x = 0;

            for (int i = 0; i < k; i++)

                x += ExponentialLaw(lambda);

            return x;

        }

 

       

 

        private void WriteData()

        {

            WriteOnHD("Exponent_distribution_func.txt", "Exponent_density_func.txt", N1);

            WriteOnHD("Erlang_distribution_func.txt", "Erlang_density_func.txt", N2);

            WriteOnHD("Mix_distribution_func.txt", "Mix_density_func.txt", N3);

 

        }

 

        private void WriteOnHD(string distrib_Name, string density_Name, int[] N)

        {

 

            float f1, F1 = 0;

            StreamWriter sw = File.CreateText(distrib_Name);

            StreamWriter sw1 = File.CreateText(density_Name);

            for (int i = 0; i < 12; i++)

            {

                f1 = N[i];

                F1 += N[i];

                sw.WriteLine(F1);

                sw1.WriteLine(f1);

            }

            sw.Close();

            sw1.Close();

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            N = Convert.ToInt32(textBox1.Text);

            M = Convert.ToInt32(textBox2.Text);

            lambdaExp = (float)Convert.ToDouble(textBox3.Text);

            lambda = (float)Convert.ToDouble(textBox4.Text);

            k = Convert.ToInt32(textBox5.Text);

            intervalsCount = Convert.ToInt32(textBox16.Text);

          

            textBox8.Text = (1 / lambdaExp).ToString();

            textBox9.Text = (1 / Math.Pow(lambdaExp, 2)).ToString();

            textBox12.Text = (k / lambda).ToString();

            textBox13.Text = (k / (float)Math.Pow(lambda, 2)).ToString();

 

            CalcY();

        }

    }

}

 

 

 


Информация о работе Моделирование случайных величин с заданным законом распределения