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

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

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