Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / 2 / lab_2.docx
Скачиваний:
0
Добавлен:
12.02.2026
Размер:
11.46 Mб
Скачать

Приложение 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)

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

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