Файл: Новосибирский государственный технический университет.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.11.2023
Просмотров: 66
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕНОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТРасчётно-графическая работаМоделирование случайных чисел с заданным законом распределения.Проверка гипотезВыполнили: (Бригада 2):Ганиев РоманДмитриев НиколайПоздняков НикитаГруппа: АВТ-212Преподаватель: Ландовский В.В.НОВОСИБИРСК2023ЗаданиеРазработать программу, позволяющую: - получать случайные числа с заданным законом распределения заданным методом; - для полученной выборки (одной или двух в зависимости от варианта) строить гистограмму; - заданным критерием проверять гипотезу о том, что полученную выборку действительно можно считать распределенной исходному закону (проверить качество случайных чисел). В некоторых вариантах проверить, что две выборки имеют один закон (гипотеза об однородности выборок).Закон распределения: f(x) = -0,5x + 1,5 на интервале (1;3), метод усечения, критерий Колмогорова, выборка одна, проверка гипотезы о совпадении выборочного распределения с теоретическим.Описание используемых алгоритмов
Полученные результатыСгенерирована выборка, содержащая 500 значений, подходящих под закон распределения. Критическое значение - 0,06; контрольная величина – 0,04, далее необходимо интерпретировать полученные результаты.В тесте Колмогорова используются две гипотезы:
-
Генерация выборки объёмом N (задаётся пользователем) числами в диапазоне [0, 1]. Сгенерированные числа растягиваются на заданный интервал (1, 3) путем умножения числа на длину интервала и +1. -
Методом усечения при генерации выборки будут выбираться числа, которые находятся ниже значения заданной функции в данном интервале и попадающие в этот интервал (предварительно пользователь задаёт K интервалов). Таким образом будет сгенерирован массив случайных чисел с данным законом распределения. -
Далее в выборке подсчитываются точки в каждом интервале и строится гистограмма, отображающая распределение. -
Проверка гипотезы о совпадении выборочного распределения с теоретическим по критерию Колмогорова заключается в том, что сравнивается максимум модуля разности эмпирической и теоретической функций распределения. Для этого в процессе подсчёта точек в интервалах, сохраняется их количество в массиве, откуда потом берётся максимальное значение, из которого вычитается максимальное значение теоретической функции. -
П
оученное значения сравнивается с критическим значением, которое высчитывается по формуле: .
Полученные результатыСгенерирована выборка, содержащая 500 значений, подходящих под закон распределения. Критическое значение - 0,06; контрольная величина – 0,04, далее необходимо интерпретировать полученные результаты.В тесте Колмогорова используются две гипотезы:
-
Нулевая H 0; -
Альтернативная H A;
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { double[] arr; double[] rasp_arr; int N, K; double f(double x) { double y = -0.5 * x + 1.5; return y; } public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void chart1_Click(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { double G = N; chart1.Series[0].Points.Clear(); N = Convert.ToInt32(textBox1.Text); K = Convert.ToInt32(textBox2.Text); rasp_arr = new double[K]; int count = 0; for (int i = 0; i < K; i++) { double left = 1 + 0.2 * i; double right = 1 + 0.2 * (i + 1); for (int j = 0; j < N; j++) { if ((arr[j] >= left) && (arr[j] <= right)) { count++; } } chart1.Series[0].Points.AddXY(left, count/(N * 0.2)); rasp_arr[i] = count / (N * 0.2); count = 0; } double sum = arr.Sum(); double sr = sum / N; textBox3.Text = String.Format("{0}", sr); double num = arr[0]; int max_frq = 1; int frq; for(int i = 0; i < N - 1; i++) { frq = 1; for(int k = i+1; k < N; k++) { if (arr[i] == arr[k]) { frq += 1; } } if(frq > max_frq) { max_frq = frq; num = arr[i]; } } textBox4.Text = String.Format("{0}", num); double disp; double sr_kv = 0; for (int i = 0; i < N; i++) { sr_kv = sr_kv + Math.Pow((arr[i] - sr), 2); } disp = sr_kv / (N - 1); textBox5.Text = String.Format("{0}", disp); double krit = 1.36 / Math.Sqrt(N); double exp_max = f(1); double ctrl = Math.Abs(rasp_arr.Max() - exp_max); textBox6.Text = String.Format("{0}", ctrl); textBox7.Text = String.Format("{0}", krit); } private void label1_Click(object sender, EventArgs e) { } private void label3_Click(object sender, EventArgs e) { } private void label7_Click(object sender, EventArgs e) { } private void label8_Click(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { N = Convert.ToInt32(textBox1.Text); K = Convert.ToInt32(textBox2.Text); double f(double x) { double y = -0.5 * x + 1.5; return y; } Random a = new Random(); double r1; double rx; double ry; arr = new double[N]; for (int i = 0; i < N; i++) { r1 = a.NextDouble(); ry = a.NextDouble(); rx = r1 * 2 + 1; while (ry > f(rx)) { r1 = a.NextDouble(); ry = a.NextDouble(); rx = r1 * 2 + 1; } arr[i] = rx; } } } } |