Модель системы обработки информации
Автор работы: Пользователь скрыл имя, 14 Апреля 2014 в 20:45, курсовая работа
Краткое описание
При проектировании вычислительных устройств возникает необходимость в проверке работоспособности, оценке качества, надежности функционирования и определения статистических параметров разрабатываемого устройства. Но поскольку необходимо исследовать вычислительную систему до ее фактического изготовления, то прибегают к построению модели устройства. На этой модели наблюдают за работой проектируемой вычислительной системы и собирают и анализируют ее статистические параметры. Преимущество использования модели для изучения характеристик объекта заключается в возможности проанализировать за короткий промежуток времени большое количество разнообразных ситуаций, возможных в объекте. Использование для этого фактического устройства позволило бы вести сбор статистических параметров только в масштабе реального времени
Содержание
Введение 2
1 Постановка задачи 3
2 Представление объекта моделирования в виде системы массового обслуживания 4
3 Описание процесса функционирования в виде временной диаграммы 6
4 Разработка ГСЧ 7
4.1 ГСЧ 1А и ГСЧ1Б 7
4.2 ГСЧ 2А и ГСЧ2Б 8
4.3 Оценка качества ГСЧ 10
5 Разработка алгоритмической модели объекта 19
6 Моделирование с целью оценки заданных характеристик объекта 20
7 Анализ результатов моделирования 31
Заключение 34
Список использованных источников 35
Прикрепленные файлы: 1 файл
ПЗ.doc
— 3.19 Мб (Скачать документ)for (i = 0; i < Kolvo; i++)
{
if (MyNums[i] == Lev)
Interval[0]++;
for (int k = 0; k < Intervals; k++)
{
if ((MyNums[i] > Delta * k + Lev) &&
(MyNums[i] <= Delta * (k + 1) + Lev))
{
Interval[k]++;
}
}
}
double[] Ideal = new double[Intervals];
for (i = 0; i < Intervals; i++)
{
Ideal[i] = radioButton3.Checked ?
Integral(Lev + Delta * i, Lev + Delta * (i + 1), 36, 0.95) :
Integral(Lev + Delta * i, Lev + Delta * (i + 1), 20, 0.85);
}
dataGridView2.RowCount = Intervals + 1;
double S1, H1, S = 0, SOtkl = 0;
for (i = 0; i < Intervals; i++)
{
dataGridView2.Rows[i].Cells[0]
dataGridView2.Rows[i].Cells[1]
H1 = Math.Round((double)Interval[i] / (Kolvo * Delta), 4);
dataGridView2.Rows[i].Cells[2]
S1 = Math.Round((double)Interval[i] / Kolvo, 4);
dataGridView2.Rows[i].Cells[3]
dataGridView2.Rows[i].Cells[4]
S += S1;
SOtkl += Math.Round(Math.Abs(S1 - Ideal[i]), 4);
}
sump2.Text = S.ToString();
potk2.Text = SOtkl.ToString();
double PogrRasp = Math.Round(SOtkl / S * 100.0, 4);
pogr2.Text = PogrRasp.ToString() + "%";
chart2.Series["Series1"].
chart2.Series["Series2"].
for (i = 0; i < Intervals; i++)
{
chart2.Series["Series1"].
chart2.Series["Series2"].
}
}
double VeibulZakon(double x, double c, double beta)
{
if (x > c)
return beta * Math.Pow(x - c, beta - 1) * Math.Exp(-Math.Pow(x - c, beta));
else
return 0;
}
double Integral(double x1, double x2, double c, double beta)
{
const double step = 0.001;
double x, S;
S = 0;
for (x = x1; x < x2; x = x + step)
{
S += VeibulZakon(x, c, beta) * step;
}
return S;
}
}
}
!!!!!!! Main !!!!!!!
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;
namespace Kursach
{
public partial class Main : Form
{
public Main()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int GenedSignals = 0, PostupiloMes = 0, DeleteMes = 0, V = 12, Polomok = 0, SignalovStoped = 0, SignalovPolucheno = 0;
double NextSignalTime = 0, SignalProcessedTime = 0;
Random rand = new Random();
double VremyaActive = 0, LastTime = 0, time = 0;
int MaxTime = 60 * 60 * 24 * 15;
double[] Mes = new double[MaxTime];
double DeltaT = 1.0;
bstart.Enabled = false;
listBox1.Items.Clear();
Boolean Sostoyanie = true, Processed = false;
double PolomkaTime, PochinkaTime = 0, VremyaRaboty = 0, VremyaVosst = 0;
int sum, SignalovObrabotano = 0, Pochinok = 0;
double t;
NextSignalTime = 20.0 + 20.0 * Convert.ToDouble(rand.Next(
int i;
int n = 500;
double step = 0.00001;
int j;
double[] granica1 = new double[n + 1];
double[] granica2 = new double[n + 1];
double pos = 36;
double sq = 0, sq1;
do
{
sq += VeibulZakon(pos, 36, 0.95) * step;
pos += step;
} while (pos < 42);
sq1 = sq / n;
granica1[0] = 36;
pos = 36;
for (j = 1; j < n; j++)
{
sq = 0;
do
{
sq += VeibulZakon(pos, 36, 0.95) * step;
pos += step;
} while (sq < sq1);
granica1[j] = pos;
}
granica1[n] = 42;
double pos2 = 20;
do
{
sq += VeibulZakon(pos2, 20, 0.85) * step;
pos2 += step;
} while (pos2 < 27);
sq1 = sq / n;
granica2[0] = 20;
pos2 = 20;
for (j = 1; j < n; j++)
{
sq = 0;
do
{
sq += VeibulZakon(pos2, 20, 0.85) * step;
pos2 += step;
} while (sq < sq1);
granica2[j] = pos2;
}
granica2[n] = 27;
int interval;
interval = rand.Next(n);
double left_val = granica1[interval];
double right_val = granica1[interval + 1];
PolomkaTime = (Convert.ToDouble(rand.Next(
do
{
time += DeltaT;
if (time >= NextSignalTime)
{
if (time < 10000) listBox1.Items.Add(time.
GenedSignals++;
PostupiloMes++;
if (time < 10000) listBox1.Items.Add(time.
if (Mes[V - 1] > 0)
{
DeleteMes++;
if (time < 10000) listBox1.Items.Add(time.
}
for (i = V - 1; i > 0; i--)
{
Mes[i] = Mes[i - 1];
}
Mes[0] = time;
NextSignalTime = time + 20.0 + 20.0 * Convert.ToDouble(rand.Next(
}
if (Sostoyanie)
{
VremyaActive += (time - LastTime);
if (time >= PolomkaTime)
{
Sostoyanie = false;
Polomok++;
listBox1.Items.Add(time.
if (Processed)
{
listBox1.Items.Add(time.
PostupiloMes++;
listBox1.Items.Add(time.
if (Mes[V - 1] >= 0)
{
listBox1.Items.Add(time.
}
for (i = V - 1; i > 0; i--)
{
}
Mes[0] = time;
Processed = false;
SignalovStoped++;
}
interval = rand.Next(n);
left_val = granica2[interval];
right_val = granica2[interval + 1];
PochinkaTime = time + (Convert.ToDouble(rand.Next(
}
else
{
if (!Processed)
{
sum = 0;
for (i = 0; i < V; i++)
{
}
if (sum > 0)
{
for (i = V - 1; i >= 0; i--)
SignalProcessedTime = time + 15.0 + 20.0 * Convert.ToDouble(rand.Next(
}
}
else
{
VremyaRaboty += (time - LastTime);
if (time >= SignalProcessedTime)
{
}
}
}
}
else
{
VremyaVosst += (time - LastTime);
if (time >= PochinkaTime)
{
Sostoyanie = true;
Pochinok++;
interval = rand.Next(n);
left_val = granica1[interval];
right_val = granica1[interval + 1];
PolomkaTime = time + (Convert.ToDouble(rand.Next(
listBox1.Items.Add(time.
}
}
LastTime = time;
} while (time < MaxTime);
listBox1.Items.Add(time.
bstart.Enabled = true;
label1.Text = "Прошло времени: " + time.ToString();
label2.Text = "Количество сигналов, сгенерированных датчиками: " + GenedSignals.ToString();
label3.Text = "Количество сигналов, поступивших в канал (от датчиков и от ЭВМ): " + PostupiloMes.ToString();
label4.Text = "Количество сигналов, удаленных из канала из-за переполнения: " + DeleteMes.ToString();
label5.Text = "Количество сигналов, поступивших из канала в ЭВМ: " + SignalovPolucheno.ToString();
label6.Text = "Количество сигналов, направленных обратно в канал из-за поломки ЭВМ: " + SignalovStoped.ToString();
label7.Text = "Количество сигналов, обработанных в ЭВМ: " + SignalovObrabotano.ToString();
label9.Text = "ЭВМ вышла из строя, раз: " + Polomok.ToString();
label10.Text = "ЭВМ была восстановлена, раз: " + Pochinok.ToString();
label11.Text = "Состояние ЭВМ: " + (Sostoyanie ? "активна" : "восстанавливается");
label12.Text = "ЭВМ обрабатывает сигнал: " + (Processed ? "да" : "нет");
label13.Text = "Время нахождения ЭВМ в активном состоянии: " + VremyaActive.ToString();
label14.Text = "Время нахождения ЭВМ в состоянии восстановления: " + VremyaVosst.ToString();
label15.Text = "Время фактической обработки сигналов на ЭВМ: " + VremyaRaboty.ToString();
label16.Text = "Время когда ЭВМ была в актином состоянии, но не обрабатывала сигналы: " + (VremyaActive - VremyaRaboty).ToString();
double KoefGot = VremyaActive / time;
double KoefZag = VremyaRaboty / VremyaActive;
double PokazEff = (double)SignalovObrabotano / GenedSignals;
label17.Text = "Коэффициент готовности ЭВМ: " + KoefGot.ToString();
label18.Text = "Коэффициент загрузки ЭВМ: " + KoefZag.ToString();
label19.Text = "Показатель эффективности: " + PokazEff.ToString();
}
double VeibulZakon(double x, double c, double beta)
{
if (x > c)
return beta * Math.Pow(x - c, beta - 1) * Math.Exp(-Math.Pow(x - c, beta));
else
return 0;
}
private void button1_Click_1(object sender, EventArgs e)
{
Generators gens = new Generators();
gens.Show();
}
}
}