Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
2 Кб
Скачать
import matplotlib.pyplot as plt
import numpy as np
import math as m


def f(fi1, w1, fi2, w2):
    dfi1_dt = w1
    dw1_dt = - C1 * fi1 - C2 * (fi1 - fi2)
    dfi2_dt = w2
    dw2_dt = - C3 * fi2 + C4 * (fi1 - fi2)
    return [dfi1_dt, dw1_dt, dfi2_dt, dw2_dt]


# Параметры маятника
m1 = 1
m2 = 1
g = 9.8
l1 = 1
l2 = 1
k = 0.3
l = 0.5

# Константы
C1 = g / l1
C2 = (k * l**2) / (m1 * l1**2)
C3 = g / l2
C4 = (k * l**2) / (m2 * l2**2)

# Количество шагов и размер шага
n = 1000000
h = 0.001

# Массив углов и скорений на кажом шаге
answer = [[0] * 4 for _ in range(n)]
answer[0] = [m.pi / 3, 1, m.pi / 6, 1]  # [fi_1, w1, fi_2, w2]

# Метод Рунге-Кутты 4-го порядка
for i in range(n - 1):
    k1 = f(answer[i][0], answer[i][1], answer[i][2], answer[i][3])
    k2 = f(answer[i][0] + (h/2) * k1[0], answer[i][1] + (h/2) * k1[1], answer[i][2] + (h/2) * k1[2], answer[i][3] + (h/2) * k1[3])
    k3 = f(answer[i][0] + (h/2) * k2[0], answer[i][1] + (h/2) * k2[1], answer[i][2] + (h/2) * k2[2], answer[i][3] + (h/2) * k2[3])
    k4 = f(answer[i][0] + h * k3[0], answer[i][1] + h * k3[1], answer[i][2] + h * k3[2], answer[i][3] + h * k3[3])
    answer[i+1] = [answer[i][j] + (h/6) * (k1[j] + 2*k2[j] + 2*k3[j] + k4[j]) for j in range(4)]

# Наложение шума на измерения
noise_std_dev = 0.1  # Стандартное отклонение шума
fi1_noisy = [a[0] + np.random.normal(0, noise_std_dev) for a in answer]
fi2_noisy = [a[2] + np.random.normal(0, noise_std_dev) for a in answer]
t_values = [i * h for i in range(n)]

# Построение графика
plt.figure(figsize=(24, 6))
plt.plot(t_values, fi1_noisy, label='fi1(t)')
plt.plot(t_values, fi2_noisy, label='fi2(t)')
plt.xlabel('t')
plt.ylabel('fi1(t), fi2(t)')
plt.legend()
plt.grid()
plt.show()
Соседние файлы в папке ИДЗ по ВычМат 2024