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

Лабы / 2 / lab2_3

.py
Скачиваний:
0
Добавлен:
12.02.2026
Размер:
6 Кб
Скачать
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)

# Настройки графика
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})')

# Добавление заголовка с корреляцией
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()
Соседние файлы в папке 2