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

Лабы / 1 / lab1_1

.py
Скачиваний:
0
Добавлен:
12.02.2026
Размер:
11.15 Кб
Скачать
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_1.xlsx"
op = open(data_xlsx, 'w+')
#количество значений в выборке 
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)
# заполняем массивы величинами с распределением 
for i in range(N1):
    x1[i] = m.sqrt(z1[i]*9)
for i in range(N2):
    x2[i] = m.sqrt(z2[i]*9)
for i in range(N3):
    x3[i] = m.sqrt(z3[i]*9)
# массив массивов 
dt = [x1, x2, x3]
#формируем график
plt.figure(1)
for i in range(0,3):
    plt.subplot(3,1,i+1) #выделяем раздел
    k= int(1+3.22*m.log10(N[i])) #считаем поличесто интервалов гистограммы
    x = sp.Symbol('x') #пишем что х это х
    function_y = sp.sympify('x/4.5') # задаем вид y, который зависит от х
    interval = np.linspace(0.0, 3.0, 100) #задаем интервал (min,max,n)
    y_values = [function_y.subs(x, value) for value in interval] #Создаём массив со значениями у
    plt.plot(interval,y_values,label='Теоретическая плотность вероятности', color='red') #отображаем функцию
    sb.distplot(dt[i], bins=k, kde=True, kde_kws={'bw_adjust': 1.6}, label='Практическая плотность вероятности') #отображаем практический график
    plt.legend() # настраиваем свойство отображения имен графиков
    plt.title(f'Для случая N = {N[i]}') # Задаем заголовок
#выводим функцию распределения
plt.figure(2)
for g in range(0,3):
    plt.subplot(3,1,g+1)
    F = np.empty(30)
    #Цикл дальше для каждого значения от 0 до 3 с интервалом 0.1 оценивает насколько много значений есть меньше чем это число
    for i in range(0,30):
        Temp = 0
        for j in range(0, N[g]):
            if (dt[g][j]<(i/10)):
                Temp+=1
        F[i] = Temp/N[g]
    x = sp.Symbol('x') #пишем что х это х
    function_y = sp.sympify('x^2/9') # задаем вид y, который зависит от х
    interval = np.linspace(0.0, 3.0, 30) #задаем интервал (min,max,n)
    y_values = [function_y.subs(x, 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