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

ГБОУ Колледж «ЦАРИЦЫНО»

Отделение управления и информационных технологий

Теория Вероятностей

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

Тема 1:

Моделирование и визуализация

Случайных данных

Студентка: Зубкова Наталья

Группа: КС 2 – 1

Преподаватель: В.В. Мещеряков

Задание 1.1. Модуль MCG_std.py

#Листинг 1.1. Модуль MCG_std.py

import numpy as np

#x0 - стартовая точка

#N - число генерируемых чисел

def MCG_std(a,c,m,x0,N):

xi = x0

x = np.zeros(N); x = x.astype(np.int32)

r = np.zeros(N)

for k in range(N):

xi = (a*xi + c) % m

x[k] = xi

r[k] = xi/m

return x, r

if __name__ == "__main__":

a = 13; c = 0; m = 31; x0 = 1; N = 12;

#a = 7**5; c = 0; m = 2**31 - 1; x0 = 1; N = 10;

x, r = MCG_std(a,c,m,x0,N)

print('x = ',x)

print('r = ',np.round(r,4))

Результат:

runfile('C:/Users/150114/Desktop/07.12/Модуль MCG_std.py', wdir='C:/Users/150114/Desktop/07.12')

x = [13 14 27 10 6 16 22 7 29 5 3 8]

r = [ 0.4194 0.4516 0.871 0.3226 0.1935 0.5161 0.7097 0.2258 0.9355

0.1613 0.0968 0.2581]

Задание 1.2

#Листинг 1.2. Скрипт MCG_std_subplot.py

import MCG_std as MC

import numpy as np

import matplotlib.pyplot as plt

a = 13; c = 0; m = 31; x0 = 1; N = 100;

#a = 7**5; c = 0; m = 2**31 - 1; x0 = 1; N = 100;

x, r = MC.MCG_std(a,c,m,x0,N);

fig = plt.gcf()

fig.set_size_inches(14,5)

plt.subplot(131)

plt.plot(np.linspace(1,N,N),r, 'b.' )

plt.xlabel('$n$'),

plt.ylabel('$r$')

plt.subplot(132)

r1 = r[0:N/2]; r2 = r[N/2:N + 1]

plt.plot(r1,r2, 'b.' )

plt.xlabel('$r_1$'),

plt.ylabel('$r_2$')

plt.subplot(133)

N = 60

x, r = MC.MCG_std(a,c,m,x0,N);

r1 = r[0:N/2]; r2 = r[N/2:N + 1]

plt.plot(r1,r2, 'b.' )

plt.xlabel('$r_1$'),

plt.ylabel('$r_2$')

Результат:

И математическая статистика - student2.ru

Мой пример

#Листинг 1.2. Скрипт MCG_std_subplot.py

import MCG_std as MC

import numpy as np

import matplotlib.pyplot as plt

a = 135; c = 8; m = 55; x0 = 1; N = 50;

#a = 7**5; c = 0; m = 2**31 - 1; x0 = 1; N = 100;

x, r = MC.MCG_std(a,c,m,x0,N);

fig = plt.gcf()

fig.set_size_inches(14,5)

plt.subplot(131)

plt.plot(np.linspace(1,N,N),r, 'b.' )

plt.xlabel('$n$'),

plt.ylabel('$r$')

plt.subplot(132)

r1 = r[0:N/2]; r2 = r[N/2:N + 1]

plt.plot(r1,r2, 'b.' )

plt.xlabel('$r_1$'),

plt.ylabel('$r_2$')

plt.subplot(133)

N = 60

x, r = MC.MCG_std(a,c,m,x0,N);

r1 = r[0:N/2];

r2 = r[N/2:N + 1]

plt.plot(r1,r2, 'b.' )

plt.xlabel('$r_1$'),

plt.ylabel('$r_2$')

Результат.

И математическая статистика - student2.ru

Задача 2.1

#Листинг 2.2. Скрипт MCG_rnd_subplot.py

import MCG_rnd as MC

import numpy as np

import matplotlib.pyplot as plt

low = 10; high = 65; x0 = 6;

fig = plt.gcf()

fig.set_size_inches(14,5)

for n in range(3,6):

plt.subplot(1, 3, n - 2)

N = 10**n

rnd = MC.MCG_rnd(low,high,x0,N)

plt.plot(np.linspace(1,N,N),rnd, 'b.' )

plt.axis([0, N, 10 ,70])

plt.xlabel('$n$'),

plt.ylabel('$rnd$')

Результат.

И математическая статистика - student2.ru

