Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import matplotlib.pyplot as plt
- import math
- rng = np.random.default_rng() #рандом генератор
- a = float(input("Введите a: "))
- b = float(input("Введите b: "))
- n = int(input("Введите n: "))
- s = [] #массив R большое
- sum_s = 0
- sum_sq = 0
- for i in range(n): #массив R большое
- rand_num = a + (b - a) * rng.random()
- s.append(rand_num)
- sum_s += rand_num
- sum_sq += rand_num ** 2
- s.sort() #сортирует по возрастанию
- M = sum_s / n
- sq_M = sum_sq / n
- teor_M = (a + b) / 2
- DR = sq_M - M ** 2
- teor_DR = ((b - a) ** 2) / 12
- S = math.ceil(1 + 3.322 * math.log10(n)) #Правило Стёрджеса
- h = (b - a) / S #шаг
- npi = n / S #н пи ай из формулы
- x2 = 0
- nums = []
- i = a
- num = 0
- while i + 0.1 < b: #ошибка с плавающей запятой. чтобы не было доп. интревала
- if len(s) > 0 and i < s[0] < i + h: #считаем количество значений R в интервале
- num += 1
- s.pop(0)
- else: #если значения в интервале закончились высчитываем хи квадрат, добавляем количество R в массив nums и увеличиваем i на шаг, т.е. переходим к след. интервалу
- x2 += ((num - npi) ** 2) / npi
- nums.append(num)
- num = 0
- i += h
- fig, ax = plt.subplots()
- x = np.linspace(a, b, S)
- ax.plot(x, nums)
- print(f' k: {S - 1} \n Xи^2: {x2} \n'
- f' Расчетное математическое ожидание: {M} \n '
- f'Теоретическое математическое ожидание: {teor_M} \n'
- f' Расчетная дисперсия: {DR} \n'
- f' Теоретическая дисперсия: {teor_DR}')
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement