Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра автоматизованих систем управління
/
Звіт
з лабораторної роботи №6
предмету «Моделювання систем»
на тему
“ Ідентифікація законів розподілу та оцінювання параметрів вибіркових даних при моделюванні випадкових процесів ”
Львів 2014
Мета
Вивчення методів ідентифікації характеристик випадкових величин та процесів при статистичному моделюванні систем. Об’єм роботи: 4 години.
Теоретичні положення
В тому випадку, коли деякі з елементів системи виявляють стохастичну поведінку, в процесі моделювання виникає проблема оцінки відповідності експериментальних даних деякому теоретичному розподілу. Якщо спостерігається така відповідність, надалі існує можливість побудови моделі вхідних або очікуваних подій на основі теоретичного розподілу.
Розв'язок цієї проблеми досягається в декілька етапів:
Накопичення вхідних даних.
Точкове та інтервальне оцінювання моментів (математичного сподівання, дисперсії, моментів вищого порядку).
Побудова гістограми для вхідних даних.
Вибір закону розподілу.
Оцінка значень параметрів закону розподілу на основі дослідних даних.
Перевірка відповідності між експериментальними даними та обраним законом розподілу за вибраним критерієм.
2.1. Точкове оцінювання математичного сподівання та дисперсії
Точкові оцінки являють собою числа, отримані шляхом підстановки значень вибірки у формулу для оцінюваного параметру. Математичне сподівання mx та дисперсію оцінюють за допомогою співвідношень:
(2.1)
(2.2)
Оцінки, отримані в результаті статистичної обробки вибіркових даних, повинні задовільняти наступним вимогам:
Оцінка повинна бути незміщеною, тобто математичне сподівання її повинно дорівнювати параметру, який визначається, , де -оцінка параметру g .
Оцінка повинна бути ефективною, тобто мінімізувати значення середньоквадратичної похибки оцінки, , де g1 - оцінка, яка розглядається, gi - довільна інша оцінка.
Оцінка повинна бути суттєвою, тобто при збільшенні кількості випробувань N значення оцінки повинно бути збіжним до значення оцінюваного параметру .
Наведені оцінки математичного сподівання та дисперсії є суттєвими та незміщеними, а для вибірки з нормальної сукупності являє собою ефективну оцінку, а прямує до ефективної при N((, тобто є асимптотично ефективною.
Незміщеність оцінки досягається використанням в знаменнику формули (2.2) величини (=N-1, яка називається числом степенів вільності і обчислюється як різниця між числом наявних експериментальних значень N та кількістю додаткових параметрів, які входять у формулу для оцінки дисперсії і обчислюються як лінійні комбінації тих самих спостережень (параметр ).
2.2. Інтервальне оцінювання математичного сподівання та дисперсії
Точкові оцінки параметрів не дозволяють оцінити, наскільки близька оцінка до відповідного значення теоретичного параметру g. Більш інформативний спосіб полягає в побудові інтервалу, в якому з заданою достовірністю виявиться оцінюваний параметр, тобто в визначенні інтервальної оцінки параметру g.
Інтервальною оцінкою параметру g називається інтервал, межі якого l1 та l2 являють собою функції значень вибірки і який з заданою ймовірністю Р накриває оцінюваний параметр:
(2.3)
Інтервал називається довірчим, а його межі l1 та l2 - випадкові величини - нижня та верхня довірчі межі відповідно. Р називається довірчою ймовірністю, а величина α=1-P - рівнем значимості, який використовується при побудові довірчого інтервалу. Таким чином інтервальна оцінка характеризується шириною довірчого інтервалу L=l2-l1 та довірчою ймовірністю Р, яка характеризує степінь надійності результатів.
Процедура отримання інтервальної оцінки полягає в наступному:
Записуємо певне ймовірнісне твердження виду
(2.4)
де ((() - функція густини ймовірності випадкової величини (. При цьому значення (1 та (2 визначаються за допомогою додаткових умов:
(2.5)
Аргумент виразу (2.4) перетворюють таким чином, щоби в результаті параметр, який оцінюється, виявився між величинами, визначеними за вибіркою. Це й будуть межі довірчого інтервалу (l1, l2). Функція обирається таким чином, щоб вона дозволяла подібне перетворення та мала відому (краще табульовану) функцію густини ймовірності f((), що суттєво полегшує визначення (1 та (2.
Приклад 1. Побудуємо інтервальну оцінку математичного сподівання тx нормальної генеральної сукупності з відомою дисперсією . Нормуючи цю сукупність, отримаємо функцію , яка має нормальний розподіл з математичним сподіванням 0 та дисперсією 1. Співвідношення (2.4) з врахуванням (2.5) прийме вигляд
(2.6)
Після перетворення аргументу отримаємо
(2.7)
Таким чином, в цьому випадку
(2.8)
І ширина довірчого інтервалу складає
(2.9)
Довірчий інтервал для mx, який визначається нерівністю (2.7), можна інтерпретувати наступним чином: якщо багаторазово отримувати вибірки об’єму N та за допомогою нерівності (2.7) визначати довірчий інтервал, то в середньому 100%•Р побудованих таким чином інтервалів покриває собою дійсне значення mx.
В табл. 2.1 розглянуті можливі випадки при оцінюванні mх, . Вважається, що х - нормально розподілена випадкова величина, і спостереження незалежні. Відповідні формули мають вигляд:
(2.10)
(2.11)
де (=N-1, α=1-P, P - довірча ймовірність.
Таблиця 2.1
Інтервальні оцінки параметрів вибіркових даних
Параметр,
який
оцінюється
Інформація про інші
параметри
Функція
Розподіл
Формула довірчого
інтервалу
mx
відома
нормальний
(2.7)
mx
невідома
t -розподіл
(2.10)
(x2
mx невідоме
x2 - розподіл
(2.11)
Приклад 2. Для вибірки об’єму N=9 визначені оцінки математичного сподівання та дисперсії =2.0, . Необхідно побудувати довірчі інтервали: а) для mx при P = 0.95; б) для при Р=0.9.
а) В цьому випадку (=9-1=8. З таблиці 2 додатку знаходимо . Підставляючи значення , N, Sx та в формулу (2.10) отримаємо довірчий інтервал для mx - (0.078; 3.922).
б) Використовуючи таблицю 1 додатку, визначимо
Після підстановки N, та табличних значень в формулу (2.11) знаходимо iнтервал для - (3.224; 18.295).
2.4. Вибір закону розподілу
Вибір закону розподілу є по суті неформальним етапом, на якому використовується побудована гістограма густини закону розподілу. Порівнюючи візуально гістограму з відомими законами розподілу визначаємо, якому з них найбільш відповідає побудована гістограма. При цьому можливо використання апріорної інформації: наприклад, при побудові моделі радіоактивного розпаду відомо, що він відповідає експоненційному закону розподілу; якщо ж досліджувана величина є результатом дії багатьох випадкових факторів, серед яких немає домінуючих, то слід сподіватися, що ця величина розподілена за нормальним розподілом. Якщо при перевірці на відповідність теоретичному закону розподілу буде отриманий негативний результат, необхідно вибрати новий теоретичний розподіл на основі поглибленого аналізу процесу, що моделюється. Графічне представлення теоретичних законів розподілу наведено на рис. 2.1.
2.5. Оцінка значень параметрів закону розподілу
Для перевірки відповідності між теоретичним законом розподілу та отриманим на основі експериментальних даних розподілом (гістограма) насамперед необхідно оцінити значення параметрів теоретичного розподілу. Для обчислення значень параметрів використовуємо табл. 2.2, в якій для різних законів наведені вирази для обчислення параметрів через значення експериментальних даних.
2.6. Перевірка гіпотези про відповідність закону розподілу експериментальних даних деякому теоретичному закону розподілу
Перевірка відповідності здійснюється за допомогою критеріїв узгодження, які являють собою критерії гіпотез про те, що генеральна сукупність має розподіл передбачуваного типу. Найбільш розповсюдженим є критерій Пірсона. Перевірку гіпотези про вид функції закону розподілу за допомогою цього критерію виконуємо наступним чином:
За значеннями вибірки будуємо гістограму. Якщо в деякому інтервалі кількість спостережень Nі<5, то його об'єднуємо з суміжними так, щоб в кінцевому результаті в кожному з інтервалів кількість спостережень було не менше 5. Якщо Kr підсумкове число інтервалів, то очевидно .
Обираємо вид гіпотетичної функції закону розподілу та знаходимо оцінки її параметрів.
Обчислюємо теоретичну ймовірність Pm, з якою можна потрапити в кожен з інтервалів Kr випадкової величини за обраним законом розподілу, використовуючи вираз функції закону розподілу, або ж табличні значеня функції закону розподілу.
Рис. 2.1. Вид функцій густини для деяких законів розподілу:
а) біноміального; б) геометричного; в) дискретно рівномірного;
г) рівномірного; д) експоненційного; е) нормального; ж) логарифмічно нормального.
Таблиця 2.2
Параметри законів розподілу випадкових величин
Закон
Вид функції густини закону розподілу
Пара-мeтри
Оцінки параметрів
Біноміальний
x - ціле
0 ( x ( n
р (
Геометричний
f (x ) = p (1 - p)x
x - ціле
x ( 0
р (
Дискретно рівно-мірний
f (x) = 1/b
x - ціле
а ( x ( а+b-1
а (
b (
Pівномірний
f (x) = 1/b
а ( x ( а + b
а (
b (
Eкспоненційний
f (x) = ( e-(x
0 ( x ( + (
(→
(→
Нормальний
m (
(
Логарифмічний нормальний
m (
(
- розподіл
((
t – розподіл
((
Обчислюємо розрахункове значення критерію :
(2.14)
Для критерію Пірсона випадкова величина х при великих значеннях N має розподіл з Kr-1-r степенями вільності, де r - число невідомих параметрів гіпотетичного закону розподілу, які визначаються в п.2, а зменшення числа степенів вільності ще на одиницю пояснюється наявністю лінійного співвідношення між величинами Nm та N, які входять в розрахункову формулу для (2 (2.14). Задаємо значення рівня значимоcті α (або, що еквівалентно, довірчу ймовірність Р=1-α). По таблиці 1 (2 розподілу (додаток) знаходимо критичне значення , причому критична область визначається співвідношенням .
Порівнюємо значення та та приймаємо рішення про прийняття (якщо ) або відхилення (якщо ) гіпотези про вид функції закону розподілу.
2.7. Методи генерації випадкових величин з заданим законом розподілу
2.7.1. Стандартні методи моделювання дискретних випадкових величин
Загальний метод моделювання випадкової дискретної величини грунтується на використанні очевидного співвідношення
(2.16)
де - закон розподілу дискретної випадкової величини
α – випадкова величина, рівномірно розподілена на проміжку (0,1).
Процес генерації значення випадкової величини ξ за цим законом розподілу включає такі кроки:
1. Генерація значення випадкової величини α за допомогою датчика рівномірно розподілених випадкових чисел. M=(; i=0.
2. M=M-Pi.
3. Якщо M>0, то (і=і+1. Перехід до кроку 2).
4. Згенероване значення випадкової величини (=xi.
Як ми бачимо, в цьому алгоритмі необхідно зберігати значення Pi та відповідні значення випадкової величини ξ в вигляді масивів. Якщо можливо встановити між суміжними значеннями Pi та Pi+1 рекурентне співвідношення виду , то моделювання можна здійснити за наступним алгоритмом:
1. M=(, P=P0, i=0
2. M=M-Pi
3. Якщо M>0, то (. Перехід до 2).
4. Згенероване значення випадкової величини (=xi.
В цьому алгоритмі немає потреби зберігати в пам’яті ЕОМ всі значення P1, P2, … Вони послідовно обчислюються в процесі моделювання. Звичайно, при цьому час роботи збільшується.
Приклад 4. Для біноміального розподілу з параметрами (p,n) отримаємо
звідки значення
Приклад 5. Для геометричного закону розподілу , і відповідне значення r(k)=1-p, k=0, 1, … .
2.7.2. Стандартний метод моделювання неперервної випадкової величини (метод Монте-Карло)
Загальний розподіл дійсної випадкової величини ξ описується в термінах інтегральної функції закону розподілу F(x) = Pξ(ξ≤x) - ймовірність того, що випадкова величина ξ прийме значення (x. F(x) - монотонно неспадна функція, межі зміни якої від 0 до 1 (F(-()=0, F(+()=1).
Загальний спосіб генерації випадкової величини ξ з функцією F(x), яка має обернену функцію F-1, полягає в тому, що реалізацію випадкової величини ξ обчислюють за формулою , де y - рівномірно розподілене в інтервалі (0,1) число.
2.7.3. Методи моделювання нормально розподілених випадкових величин
Модифікація метода полярних координат дозволяє отримати дві незалежних нормально розподілених випадкових величини. Генерація проводиться за допомогою наступного алгоритму:
І. Згенерувати два рівномірно розподілених в інтервалі (0,1) випадкових числа (1 та (2. Обчислити .
2. Обчислити .
3. Якщо S(1 то перейти до кроку 1.
4. Обчислити два значення нормально розподілених випадкових величин з параметрами m=0, за формулами
Для генерації 100 пар нормально розподілених випадкових чисел знадобиться в середньому 127 пар випадкових чисел α1 , α2.
Інший метод використовує центральну граничну теорему. Якщо взяти вибірку об’єму в n значень з деякої сукупності, розподіленої з параметрами m та (2, сума значень сукупності буде асимптотично прямувати до нормального розподілу з математичним сподіванням nm та дисперсією n(2. Якщо використати як основу рівномірний розподіл в інтервалі (0,1), то m=1/2, (2=1/12 і з суми n величин отримаємо величину x, розподілену нормально з математичним сподіванням n/2 та дисперсією n/12. Тобто, якщо покласти n=12, то значення дисперсії складе 1. Віднімаючи від суми 6, отримаємо математичне сподівання рівне 0, тобто нормоване нормально розподілене випадкове число визначається за формулою
(2.17)
Цей генератор має певні недоліки: по перше, для генерації одного нормально розподіленого числа потрібно 12 рівномірно розподілених чисел, що при необхідності отримання великої кількості нормально розподілених чисел може привести до недостачі рівномірно розподілених чисел; по друге, погано генеруються "хвости" нормального розподілу.
Перехід до нормально розподіленої з параметрами m, (2 величини здійснюється шляхом масштабування нормованого розподілу за формулою
Завдання:
Значення вхідних даних
X0
λ
m
σ
11547
0.06
20.0
0.25
Хід роботи:
На Рис.1-2 представлено головне вікно розробленого програмного забезпечення. Дане програмне забезпечення дозволяє генерувати введену користувачем кількість значень і період для кожного з методів генерації випадкових чисел. ПЗ дозволяти генерувати значення розподілені за нормальним і експоненціальним законом розподілу. ПЗ дозволяє перевіряти якість генераторів. В результаті проведеної оцінки ПЗ робить висновок про задовільнісь чи незадовільність даного генератора. Код наведено у додатку А.
/
Рис.1. Нормальний закон.
/
Рис.2. Експоненціальний закон.
Висновок.
Вивчив методи ідентифікації характеристик випадкових величин та процесів при статистичному моделюванні систем.
ДОДАТОК А
Int64 X0;
Int64 X1;
Int64 A;
Int64 B ;
Int64 C ;
Int64 N ;
Int64 m ;
Int64 G1, G2,G,G0;
public Form1()
{
InitializeComponent();
X0 = Convert.ToInt64(textBox1.Text);
X1 = Convert.ToInt64(textBox11.Text);
A = Convert.ToInt64(textBox10.Text);
B = Convert.ToInt64(textBox7.Text);
C = Convert.ToInt64(textBox8.Text);
N = Convert.ToInt64(textBox5.Text);
m = Convert.ToInt64(Math.Pow(2, B));
G1 = X1;
G2 = X0;
G0 = X0;
}
private int rand(int r)
{
if (radioButton5.Checked == true)
{
G = ((A * G0) % m);
G0 = G;
}
if (radioButton4.Checked == true)
{
G = (A * G0 + C) % m;
G0 = G;
}
if (radioButton3.Checked == true)
{
G = (G1 + G2) % m;
G2 = G1;
G1 = G;
}
return (int)G;
}
private void button1_Click(object sender, EventArgs e)
{
int max_rand = (int)m;
int N = Convert.ToInt32(textBox5.Text);
int K;
if (radioButton1.Checked) K= 36;
else K = 12;
Double ld = Convert.ToDouble(textBox2.Text);
Double M = Convert.ToDouble(textBox3.Text);
Double sg = Convert.ToDouble(textBox4.Text);
Double[] mas = new Double[K];
Double[,] G = new Double[2, (int)N];
String[] mass = new String[K];
int k = 0;
Double min = 100, max = -100;
Double Mx = 0, Sx = 0;
Double[] mas_t = new Double[K];
Double X2 = 0;
Double X2_teor;
if (radioButton1.Checked) X2_teor = 34.80;
else X2_teor = 14.85;
if (radioButton1.Checked)
{
K=36;
Double V1 = 0, V2 = 0, S = 0, x1 = 0, x2 = 0;
for (int i = 0; i < N; i++)
{
for (; ; )
{
V1 = 2 * (rand(max_rand) / Convert.ToDouble(max_rand)) - 1;
V2 = 2 * (rand(max_rand) / Convert.ToDouble(max_rand)) - 1;
S = Math.Pow(V1, 2) + Math.Pow(V2, 2);
k++;
if (S < 1) break;
}
x1 = V1 * Math.Pow(((-2) * Math.Log(S, Math.E)) / S, 1.0 / 2.0);// *sg * sg + M;
x2 = V2 * Math.Pow(((-2) * Math.Log(S, Math.E)) / S, 1.0 / 2.0);// *sg * sg + M;
G[0, i] = x1;
G[1, i] = x2;
Mx += x1 / Convert.ToDouble(N);
Mx += x2 / Convert.ToDouble(N);
}
for (int i = 0; i < N; i++)
{
Sx += Math.Pow(G[0,i] - Mx, 2) / Convert.ToDouble(N - 1);
Sx += Math.Pow(G[1, i] - Mx, 2) / Convert.ToDouble(N - 1);
}
min = 100;
max = -100;
for (int i = 0; i < N; i++)
{
if (min > G[0, i]) min = G[0, i];
if (min > G[1, i]) min = G[1, i];
if (max < G[0, i]) max = G[0, i];
if (max < G[1, i]) max = G[1, i];
}
Double[] prom=new Double[12];
int t=0;
for(Double p = 0;p<=3.06;p+=0.6)
{
prom[t] = p;
t++;
}
Double min_save = min;
max = max + Math.Abs(min);
min = 0;
Double dX = (max+ Math.Abs(min))/Convert.ToDouble(K);
int index;
for (int i = 0; i < N; i++)
{
index = (int)((G[0, i] + Math.Abs(min_save)) / dX);
// index += 5;
if(index>=K)index=K-1;
if (index < 0) index = 0;
mas[index]++;
index = (int)((G[1, i] + Math.Abs(min_save)) / dX);
// index += 5;
if (index >= K) index = K-1;
if (index < 0) index = 0;
mas[index]++;
}
for (int i = 0; i < K; i++)
mas[i] = mas[i] / 2.0;
for (int i = 0; i < K; i++)
{
mass[i] = (i*(max-min)/11+(max-min)/22.0).ToString("0.000");
}
mas_t[0] = 0.99844;
mas_t[1] = 0.99744;
mas_t[2] = 0.99534;
mas_t[3] = 0.99180;
mas_t[4] = 0.98610;
mas_t[5] = 0.97725;
mas_t[6] = 0.96407;
mas_t[7] = 0.94520;
mas_t[8] = 0.91924;
mas_t[9] = 0.88493;
mas_t[10] = 0.84134;
mas_t[11] = 0.78814;
mas_t[12] = 0.72575;
mas_t[13] = 0.65542;
mas_t[14] = 0.57926;
mas_t[15] = 0.52000;
mas_t[16] = 0.50;
mas_t[17] = 0.52000;
mas_t[18] = 0.57926;
mas_t[19] = 0.65542;
mas_t[20] = 0.72575;
mas_t[21] = 0.78814;
mas_t[22] = 0.84134;
mas_t[23] = 0.88493;
mas_t[24] = 0.91924;
mas_t[25] = 0.94520;
mas_t[26] = 0.96407;
mas_t[27] = 0.97725;
mas_t[28] = 0.98610;
mas_t[29] = 0.99180;
mas_t[30] = 0.99534;
mas_t[31] = 0.99744;
mas_t[32] = 0.99865;
mas_t[33] = 0.99931;
mas_t[34] = 0.99966;
mas_t[35] = 0.99984;
Double buf;
for (int i = 13; i < 14; i++)
{
// mas_t[i] = mas_t[6+13-i];
}
for (int i = 0; i < K; i++)
{
mas_t[i] = 1 - mas_t[i];
mas_t[i] = mas_t[i]/5.0
;
}
for (int i = 0; i < K; i++)
{
mas[i] = mas[i] / N;
}
for (int i = 0; i < K; i++)
{
X2 += Math.Pow((mas[i] - mas_t[i]) / mas_t[i], 2);
}
Double ss1 = 0, ss2 = 0; ;
for (int i = 0; i < K; i++)
{
ss1 += mas[i];
ss2 += mas_t[i];
}
label10.Text = "";
label10.Text += "\n сума згенерованих імовірностей = " + (ss1).ToString("0.00000");
label10.Text += "\n сума теоретичних імовірностей = " + ss2.ToString("0.00000");
label7.Text = "Згенеровано пар рівномрно розподілених чисел " + k.ToString() + "\nЗгенервано за нормальним законим" + N.ToString();
}
if (radioButton2.Checked)
{
int index;
for (int i = 0; i < N; i++)
{
G[0, i] = -Math.Log(1-(Convert.ToDouble(rand(max_rand)) / Convert.ToDouble(max_rand)),Math.E) / ld;
Mx += G[0,i] / Convert.ToDouble(N);
}
for (int i = 0; i < N; i++)
{
Sx += Math.Pow(G[0, i] - Mx, 2) / Convert.ToDouble(N - 1);
}
min = 100;
max = -100;
for (int i = 0; i < N; i++)
{
if (min > G[0, i]) min = G[0, i];
if (max < G[0, i]) max = G[0, i];
}
Double dX = max / Convert.ToDouble(K);
for (int i = 0; i < N; i++)
{
index = (int)(G[0, i] / dX);
if (index >= K) index = K-1;
mas[index]++;
}
for (int i = 0; i < K; i++)
{
mass[i] = (i * dX + dX / 2.0).ToString();
}
int ii = 0;
min = 0.00057220623;
max = 1156.03585182;
// min = 0;
// max = -Math.Log(1.0 - (Convert.ToDouble(max_rand-1))/Convert.ToDouble(max_rand), Math.E) / ld;
for (Double i = min; i < max; i += max / Convert.ToDouble(K * 2))
{
i += max / Convert.ToDouble(K * 2);
if (ii < K)
// mas_t[ii] = 1 - (Math.Pow(Math.E, -(Convert.ToDouble(i + max_rand / 24.0) / Convert.ToDouble(max_rand))*ld));
mas_t[ii] = Math.Exp(-ld * i);
ii++;
}
Double ss1 = 0, ss2 = 0; ;
for (int i = 0; i < K; i++)
{
ss1 += mas[i];
ss2 += mas_t[i];
}
label10.Text = "";
label10.Text += "\n сума згенерованих імовірностей = " + (ss1/N).ToString("0.00000");
label10.Text += "\n сума теоретичних імовірностей = " + ss2.ToString("0.00000");
for (int i = 0; i < K; i++)
{
mas[i] = mas[i] / N;
}
for(int i=0;i<K;i++)
{
X2 += Math.Pow((mas[i] - mas_t[i]) / mas_t[i], 2);
}
}
label6.Text = "Mx = " + Mx.ToString("0.00000") + "\nб = " + Sx.ToString("0.00000");
Double t2 = 2.179;
Double di1 = Mx - t2 * Math.Pow(Sx, 1.0 / 2.0) / Math.Pow(K, 1.0 / 2.0);
Double di2 = Mx + t2 * Math.Pow(Sx, 1.0 / 2.0) / Math.Pow(K, 1.0 / 2.0);
label6.Text += "\nДовірчи інтервал для Mx = (" + di1.ToString("0.00000") + " ; " + di2.ToString("0.00000") + ") ";
Double t1 = 24.72;
Double t11 = 4.575;
Double di21 = 11.0 * Sx / t1;
Double di22 = 11.0 * Sx / t11;
label6.Text += "\nДовірчи інтервал для б = (" + di21.ToString("0.00000") + " ; " + di22.ToString("0.00000") + ") ";
label6.Text += "\nX2 = " + X2.ToString("0.00000");
if(X2<X2_teor)
label6.Text += "\n"+X2.ToString("0.00000") + ">" + X2_teor.ToString("0.00000") + " => якість генератора задовільна ";
else
label6.Text += "\n" + X2.ToString("0.00000") + "<" + X2_teor.ToString("0.00000") + " => якість генератора НЕзадовільна ";
GraphPane pane = zedGraphControl1.GraphPane;
// Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
pane.CurveList.Clear();
BarItem curve = pane.AddBar("Гістограма", null, mas, Color.Green);
BarItem curve_t = pane.AddBar("Гістограма", null, mas_t, Color.Red);
// Настроим ось X так, чтобы она отображала текстовые данные
pane.XAxis.Type = AxisType.Text;
// Уставим для оси наши подписи
pane.XAxis.Scale.TextLabels = mass;
pane.XAxis.Title.Text = "Згенеровані числа";
pane.YAxis.Title.Text = "Кількість чисел в проміжку";
pane.Title.Text = "";
// Вызываем метод AxisChange (), чтобы обновить данные об осях.
zedGraphControl1.AxisChange();
// Обновляем график
zedGraphControl1.Invalidate();
// for (Int64 i = 0; i < N; i++)
// textBox7.Text += G[i].ToString() + " ";
}