Задача 3.1

#Листинг 3.1. Скрипт rnd_sum.py

import MCG_rnd as MC

import numpy as np

import matplotlib.pyplot as plt

N = 10**3

low = 0; high = 1;

fig = plt.gcf()

fig.set_size_inches(14,5)

n = np.linspace(1,N,N)

rnd = np.zeros(N)

for k in range(1,5):

plt.subplot(1,4,k)

x0 = 10**k

rnd = rnd + MC.MCG_rnd(low,high,x0,N)

plt.plot(n,rnd, 'b.' )

(plt.text(300,4.3, '$\sum_{k=1}^{k=n}{rn{{d}_{k}}}$, $n =$' + str(k)))

plt.xlabel('$n$')

plt.axis([0, N, -1 ,5])

plt.grid()

Результат.

И математическая статистика - student2.ru

Задача 4.1

#Листинг 4.1. Скрипт less_than_05_MCG.py

import MCG_rnd as MC

import numpy as np

N = 10**6

print('N =',N)

low = 0; high = 1;

for m in range(1,5):

x0 = 10**(2*m)

rnd = MC.MCG_rnd(low,high,x0,N)

n = 0

for k in range(N):

if rnd[k] < 0.5:

n = n + 1

r = abs(N - 2*n)/N

x0_n_r = np.array([x0,n,r])

print('x0_n_r =',x0_n_r)

Результат.

N = 1000000

x0_n_r = [ 1.00000000e+02 4.98679000e+05 2.64200000e-03]

x0_n_r = [ 1.00000000e+04 5.00736000e+05 1.47200000e-03]

x0_n_r = [ 1.00000000e+06 4.99570000e+05 8.60000000e-04]

x0_n_r = [ 1.00000000e+08 4.99876000e+05 2.48000000e-04]

Задача 5.1

#Листинг 5.1. Скрипт mersenne_random.py

import random

import matplotlib.pyplot as plt

low = 20; high = 80;

fig = plt.gcf()

fig.set_size_inches(14,5)

for k in range(3,6):

plt.subplot(1, 3, k - 2)

N = 10**k

n = range(N)

rnd = [random.uniform(low,high) for i in n]

plt.plot(n, rnd, 'b.')

plt.axis([0, N, 10 ,70])

plt.xlabel( ' $n$ ' ),

plt.ylabel( ' $rnd$ ' )

Результат.

И математическая статистика - student2.ru

Задача 6.1

6.1. Скрипт less_than_05_Mersenne.py

import numpy as np

N = 10**6

print('N =',N)

low = 0; high = 1;

for m in range(1,5):

x0 = 10**(2*m)

np.random.seed(x0)

rnd = np.random.uniform(low,high,N); #print(rnd)

n = 0

for k in range(N):

if rnd[k] < 0.5:

n = n + 1

r = abs(N - 2*n)/N

x0_n_r = np.array([x0,n,r])

print('x0_n_r =',x0_n_r)

Результат.

N = 1000000

x0_n_r = [ 1.00000000e+02 5.00140000e+05 2.80000000e-04]

x0_n_r = [ 1.00000000e+04 5.00331000e+05 6.62000000e-04]

x0_n_r = [ 1.00000000e+06 4.99994000e+05 1.20000000e-05]

x0_n_r = [ 1.00000000e+08 4.99481000e+05 1.03800000e-03]

Глава 2

Задачи о блуждании по прямой

Задача 7.1

#Листинг 7.1. Модуль steps.py

import numpy as np

def binrnd(n):

rnd = (np.append(np.array([0]),

np.random.random_integers(0, 1, n)))

return rnd

def xm(n):

rnd = binrnd(n);

rnd_temp = np.array(rnd)

x = rnd_temp

for k in range(n):

x[k + 1] = x[k + 1] + x[k]

return x, rnd

if __name__ == "__main__":

n = 10

x, rnd = xm(n)

print('rnd =',rnd)

print('x =',x)

Результат.

rnd = [0 0 0 0 0 0 1 1 1 1 1]

x = [0 0 0 0 0 0 1 2 3 4 5]

Задача 7.2

#Листинг 7.2. Скрипт random_walk.py

import steps

import numpy as np

import matplotlib.pyplot as plt

n = 3; N = 2

# Графическое окно

plt.close('all')

fig = plt.gcf()

fig.set_size_inches(5,5)

plt.xlabel('$t$');

plt.ylabel('$x$')

plt.grid()

for j in range(N):

x, rnd = steps.xm(n)

t = np.linspace(0,n,n + 1);

