Дисциплина:
Раздел:
Выполнил:

Математическая статистика

Имитационное моделирование

ЧГУ, матфак, 5 курс студент Павлов.С.А.

www.domath.ru

Исследование генеральной совокупности

>    restart;

>    with(plots):#подключим пакеты: пакет plots для построения графических объектов
with(stats);#stats - пакет функций по работе со стат. данными и
with(statplots);#пакет statplots пакет для построения стат. графики

Ряд распределений

>    N:=15:#зададим параметр N

>    #закон распределения дискретной случайной величины
#возможные значения величины и соот. им вероятности зададим отдельно друг от друга

>    x:=array(1..4,[-8+0.1*N,2.5+0.25*N,4+0.3*N,5+0.45*N]);
p:=array(1..4,[(1+N)/(5*N+8),(2+N)/(5*N+8),(2*N)/(5*N+8),(5+N)/(5*N+8)]);

Многоугольник распределений вероятностей

>   

r:=polygonplot([[x[1],p[1]],[x[2],p[2]],[x[3],p[3]],[x[4],p[4]]]):
display(r);

#данная функция строит многоугольник распределения вероятностей, ниже графический объект объявим как некоторую переменную r, функция display выводит на экран созданныей объект r

 

Функция распределения вероятностей

>    #зададим процедуру, зав. от двух параметров (a,n)
#данная процедура необходима для суммирования элементов массива размерности n

>    summary:=proc(a,n)
                 local s::float, i::int;
# в начале цикла сумма равна 0
s:=0:          
for i from 1 to n
                 do
                  s:=s+a[i];#внутри цикла происходит накапливание суммы
end do;
#на выходе процедуры параметр s равен сумме элементов массива a
end proc:
                  

>    #здесь в цикле реализации процедуры summary(p,i).
#вычисление значений функции распределения дискретной случайной величины

>    for i from 1 to 4
                  do
                     f:=summary(p,i);
                     r[i]:=f;
end do:
 

>    #зададим функ. распред. сл. вел. как кусочно-линейную

>    F1:=x->piecewise(

x<=x[1],              0,
x[1]<x and x<=x[2],r[1],
x[2]<x and x<=x[3],r[2],
x[3]<x and x<=x[4],r[3],
x>x[4],r[4]
):

Вычисление характеристик данного распределения

>    #массив характеристик случайной величины, которые следует вычислить
mas:=Array(1..11,[

математическое_ожидание_M[X],
дисперсия,
среднеквадратическое_отклонение,
коэффициент_вариаций,
коэффициент_симметрий,
медиана,
начальный_момент_порядка,
центральный_момент_порядка,
коэффициент_ассиметрии,
Коэффициент_эксцесса,
дифференциальная_энтропия

]):

>    #процедура вычисления момента k-ого порядка для дискр. случ. величин  

>    proc_dis:=proc(k,m,t);
       add((x[i]-m)^k*t[i],i=1..4);
end proc;

proc_dis := proc (k, m, t) add((x[i]-m)^k*t[i],i = 1 .. 4) end proc

>    #процедура от трех параметров 1,0 и p

>    M:=proc_dis(1,0,p):
#среднеквад. отклонение по определению
sigma:=sqrt(proc_dis(2,M,p)):

>    #вычисление остальных характеристик
#и вывод на экран полученных результатов

>    print(mas[1],равно,M);
print(mas[2],равна,sigma^2);
print(mas[3],равно,sigma);
print(mas[4],равен,sigma/M*100,процентов);

for i from 1 to 6
                     do
                        print(mas[7] ,i, равен,proc_dis(i,0,p));
                        print(mas[8] ,i, равен,proc_dis(i,M,p));

end do;

print(mas[9],равен,proc_dis(3,0,p)/sigma^3);
print(mas[10],равен,равен,proc_dis(4,0,p)/sigma^4-3);
print(mas[11],равна,-evalf(add(p[i]*ln(p[i]),i=1..4)));

>    #зададим объём выборки

>    M:=900:

#данная функция сначала реализует выборку заданного объёма
#а затем сортирует её по возрастанию

>    ran:=sort([stats[random,uniform](M)]):

>    #ниже заложен механизм имитационного моделирования,
#отрезок [0,1] разбиваем на четыре полуинтервала
#I1=[0,r[1]),I2=[r[1],r[2]),I3=[r[2],r[3]) и I4=[r[3],1]

