Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / 1 / lab_1.docx
Скачиваний:
0
Добавлен:
12.02.2026
Размер:
1.19 Mб
Скачать

Приложение 2.

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