Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / 1 / lab1_2

.py
Скачиваний:
0
Добавлен:
12.02.2026
Размер:
11.71 Кб
Скачать
import numpy as np
import math as m
import scipy as sci
import pandas as pd
from random import random
from statistics import mean, stdev as std, variance as var
import seaborn as sb
import matplotlib
import matplotlib.pyplot as plt
import sympy as sp
#берём файл
data_xlsx = "data_2.xlsx"
#количество значений в выборке
N1=50
N2=200
N3=1000
N=[N1,N2,N3]
#коэффициенты доверия
a1=0.1
a2=0.05
a3=0.01
#делаем массивы случайных значений
z1 = np.random.sample(N1)
z2 = np.random.sample(N2)
z3 = np.random.sample(N3)
#делаем пустые массивы
x1 = np.empty(N1)
x2 = np.empty(N2)
x3 = np.empty(N3)
#выделяем разделделаем массив с вероятностями
p = np.empty(5)
#заполняем его вероятностямии по формуле
for i in range(0,5):
    p[i] = (m.factorial(4)/(m.factorial(4-i)*m.factorial(i)))*m.pow(0.2,i)*m.pow(0.8,4-i)
#превращаем его в массив с интервалами вероятностей
for i in range(1,5):
    p[i]=p[i-1]+p[i]
#заполняем массив значениями с вероятностями
for i in range(0,N1):
    for j in range(0,5):
        if j==4: 
            x1[i] = 4
            break
        elif (z1[i]>p[j]): 
            continue
        else: 
            x1[i] = j
            break
#то же
for i in range(0,N2):
    for j in range(0,5):
        if j==4: 
            x2[i] = 4
            break
        elif (z2[i]>p[j]): 
            continue
        else: 
            x2[i] = j
            break
#то же
for i in range(0,N3):
    for j in range(0,5):
        if j==4: 
            x3[i] = 4
            break
        elif (z3[i]>p[j]): 
            continue
        else: 
            x3[i] = j
            break

dt=[x1,x2,x3]
plt.figure(1)
for g in range(0,3):
    plt.subplot(3,1,g+1)
    F=np.empty(5)
    F2=[0.4096,0.4096,0.1536,0.0256,0.0016]
    for i in range(0,5):
        for j in range(0,N[g]):
            if dt[g][j]==i:
                F[i]+=1
        F[i]=float(F[i]/N[g])
    ran = [0,1,2,3,4]
    plt.bar(ran, F, label='Практический', alpha=0.5, color = 'red')
    plt.bar(ran, F2, label='Теоретический', alpha=0.5, color = 'blue')
    plt.bar
    plt.legend() # настраиваем свойство отображения имен графиков
    plt.title(f'Плотность распределения для случая N = {N[g]}') # Задаем заголовок
plt.show()
plt.figure(2)
for g in range(0,3):
    plt.subplot(3,1,g+1)
    F = np.empty(500)
    #Цикл дальше для каждого значения от 0 до 3 с интервалом 0.1 оценивает насколько много значений есть меньше чем это число
    for i in range(0,500):
        Temp = 0
        for j in range(0, N[g]):
            if (dt[g][j]<(i/100)):
                Temp+=1
        F[i] = Temp/N[g]
    #x = sp.Symbol('x') #пишем что х это х
    #function_y = sp.sympify('((4!)/((4-x)!*(x)!))*0.2^x*0.8^(4-x)') # задаем вид y, который зависит от х (m.factorial(4)/(m.factorial(4-i)*m.factorial(i)))*m.pow(0.2,i)*m.pow(0.8,4-i)
    interval = np.linspace(0.0, 4.0, 500) #задаем интервал (min,max,n)
    y1 = np.linspace(0.0, 1.0, 100)
    y_values = [p[0] for x in y1] + [p[1] for x in y1] + [p[2] for x in y1] + [p[3] for i in y1] + [p[4] for i in y1]#[function_y.subs(x, int(value)) for value in interval] #Создаём массив со значениями у
    plt.plot(interval,y_values,label='Теоретическая функция распределения', color='red') #отображаем функцию
    plt.plot(interval,F,label='Практическая функция распределения', color='blue') #отображаем график со строк 59-64
    plt.legend() # настраиваем свойство отображения имен графиков
    plt.title(f'Для случая N = {N[g]}') # Задаем заголовок