t = t.astype(np.int32)

plt.plot(t,x,'ro-')

if n <= 20:

plt.xlim(-.5,n + 0.5);

plt.ylim(-.5,n + 0.5)

plt.xticks(np.arange(0,n + 1,1))

plt.yticks(np.arange(0,n + 1,1))

if N <= 10:

print('binrnd',j+1,'=',rnd)

print('x',j+1,'=',x)

Результат.

binrnd 1 = [0 1 0 0]

x 1 = [0 1 1 1]

binrnd 2 = [0 0 0 0]

x 2 = [0 0 0 0]

И математическая статистика - student2.ru

Задача 8.1

#Листинг 8.1. Скрипт random_walk_subplot.py

import matplotlib.pyplot as plt

import numpy as np

import steps

plt.close('all')

fig = plt.gcf()

fig.set_size_inches(12,4)

N = 5

nmax = 3

for n in range(1,nmax + 1):

for j in range(N):

x, rnd = steps.xm(n)

t = np.linspace(0,n,n + 1); t = t.astype(np.int32)

plt.subplot(1,3,n)

plt.plot(t,x,'ro-')

plt.grid(True)

plt.xlim(-.5,3.5);

plt.ylim(-.5,3.5)

plt.xlabel('$t$');

plt.ylabel('$x$')

plt.xticks(np.arange(0,4,1))

plt.yticks(np.arange(0,4,1))

if n == 1:

plt.text(1.2,0,'1')

plt.text(1.2,1,'1')

elif n == 2:

plt.text(2.2,0,'1')

plt.text(2.2,1,'2')

plt.text(2.2,2,'1')

elif n == 3:

plt.text(3.2,0,'1')

plt.text(3.2,1,'3')

plt.text(3.2,2,'3')

plt.text(3.2,3,'1')

Результат.

И математическая статистика - student2.ru

#Листинг 8.1. Скрипт random_walk_subplot.py

import matplotlib.pyplot as plt

import numpy as np

import steps

plt.close('all')

fig = plt.gcf()

fig.set_size_inches(12,4)

N = 30

nmax = 3

for n in range(1,nmax + 1):

for j in range(N):

x, rnd = steps.xm(n)

t = np.linspace(0,n,n + 1); t = t.astype(np.int32)

plt.subplot(1,3,n)

plt.plot(t,x,'ro-')

plt.grid(True)

plt.xlim(-.5,3.5);

plt.ylim(-.5,3.5)

plt.xlabel('$t$');

plt.ylabel('$x$')

plt.xticks(np.arange(0,4,1))

plt.yticks(np.arange(0,4,1))

if n == 1:

plt.text(1.2,0,'1')

plt.text(1.2,1,'1')

elif n == 2:

plt.text(2.2,0,'1')

plt.text(2.2,1,'2')

plt.text(2.2,2,'1')

elif n == 3:

plt.text(3.2,0,'1')

plt.text(3.2,1,'3')

plt.text(3.2,2,'3')

plt.text(3.2,3,'1')

Результат.

И математическая статистика - student2.ru

Задача 8.2

#Листинг 8.2. Скрипт binomial.py

import sympy as sp

a = sp.symbols('a')

b = sp.symbols('b')

s = a + b

for n in range(4):

print(sp.expand(s**n))

результат.

a + b

a**2 + 2*a*b + b**2

a**3 + 3*a**2*b + 3*a*b**2 + b**3

Задача 10.1

#Листинг 10.1. Модуль binopascal.py

import numpy as np

import math

def binopascal(n):

def binomial_coefficient(n, m):

Cnm = (math.factorial(n)/math.factorial(m)/

math.factorial((n - m)))

Cnm = int(Cnm)

return Cnm

def pascal(n):

Cm = np.zeros(n + 1);

Cm = Cm.astype(int);

for m in range(n+1):

Cmn = binomial_coefficient(n, m);

Cm[m] = np.array(Cmn);

return Cm

Cm = pascal(n);

N = int(np.sum(Cm));

Pm = Cm/N;

sumPm = np.sum(Pm);

return Cm, N, Pm, sumPm

if __name__ == "__main__":

n = 3

Cm, N, Pm, sumPm = binopascal(n)

print('Cm =',Cm)

print('N =',N) # N = 2**n, % проверка

print('Pm =',Pm)

print('sumPm =',sumPm)

Результат:

wdir='C:/Users/Acer/Desktop/Моделирование')

Cm = [1 3 3 1]

N = 8

Pm = [ 0.125 0.375 0.375 0.125]

sumPm = 1.0

