СОИ_Лаба_3
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
доцент |
|
|
|
Е.А. Бакин |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №3
|
Анализ закона распределения случайной величины
|
по курсу: Статистическая обработка информации |
|
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
4616 |
|
|
|
А.В.Павлов |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Цель работы
Изучение методов оценки интегрального закона распределения и плотности вероятности непрерывной случайной величины, анализ сходимости эмпирических законов распределения к истинным и получение навыков применения современных методов экспресс анализа распределения по выборочным значениям.
Вариант 7
7 |
Равномерное |
a = -10, b = 10 |
Рисунок 1 – Графики плотности и функции вероятности непрерывного распределения
Листинг
Импорт библиотек для построение графика и вычислений
Список N из начальных данных
Функция main
Цикл от I до 4
Создание массива данных непрерывного распределения размером 2*N
Подсчет интегральной функции с помощью scipy
Подсчет M
Цикл от z до длинны M
Подсчет настоящих ИФ
Добавление данных в массив
Подсчет настоящей сигмы
Подсчет моментов м1 и м2
Подсчет v1 и v2 через заданную формулу
Подсчет коэффициента симметрии и эксцесса через формулу
Подсчет квадрата ошибки
Подсчет эмпирической интегральной функции
Рисование графиков
График 1 – плотность, График 2 – Имперская и интегральная функция
График 3 – График ошибки, График 4 - Диаграмма Каллена-Фрея
Листинг программы
import numpy as np
import scipy.stats as st
import matplotlib.pyplot as plt
import math
from scipy import integrate
import statsmodels.api as sm
N=[5,7,10,14]
def main():
v1=[]
v2=[]
Y1=[]
Y2=[]
eh=[]
ec=[]
for i in range(4):
func=1/(10+10)
#X= np.random.uniform(-10,10,size=2**N[i])
X = np.array(st.uniform.rvs(-10,20, size=2**N[i]))
XS= np.sort(X)
CDF=st.uniform.cdf(XS,-10,20)
lens=len(X)
F2 = np.array(range(lens))/float(lens)
M = 1 + round(math.log2(len(X)))
interval=[]
for z in range(M):
xx=20/M
xxs=-10+xx*z
interval.append(xxs)
interval.append(10)
funcx=[]
sss=np.linspace(-10,10,M)
NS=np.arange(1,2**N[i])
summs=0
sigma1=[]
for q in range(M):
xmax=[]
xmin=[]
for x in range(len(X)):
if XS[x]>interval[q] and XS[x]<interval[q+1]:
xmax.append(XS[x])
#funcx.append(0.05/(xmax[-1]-xmax[0]))
funcx.append((len(xmax))/(interval[q+1]-interval[q])/len(X))
sigms=(1-(funcx[q]/(1/M)))**2
summs=+sigms
eh.append(summs)
#funcx.append(NS/len(X))
interval.pop(0)
sigma_true=st.uniform.std(-10,20)
m1=st.uniform.moment(3,-10,20)
m2=st.uniform.moment(4,-10,20)
v1.append(m1/sigma_true**3)
v2.append(m2/sigma_true**4)
sigma= np.std(X,axis=0)
B3=st.moment(X,moment=3)
Y1.append(B3/sigma**3)
B4=st.moment(X,moment=4)
Y2.append(B4/sigma**4)
summ=0
for x in range(M):
sk=(1-(sigma/sigma_true))**2
summ+=sk
ecdf = sm.distributions.ECDF(X)
x = np.linspace(min(X), max(X))
y = ecdf(x)
ecdfx=ecdf.y
ecdfx=np.delete(ecdfx,0)
ECDF=np.array(np.sum(X/np.sum(X)))
print(ECDF)
XSS=np.array(XS)
ras= ECDF - CDF
print(ras)
ec.append(max(np.abs(ras)))
fig = plt.figure()
ax1 = fig.add_axes([0,1.2,1,1])
ax1.grid(True, color = 'g', lw = 0.2)
ax1.set_xlim(-10,10)
ax2 = fig.add_axes([0,0,1,1])
ax2.grid(True, color = 'g', lw = 0.2)
ax2.set_xlim(-10,10)
if i>=1:
MM=M
ax1.set_title(('График при плотности при N=', len(X)), color = 'black')
ax1.set_ylabel('f(x)')
ax1.axhline(func, color = 'g',)
ax1.step(sss,funcx,where ='mid',lw=4)
ax1.set_ylim(0,0.1)
print(len(CDF))
F3=np.arange(-10,10)
#plt.bar(XS,F2, alpha=0.8)
ax2.set_title(('График инт. и эмп интегральной функций при N= ',len(X)), color = 'black')
ax2.set_ylabel('F(x)')
hist = ax2.hist(XS, bins = len(CDF), cumulative='True',histtype='step',lw=4,density = 'True',range=(-10, 10))
ax2.plot(XS,CDF,lw=4)
#ax2.plot(ecdf.x,ecdf.y)
ax4 = fig.add_axes([0,-2.4,1,1])
ax4.set_title('График ошибки', color = 'black')
ax4.grid(True, color = 'g', lw = 0.2)
ax4.loglog(t_y,eh, basex=2,basey=2,label='Eh')
ax4.loglog(t_y,ec, basex=2,basey=2,label='Ec')
ax4.legend(loc='upper right')
ax5 = fig.add_axes([0,-3.6,1,1])
ax5.grid(True, color = 'g', lw = 0.2)
ax5.set_ylim(2.5,1)
ax5.set_xlim(-0.2,0.2)
ax5.set_title('Диаграмма Каллена-Фрея', color = 'black')
for i in range(4):
ax5.scatter( Y1[i]**2,Y2[i],s=200, label=('При объеме выборки=',2**N[i]))
ax5.legend(loc='upper right')
plt.show()
main()
Результат работы
Рисунок 2- Результат работы
Вывод:
В ходе лабораторной работы, я научился анализировать закон случайной величины. Так же строить эмпирический график интегральной функции и плотности вероятности. С помощью диаграммы Каллена-Фрея нашел истинную принадлежность распределения к равномерное, что соответствует истине, а значит работа выполнена правильно