plt.show()
#вычисляем мат ожидание
x1_mean = mean(x1)
x2_mean = mean(x2)
x3_mean = mean(x3)
#вычисляем дисперсию
x1_var = var(x1)
x2_var = var(x2)
x3_var = var(x3)
#вычисляем среднеквадратичное отклонение
x1_std = std(x1)
x2_std = std(x2)
x3_std = std(x3)
#считаем коэфф стьюдента
t11 = sci.stats.t.ppf(1-(a1/2),N1-1)
t21 = sci.stats.t.ppf(1-(a1/2),N2-1)
t31 = sci.stats.t.ppf(1-(a1/2),N3-1)
t12 = sci.stats.t.ppf(1-(a2/2),N1-1)
t22 = sci.stats.t.ppf(1-(a2/2),N2-1)
t32 = sci.stats.t.ppf(1-(a2/2),N3-1)
t13 = sci.stats.t.ppf(1-(a3/2),N1-1)
t23 = sci.stats.t.ppf(1-(a3/2),N2-1)
t33 = sci.stats.t.ppf(1-(a3/2),N3-1)
#считаем коэфф хи квадрат
xi111 = sci.stats.chi2.ppf((a1/2),N1-1)
xi211 = sci.stats.chi2.ppf((a1/2),N2-1)
xi311 = sci.stats.chi2.ppf((a1/2),N3-1)
xi121 = sci.stats.chi2.ppf((a2/2),N1-1)
xi221 = sci.stats.chi2.ppf((a2/2),N2-1)
xi321 = sci.stats.chi2.ppf((a2/2),N3-1)
xi131 = sci.stats.chi2.ppf((a3/2),N1-1)
xi231 = sci.stats.chi2.ppf((a3/2),N2-1)
xi331 = sci.stats.chi2.ppf((a3/2),N3-1)
#считаем коэфф хи квадрат
xi112 = sci.stats.chi2.ppf(1-(a1/2),N1-1)
xi212 = sci.stats.chi2.ppf(1-(a1/2),N2-1)
xi312 = sci.stats.chi2.ppf(1-(a1/2),N3-1)
xi122 = sci.stats.chi2.ppf(1-(a2/2),N1-1)
xi222 = sci.stats.chi2.ppf(1-(a2/2),N2-1)
xi322 = sci.stats.chi2.ppf(1-(a2/2),N3-1)
xi132 = sci.stats.chi2.ppf(1-(a3/2),N1-1)
xi232 = sci.stats.chi2.ppf(1-(a3/2),N2-1)
xi332 = sci.stats.chi2.ppf(1-(a3/2),N3-1)
#выводим всё в консоль
print('x1: \n N = ',N1,'\n x1 Мат.Ожидание = ',x1_mean,'\n x1 Дисперсия = ',x1_var,'\n x1 СКО = ',x1_std)

print('Для a = ', a1,'интервальная оценка среднего \n [',x1_mean-t11*(x1_var/m.sqrt(N1)),',',x1_mean+t11*(x1_var/m.sqrt(N1)),']')
print('интервальная оценка дисперсии \n [',x1_var*(N1-1)/xi111,',',x1_var*(N1-1)/xi112,']')

print('Для a = ', a2,'интервальная оценка среднего \n [',x1_mean-t12*(x1_var/m.sqrt(N1)),',',x1_mean+t12*(x1_var/m.sqrt(N1)),']')
print('интервальная оценка дисперсии \n [',x1_var*(N1-1)/xi121,',',x1_var*(N1-1)/xi122,']')

print('Для a = ', a3,'интервальная оценка среднего \n [',x1_mean-t13*(x1_var/m.sqrt(N1)),',',x1_mean+t13*(x1_var/m.sqrt(N1)),']')
print('интервальная оценка дисперсии \n [',x1_var*(N1-1)/xi131,',',x1_var*(N1-1)/xi132,']')

print('x2: \n N = ',N2,'\n x2 Мат.Ожидание = ',x2_mean,'\n x2 Дисперсия = ',x2_var,'\n x2 СКО = ',x2_std)

print('Для a = ', a1,'интервальная оценка среднего \n [',x2_mean-t21*(x1_var/m.sqrt(N2)),',',x2_mean+t21*(x1_var/m.sqrt(N2)),']')
print('интервальная оценка дисперсии \n [',x2_var*(N2-1)/xi211,',',x2_var*(N2-1)/xi212,']')

print('Для a = ', a2,'интервальная оценка среднего \n [',x2_mean-t22*(x1_var/m.sqrt(N2)),',',x2_mean+t22*(x1_var/m.sqrt(N2)),']')
print('интервальная оценка дисперсии \n [',x2_var*(N2-1)/xi221,',',x2_var*(N2-1)/xi222,']')

print('Для a = ', a3,'интервальная оценка среднего \n [',x2_mean-t23*(x1_var/m.sqrt(N2)),',',x2_mean+t23*(x1_var/m.sqrt(N2)),']')
print('интервальная оценка дисперсии \n [',x2_var*(N2-1)/xi231,',',x2_var*(N2-1)/xi232,']')

print('x3: \n N = ',N3,'\n x3 Мат.Ожидание = ',x3_mean,'\n x3 Дисперсия = ',x3_var,'\n x3 СКО = ',x3_std)

