Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / 2 / lab_2

.pdf
Скачиваний:
0
Добавлен:
12.02.2026
Размер:
2.37 Mб
Скачать

−1

( , − ) = [ ( ) ∙ ( − 1)] = [∑(

 

∙ 0, 9 ) + ∑(

2,

∙ 0, 9−2)]

 

 

 

 

 

1,

 

 

 

 

 

 

 

 

=

 

 

 

 

=0

 

 

−1

 

 

 

 

 

 

 

 

 

 

 

= [∑(

 

2,

∙ 0, 92) +

(

∙ 0, 9 )]

 

1,

 

 

 

 

 

1,

 

 

 

=

 

 

 

 

= − +1

 

 

 

 

−1

 

 

 

 

 

 

 

 

−1

 

= ∑( ∙ ∙ 0, 92) + ∑

( ∙ 0, 9 ) = ∑(0 ∙ 0 ∙ 0, 92)

 

 

 

 

 

 

 

 

 

 

 

=0

 

 

 

= − +1

 

 

 

=0

 

 

 

 

 

 

 

 

 

 

 

 

 

+∑ (0 ∙ 0, 9 ) = 0

= − +1

lim ( , − ) = 0

→∞

Процесс не является стационарным в широком смысле, т.к. его дисперсия, СКО и математическое ожидание не зависят от n.

На рис. 6. видно, что процесс не является эргодическим (реализации отличаются друг от друга), но СКО графиков (рис. 7) стремится или остается около своего предельного значения, что было доказано теоретическими расчетами.

Всравнении со случайными блужданиями без затухания,

скаттерограмма получилась более рассеянная, но для первого шага отклонения меньше, чем для десятого.

Среднее по ансамблю r и по времени (рис. 8.) больше всего сходятся для

L2. С ростом K и N будут приближаться друг к другу среднее по времени и по ансамблю для L2.

11

Вывод

В ходе лабораторной работы были изучены концепции, лежащие в основе теории случайных процессов и получены навыки генерирования случайных блужданий и белого шума, теоретические расчеты и графические зависимости и сравнения представлены в ходе работы.

12

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

import numpy as np

import matplotlib.pyplot as plt

# Параметры

 

 

num_realizations = 400

# Количество реализаций k

n_values = 200

# Длина каждой реализации n

mean = 4

#

Среднее значение u

std_dev = 8

#

Стандартное отклонение o

# Генерация матрицы E(n) для каждой реализации

ensemble = np.random.normal(mean, std_dev, (num_realizations, n_values))

# Усреднение по ансамблю и времени для каждой строки и столбца mean_ensemble = np.mean(ensemble, axis=0)

mean_realization = np.mean(ensemble, axis=1)

# Построение графиков для шума plt.figure('Белый шум', figsize=(10, 6))

# Выводим график шума plt.subplot(1,2,1) plt.imshow(ensemble, cmap='gray') plt.colorbar()

plt.title("Картина матрицы белого шума") plt.xlabel("k (номер реализации)") plt.ylabel("n (номер шага)")

# График среднего по ансамблю plt.subplot(1,2,2)

plt.plot(mean_ensemble, label="Среднее по ансамблю", color='blue', linewidth=1, alpha = 0.8)

# График среднего по реализации

plt.plot(mean_realization, label="Среднее по реализации", color='red', linewidth=1, alpha = 0.8)

# Настройки графика

plt.title("Среднее по реализации и ансамблю") plt.xlabel("n (номер шага)") plt.ylabel("Значение u")

plt.grid(True) plt.tight_layout() plt.legend()

# Строим диаграммы рассеяния

13

# Пары значений n для построения диаграмм рассеяния pairs = np.random.randint(0, n_values, [3,2], dtype=int)

# Создаем подграфики (subplots)

fig, axs = plt.subplots(1, 3, figsize=(16, 5))

# Построение диаграмм рассеяния для каждой пары (ni, nj) for idx, (ni, nj) in enumerate(pairs):

# Данные для осей диаграммы рассеяния

x =

ensemble[:,

ni]

#

значения

E(ni)

y

=

ensemble[:,

nj]

#

значения

E(nj)

#

Построение диаграммы

рассеяния

axs[idx].scatter(x, y,

alpha=0.6)

# Расчет выборочной корреляции correlation = np.corrcoef(x, y)[0, 1]

# Добавление заголовка с корреляцией

axs[idx].set_title(f'E(n_{ni+1}) vs E(n_{nj+1})\nКорреляция r = {correlation:.2f}')

# Настройки осей axs[idx].set_xlabel(f'E(n_{ni+1})') axs[idx].set_ylabel(f'E(n_{nj+1})') axs[idx].grid(True)

# Настройка плотного расположения графиков plt.tight_layout(pad=1.5)

# Показать графики plt.show()

14

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

import numpy as np

import matplotlib.pyplot as plt

# Параметры

num_realizations = 400

# Количество реализаций k

n_values = 200

# Длина каждой реализации n

mean

= 0

# Среднее значение u

std_dev = 1

# Стандартное отклонение o