#m1,m2,m3 и m4 - кол-ва значений выборки попавших в интервалы I1, I2, I3 и I4 соотв.-но
#перед началом обработки сами параметры являются нулевыми    

>    m1:=0: m2:=0:
m3:=0: m4:=0:

>    for j from 1 to M do

          if (ran[j]<r[1])
                                      then m1:=m1+1;
          end if;


          if (ran[j]>=r[1]) and (ran[j]<evalf(r[2]))
                                       then m2:=m2+1;
          end if;


          if (ran[j]<r[3]) and (ran[j]>=r[2])
                                        then m3:=m3+1;
          end if;


          if (ran[j]<=1) and (ran[j]>=r[3])
                                         then m4:=m4+1;
          end if;
end do;

>    #массив относительных частот зададим как массив

>    w:=array(1..4,[m1/M,m2/M,m3/M,m4/M]);

>    #цикл реализации процедуры summary(p,i).
#вычисление значений эмпирической функции

>    for i from 1 to 4
                  do
                     f[i]:=summary(w,i);
end do:

>    #зададим эмпирическую функцию распределения как кусочную

>    F2:=x->piecewise(

x<x[1],               0,
x[1]<x and x<=x[2],f[1],
x[2]<x and x<=x[3],f[2],
x[3]<x and x<=x[4],f[3],
x>x[4],f[4]
):


#функция plot отображает графики, ниже представлено графическое отображение теоретической и эмпирической функции
plot([F1(x),F2(x)],x=-10..15,
color=[red,green],style=[point, point],
numpoints=100,
legend=["Theoretical ","Empirical"]);

F2 := x -> piecewise(x < x[1],0,x[1] < x and x <= x[2],f[1],x[2] < x and x <= x[3],f[2],x[3] < x and x <= x[4],f[3],x[4] < x,f[4])

[Maple Plot]

>    #для вычисления характеристик воспользуемся процедурой
#вычисления характеристик эмпирического распределения

#ниже представлены вычисления характеристик выборки,
#аналогичны вычислениям характеристик теоретического распределения

>    M:=proc_dis(1,0,w):
sigma:=sqrt(proc_dis(2,M,w)):

>    #отображение результатов вычислений

>    print(выборочное_среднее,равно,M);
print(выборочная_дисперсия,равна,sigma^2);
print(выборочное,mas[3],равно,sigma);
print(выборочный,mas[4],равен,(sigma/M)*100,процентов);

for i from 1 to 6
                     do
                        print(выборочный,mas[7] ,i, равен,proc_dis(i,0,w));
                        print(выборочный,mas[8] ,i, равен,proc_dis(i,M,w));

end do;

print(выборочный,mas[9],равен,proc_dis(3,0,w)/sigma^3);
print(выборочный,mas[10],равен,proc_dis(4,0,w)/sigma^4-3);
print(выборочная,mas[11],равна,-evalf(add(ln(w[i])*w[i],i=1..4)));

`выборочное_среднее`, `равно`, 6.127500001

`выборочная_дисперсия`, `равна`, 39.08770208

`выборочное`, `среднеквадратическое_отклонение`, `равно`, 6.252015841

`выборочный`, `коэффициент_вариаций`, `равен`, 102.0320823, `процентов`

`выборочный`, `начальный_момент_порядка`, 1, `равен`, 6.127500001

`выборочный`, `центральный_момент_порядка`, 1, `равен`, -.2e-8

`выборочный`, `начальный_момент_порядка`, 2, `равен`, 76.63395833

`выборочный`, `центральный_момент_порядка`, 2, `равен`, 39.08770208

`выборочный`, `начальный_момент_порядка`, 3, `равен`, 631.5103646

`выборочный`, `центральный_момент_порядка`, 3, `равен`, -317.0840041

`выборочный`, `начальный_момент_порядка`, 4, `равен`, 7341.204363

`выборочный`, `центральный_момент_порядка`, 4, `равен`, 4897.630672

`выборочный`, `начальный_момент_порядка`, 5, `равен`, 72509.11297

`выборочный`, `центральный_момент_порядка`, 5, `равен`, -57053.94043

`выборочный`, `начальный_момент_порядка`, 6, `равен`, 828033.0739

`выборочный`, `центральный_момент_порядка`, 6, `равен`, 746831.0948

`выборочный`, `коэффициент_ассиметрии`, `равен`, 2.584165199

`выборочный`, `Коэффициент_эксцесса`, `равен`, 1.804929667

`выборочная`, `дифференциальная_энтропия`, `равна`, 1.351043179