Задача 10.2

#Листинг 10.2. Скрипт binograph_subplot.py

import binopascal as bin

import matplotlib.pyplot as plt

import numpy as np

fig = plt.gcf()

fig.set_size_inches(10,7)

nmax = 5

for n in range(1,nmax + 1):

Cm, N, Pm, sumPm = bin.binopascal(n);

plt.subplot(nmax/2,2,n)

m = np.arange(n + 1)

width = 0.35

plt.bar(m, Pm, width, align='center', color='red')

plt.axis([-1, 5, 0, 0.6])

plt.xticks(np.arange(0,n + 1,1))

plt.xlabel('$m$')

plt.ylabel('$P_n$')

plt.grid()

Результат:

И математическая статистика - student2.ru

Глава 3.

Статистический эксперимент Бюффона.

Задача 12.1

#Листинг 12.1. Модуль needle.py

import numpy as np

def needle(l,x0,y0,alpha):

xx1 = x0 - l*np.cos(alpha);

xx2 = x0 + l*np.cos(alpha);

x1 = min(xx1,xx2);

x2 = max(xx1,xx2);

dx = 1e-5;

x = np.arange(x1,x2,dx);

y = y0 + np.tan(alpha)*(x-x0);

return x, y

if __name__ == "__main__":

l,x0,y0,alpha = 0.8, 2.5, 1.5, np.pi/3

x, y = needle(l,x0,y0,alpha)

import numpy as np

import matplotlib.pyplot as plt

plt.axis([0,5,0,3])

plt.plot(x0,y0,'ro')

plt.plot(x,y)

plt.grid()

Результат:

И математическая статистика - student2.ru

Задача 14.1

#Листинг 14.1. Модуль buffon.py

from numpy.random import uniform

import numpy as np

def buffon(n):

x0 = uniform(0,10,n);

y0 = uniform(0,10,n);

alpha = uniform(0,np.pi,n);

return x0, y0, alpha

if __name__ == "__main__":

n = 5

x0, y0, alpha = buffon(n)

print('x0 =',x0)

print('y0 =',y0)

print('alpha =',alpha)

Результат:

x0 = [ 2.58412323 2.89639669 4.79362979 6.76114968 5.05263329]

y0 = [ 0.46557138 4.93558224 9.66520151 2.72354034 0.22222513]

alpha = [ 2.74291156 2.60389662 0.8735163 1.00904452 2.52620912]

Задача 15.1

Листинг 15.1. Скрипт geometric_probability.py

import sympy as sym

𝜋 = sym.pi

𝛼, l, a = sym.symbols('𝛼 l a')

I = sym.integrate(l*sym.sin(𝛼)/𝜋/a,𝛼)

P2 = I.subs(𝛼,𝜋); P1 = I.subs(𝛼,0)

P = P2-P1

print('P =',P)

Результат:

P = 2*l/(pi*a)

Задача 16.1

#Листинг 16.1. Скрипт buffon_1_run.py

import numpy as np

import matplotlib.pyplot as plt

import buffon, needle, counter

plt.close('all')

fig = plt.gcf()

plt.xlim(-1,11); plt.ylim(-1,11)

fig.set_size_inches(5,5)

plt.xlabel('$x$'); plt.ylabel('$y$')

plt.xticks(np.arange(0,11,2))

plt.yticks(np.arange(0,11,2))

n = 10**0

l = 0.8; a = 1.; xmin = -1; xmax = 11;

Y = np.arange(0.,12.,2*a);

dx = 1e-1; x = np.arange(xmin,xmax,dx);

for k in range(len(Y)):

plt.plot(x,Y[k]*x**0,'r')

x0, y0, alpha = buffon.buffon(n)

for k in range(n):

x, y = needle.needle(l,x0[k],y0[k],alpha[k]);

plt.plot(x,y,'b'),

#print()

#print('Результаты моделирования')

m = counter.counter(n,a,l,y0,alpha); #print('m = ',m)

Pstat = m/n; #print('Pstat = ',Pstat)

Ptheory = 2*l/np.pi/a; #print('Ptheory = ',Ptheory)

Pstat = np.round(Pstat, 4)

Ptheory = np.round(Ptheory, 4)

(plt.title('$n = $' + str(n) + '$, \ m = $' +

str(m) + '$, \ Pstat = $' + str(Pstat) +

'$, \ Ptheory = $' + str(Ptheory) ))

Результат.

И математическая статистика - student2.ru И математическая статистика - student2.ru И математическая статистика - student2.ru

Наши рекомендации