Автор: Пользователь скрыл имя, 16 Октября 2012 в 19:04, лабораторная работа
Задание на лабораторную работу.
В лабораторной работе рассматриваются вопросы, связанные с моделированием случайной величины Y, которая в общем случае является функцией других случайных величин:
Y=f(Y1, Y2, …, Yn).
Для выполнения данного задания используются методы и процедуры, изложенные в параграфах 2.2 – 2.4 используя теоретические положения раздела 1.
Для закона Эрланга 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(
lambda = (float)Convert.ToDouble(
k = Convert.ToInt32(textBox5.Text)
intervalsCount = Convert.ToInt32(textBox16.
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_
WriteOnHD("Erlang_
WriteOnHD("Mix_distribution_
}
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(
lambda = (float)Convert.ToDouble(
k = Convert.ToInt32(textBox5.Text)
intervalsCount = Convert.ToInt32(textBox16.
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();
}
}
}
Информация о работе Моделирование случайных величин с заданным законом распределения