print('Для a = ', a1,'интервальная оценка среднего \n [',x3_mean-t31*(x1_var/m.sqrt(N3)),',',x3_mean+t31*(x1_var/m.sqrt(N3)),']')
print('интервальная оценка дисперсии \n [',x3_var*(N3-1)/xi311,',',x3_var*(N3-1)/xi312,']')

print('Для a = ', a2,'интервальная оценка среднего \n [',x3_mean-t32*(x1_var/m.sqrt(N3)),',',x3_mean+t32*(x1_var/m.sqrt(N3)),']')
print('интервальная оценка дисперсии \n [',x3_var*(N3-1)/xi321,',',x3_var*(N3-1)/xi322,']')

print('Для a = ', a3,'интервальная оценка среднего \n [',x3_mean-t33*(x1_var/m.sqrt(N3)),',',x3_mean+t33*(x1_var/m.sqrt(N3)),']')
print('интервальная оценка дисперсии \n [',x3_var*(N3-1)/xi331,',',x3_var*(N3-1)/xi332,']')
#создаём таблицы с данными
df_1 = pd.DataFrame({"Размер выборки": [50, 200, 1000], "Матожидание": [x1_mean, x2_mean, x3_mean], "Дисперсия": [x1_var, x2_var, x3_var], "СКО": [x1_std,x2_std,x3_std]})

df_2 = pd.DataFrame({"Размер выборки": [50, 200, 1000], "Нижняя граница оценки среднего": [x1_mean-t11*(x1_var/m.sqrt(N1)), x2_mean-t21*(x1_var/m.sqrt(N2)), x3_mean-t31*(x1_var/m.sqrt(N3))], "Верхняя граница оценки среднего": [x1_mean+t11*(x1_var/m.sqrt(N1)), x2_mean+t21*(x1_var/m.sqrt(N2)), x3_mean+t31*(x1_var/m.sqrt(N3))], "Нижняя граница оценки дисперсии": [x1_var*(N1-1)/xi111,x2_var*(N2-1)/xi211,x3_var*(N3-1)/xi311], "Верхняя граница оценки дисперсии": [x1_var*(N1-1)/xi112,x2_var*(N2-1)/xi212,x3_var*(N3-1)/xi312]})

df_3 = pd.DataFrame({"Размер выборки": [50, 200, 1000], "Нижняя граница оценки среднего": [x1_mean-t12*(x1_var/m.sqrt(N1)), x2_mean-t22*(x1_var/m.sqrt(N2)), x3_mean-t32*(x1_var/m.sqrt(N3))], "Верхняя граница оценки среднего": [x1_mean+t12*(x1_var/m.sqrt(N1)), x2_mean+t22*(x1_var/m.sqrt(N2)), x3_mean+t32*(x1_var/m.sqrt(N3))], "Нижняя граница оценки дисперсии": [x1_var*(N1-1)/xi121,x2_var*(N2-1)/xi221,x3_var*(N3-1)/xi321], "Верхняя граница оценки дисперсии": [x1_var*(N1-1)/xi122,x2_var*(N2-1)/xi222,x3_var*(N3-1)/xi322]})

df_4 = pd.DataFrame({"Размер выборки": [50, 200, 1000], "Нижняя граница оценки среднего": [x1_mean-t13*(x1_var/m.sqrt(N1)), x2_mean-t23*(x1_var/m.sqrt(N2)), x3_mean-t33*(x1_var/m.sqrt(N3))], "Верхняя граница оценки среднего": [x1_mean+t13*(x1_var/m.sqrt(N1)), x2_mean+t23*(x1_var/m.sqrt(N2)), x3_mean+t33*(x1_var/m.sqrt(N3))], "Нижняя граница оценки дисперсии": [x1_var*(N1-1)/xi131,x2_var*(N2-1)/xi231,x3_var*(N3-1)/xi331], "Верхняя граница оценки дисперсии": [x1_var*(N1-1)/xi132,x2_var*(N2-1)/xi232,x3_var*(N3-1)/xi332]})
#импортируем всё в эксель
with pd.ExcelWriter(data_xlsx) as writer:
    df_1.to_excel(writer, sheet_name='Общие данные', index=False)
    df_2.to_excel(writer, sheet_name='a = 0.1', index=False)
    df_3.to_excel(writer, sheet_name='a = 0.05', index=False)
    df_4.to_excel(writer, sheet_name='a = 0.01', index=False)
    pd.DataFrame(x1).to_excel(writer, sheet_name='Выборка 50', header=None, index=False)
    pd.DataFrame(x2).to_excel(writer, sheet_name='Выборка 200', header=None, index=False)
    pd.DataFrame(x3).to_excel(writer, sheet_name='Выборка 1000', header=None, index=False)
Соседние файлы в папке 1