отчёт по Модел систем. Моделирование случайных чисел
Скачать 84.25 Kb.
|
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «Национальный исследовательский ядерный университет «МИФИ» Обнинский институт атомной энергетики Отделение интеллектуальных кибернетических систем ОТЧЁТ по лабораторной работе № 2 курс: “Моделированию систем” тема: “ Моделирование случайных чисел ” Выполнил: Пауков И.С Группа: ИС-Б19 Проверила: Гулина О.М. Обнинск, 2022 Задача: Смоделировать случайную величину ξ с заданной функцией распределения: Используемые инструменты: Python 3.6 Теорема: Случайная величина ξ, определенная на (a,b) и удовлетворяющая уравнению a, или F(ξ)= γ, имеет плотность распределения f(x). Согласно условию нормировки: 0 10 |0 10 → a=10 ξ fξ( x)=10 x9 ; ∫0 fξ(x)dx=γ ; u10|ξ0=γ ; γ=ξ10 ; ξ=γ(1/10) Количество интервалов считается по формуле: 𝑟 = (1 + 3,3 lg(𝑛)) Вероятность попадания в i-й интервал считается по формуле: ∆= = 𝑎 + 𝑖∆ = 𝑎 + (𝑖 − 1)∆ 𝑝𝑖 = 𝐹( ) – 𝐹( ) Алгоритм: #python 3.6 from math import * Num=2500 #число элементов r=0#кол-во интервалов p=0#теоретическая вероятность попадания в каждый интервал array=[] #массив псевдослучайных чисел newarray=[]#новый массив VerU=[] p_i =[] #количество попаданий в каждый интервал X2=0 #хи-квадрат def fraction(x): # функция для расчета дробной части return x - int(x) def fillArray(): # функция для заполнения массива y0=0.45864863 accrs=8 for i in range(Num): array.append(y0) y0=(10 ** -accrs)*int((10 ** accrs)*fraction(float(((1-y0) ** 3)*(10 ** accrs)))) #метод середины квадратов print("Массив заполнен псевдослучайными числами.") for i in range(Num): #по новой формуле заполняем массив newarray.append(array[i]**0.1) #Вероятность попадания случайной величины в i-ый интервал. I меняется от 1 до #r (количество интервалов, которое считается по формуле 𝑟 = (1 + 3,3 lg(𝑛)) def calc_pi(): print("Рассчет количества попаданий в каждый интервал.") global newarray, r, p r = int((1 + 3.3 * log10(Num))) p = float((1 / r)) print("Число интервалов", r) for i in range(r): #обнуляем p_i p_i.append(0) print("Распределение по интервалам:") for i in range(r): for j in range(r): if (newarray[j]>(i*p) and newarray[j]<((i+1)*p)): p_i[i]+=1 for i in range(r): print(p_i[i], end = ', ') def calc_X2(): print("Рассчет Х2.") X2 = 0 tver=[] for i in range(r): tver.append((((i+1)/r)**10)-(i/r)**10) for i in range(r): X2+=((p_i[i]-(Num*tver[i])) ** 2)/(Num*tver[i]) print("X2 = ", X2) def show(): n=int(input("Вывести последовательность до: ")) if n>Num: n=Num for i in range(n): print(newarray[i], end = ', ') fillArray() calc_pi() calc_X2() show() Результаты: Число интервалов 12 Распределение по интервалам: X2 = 4.213018302676952 При s = 11 и P ≥ 0.95 теоретическое значение χ2=4.58. Экспериментальное значение χ2 при γ0= 0.45864863 получилось 4.213018302676952. Выводы: В результате эксперимента с заданным законом распределения – была получена согласованность элементов выборки, состоящая из 2500 независимых элементов, с гипотезой о выбранном законе распределения подтверждается полученной оценкой: χ2 = 4.213018302676952 ≤ χ² = 4.58 где количество степеней свободы: s = 11 доверительная вероятность: P>0.95 |