l1

=

2

#

l2

=

20

#

# Создаём массив, начинающийся с нуля

rand_walks = np.zeros((num_realizations,n_values))

# Создаём реализации случайного блуждания

for

k in range(num_realizations):

#

Перебираем все реализации

 

 

for n in range(n_values-1):

#

Для

каждого элемента этой реализации

 

rand_walks[k,n+1] = rand_walks[k,n]+np.random.normal(mean, std_dev) #

Считаем по этой формуле значение элемента

# Усреднение по ансамблю и времени для каждой строки и столбца

mean_ensemble = np.mean(rand_walks, axis=0)

mean_realization = np.mean(rand_walks, axis=1)

# Выводим графики блужданий

plt.figure('Блуждания без затухания', figsize=(10, 6))

plt.subplot(2,1,1)

plt.plot(rand_walks.T, label="Блуждания", linewidth=0.8, alpha = 0.8) #

!Здесь Т нужно чтобы транспонировать матрицу, иначе он её не правильно выводит. Я бы понял, но Питон чурка, он не понимает.

# Настраиваем график

plt.title("График K реализаций случайного блуждания буз затухания")

plt.xlabel("T (номер шага)")

plt.ylabel("E(n) (Значение на конкретном шаге)")

# Считаем и выводим графики средних по времени и по ансамблю

plt.subplot(2,1,2)

# График среднего по ансамблю

plt.plot(mean_ensemble, label="Среднее по ансамблю", color='blue', linewidth=1, alpha = 0.8)

# График среднего по реализации

15

plt.plot(mean_realization, label="Среднее по реализации", color='red', linewidth=1, alpha = 0.8)

# Настройки графика

plt.title("Среднее по реализации и ансамблю") plt.xlabel("n (номер шага)") plt.ylabel("Значение u")

plt.grid(True) plt.tight_layout() plt.legend()

# Гемор со скатерограммами

plt.figure('Скатерограммы свободных блужданий', figsize=(10, 6)) N1={(10,9),(50,49),(100,99),(200,199)} N2={(50,40),(100,90),(200,190)}

# Создаем подграфики (subplots) plt.subplot(2,1,1)

# Построение диаграмм рассеяния для каждой пары (ni, nj) for idx, (ni, nj) in enumerate(N1):

# Данные для осей диаграммы рассеяния

x =

rand_walks[:,

ni

-

1]

#

значения E(ni)

y

=

rand_walks[:,

nj

-

1]

#

значения E(nj)

#

Построение диаграммы

рассеяния

plt.scatter(x, y, alpha=0.6, label = f'(ni_{ni}, nj_{nj})')

# Добавление заголовка с корреляцией plt.title('E(N1)')

# Настройки осей plt.xlabel('E(ni)') plt.ylabel('E(nj)') plt.legend() plt.grid(True)

#Создаем подграфики (subplots) plt.subplot(2,1,2)

#Построение диаграмм рассеяния для каждой пары (ni, nj)

for idx, (ni, nj) in enumerate(N2):

# Данные для

осей

диаграммы рассеяния

x =

rand_walks[:,

ni

-

1]

#

значения E(ni)

y

=

rand_walks[:,

nj

-

1]

#

значения E(nj)

#

Построение

диаграммы

рассеяния

plt.scatter(x, y,

alpha=0.6,

label = f'(ni_{ni}, nj_{nj})')

16

# Добавление заголовка с корреляцией plt.title('E(N2)')

# Настройки осей plt.xlabel('E(ni)') plt.ylabel('E(nj)') plt.legend() plt.grid(True)

# Настройка плотного расположения графиков plt.tight_layout(pad=1.5)

# Расчет выборочной автокорреляции r(n, n-1) autocorrelation = np.zeros(n_values - 1)

for n in range(1, n_values):

# E(n)E(n-1) для всех реализаций

product = rand_walks[:, n] * rand_walks[:, n-1]

# Усреднение по ансамблю (по строкам) autocorrelation[n-1] = np.mean(product)

# Теоретическая автокорреляция r(n, n-1) на основе математического ожидания sigma2 = std_dev**2 # Дисперсия для W(n)

theoretical_correlation = sigma2 * np.arange(1, n_values)

#Построение графика автокорреляции r(n, n-1) plt.figure('Автокорреляция', figsize=(10, 6))

#График практической автокорреляции

plt.plot(range(1, n_values), autocorrelation,label="Практическая автокорреляция", color='blue', linewidth=2)

# График теоретической автокорреляции

plt.plot(range(1, n_values), theoretical_correlation, label="Теоретическая автокорреляция", color='red', linestyle='--')

# Настройки графика

plt.title("Автокорреляция r(n, n-1) для случайных блужданий") plt.xlabel("n")

plt.ylabel("r(n, n-1)") plt.grid(True) plt.legend() plt.tight_layout() plt.show()

17

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

import numpy as np

import matplotlib.pyplot as plt

# Параметры

 

num_realizations = 400

# Количество реализаций k

n_values = 200

# Длина каждой реализации n

mean = 0

# Среднее значение u

std_dev = 1

# Стандартное отклонение o

alpha = 0.9

# Коэффициент затухания

# Создаём массив, начинающийся с нуля

rand_walks = np.zeros((num_realizations,n_values))

# Создаём реализации случайного блуждания

for

k in range(num_realizations):

#

Перебираем все реализации

 

 

for n in range(n_values-1):

#

Для

каждого элемента этой реализации

 

rand_walks[k,n+1] = rand_walks[k,n]*0.9+np.random.normal(mean, std_dev) # Считаем по этой формуле значение элемента

# Усреднение по ансамблю и времени для каждой строки и столбца

mean_ensemble = np.mean(rand_walks, axis=0)

mean_realization = np.mean(rand_walks, axis=1)

# Выводим графики блужданий

plt.figure('Блуждания с затуханиями', figsize=(10, 6))

plt.subplot(2,1,1)

plt.plot(rand_walks.T, label="Блуждания", linewidth=0.8, alpha = 0.8) #

!Здесь Т нужно чтобы транспонировать матрицу, иначе он её не правильно выводит. Я бы понял, но Питон чурка, он не понимает.

# Настраиваем график

plt.title("График K реализаций случайного блуждания с затуханиями")

plt.xlabel("T (номер шага)")

plt.ylabel("E(n) (Значение на конкретном шаге)")

# Считаем и выводим графики средних по времени и по ансамблю

plt.subplot(2,1,2)

# График среднего по ансамблю

plt.plot(mean_ensemble, label="Среднее по ансамблю", color='blue', linewidth=1, alpha = 0.8)

# График среднего по реализации

plt.plot(mean_realization, label="Среднее по реализации", color='red', linewidth=1, alpha = 0.8)

18

# Настройки графика

plt.title("Среднее по реализации и ансамблю") plt.xlabel("n (номер шага)") plt.ylabel("Значение u")

plt.grid(True) plt.tight_layout() plt.legend()

# Гемор со скатерограммами

plt.figure('Скатерограммы свободных блужданий', figsize=(10, 6)) N1={(10,9),(50,49),(100,99),(200,199)} N2={(50,40),(100,90),(200,190)}

# Создаем подграфики (subplots) plt.subplot(2,1,1)

# Построение диаграмм рассеяния для каждой пары (ni, nj) for idx, (ni, nj) in enumerate(N1):

# Данные для осей диаграммы рассеяния

x =

rand_walks[:,

ni

-

1]

#

значения E(ni)

y

=

rand_walks[:,

nj

-

1]

#

значения E(nj)

#

Построение диаграммы

рассеяния

plt.scatter(x, y, alpha=0.6, label = f'(ni_{ni}, nj_{nj})')

# Добавление заголовка с корреляцией plt.title('E(N1)')

# Настройки осей plt.xlabel('E(ni)') plt.ylabel('E(nj)') plt.legend() plt.grid(True)

#Создаем подграфики (subplots) plt.subplot(2,1,2)

#Построение диаграмм рассеяния для каждой пары (ni, nj)

for idx, (ni, nj) in enumerate(N2):

# Данные для

осей

диаграммы рассеяния

x =

rand_walks[:,

ni

-

1]

#

значения E(ni)

y

=

rand_walks[:,

nj

-

1]

#

значения E(nj)

#

Построение

диаграммы

рассеяния

plt.scatter(x, y,

alpha=0.6,

label = f'(ni_{ni}, nj_{nj})')

19

# Добавление заголовка с корреляцией plt.title('E(N2)')

# Настройки осей plt.xlabel('E(ni)') plt.ylabel('E(nj)') plt.legend() plt.grid(True)

# Настройка плотного расположения графиков plt.tight_layout(pad=1.5)

# Расчет выборочной автокорреляции r(n, n-1) autocorrelation = np.zeros(n_values - 1)

for n in range(1, n_values):

# E(n)E(n-1) для всех реализаций

product = rand_walks[:, n] * rand_walks[:, n-1]

# Усреднение по ансамблю (по строкам) autocorrelation[n-1] = np.mean(product)

# Теоретическая автокорреляционная функция: r(n, n-1) = 0.05 * (1 - 0.9^n) / (1 - 0.9)^2

theoretical_correlation = np.array([0.05 * (1 - alpha**n) / (1 - alpha)**2 for n in range(1, n_values)])

#Построение графика автокорреляции r(n, n-1) plt.figure('Автокорреляция', figsize=(10, 6))

#График практической автокорреляции

plt.plot(range(1, n_values), autocorrelation, label="Практическая автокорреляция", color='blue', linewidth=2)

# График теоретической автокорреляции

plt.plot(range(1, n_values), theoretical_correlation, label="Теоретическая автокорреляция", color='red', linestyle='--')

# Настройки графика

plt.title("Автокорреляция r(n, n-1) для случайных блужданий") plt.xlabel("n")

plt.ylabel("r(n, n-1)") plt.grid(True) plt.legend() plt.tight_layout() plt.show()

20

Соседние файлы в папке 2