Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

58 строки
1.9 KiB
Python

import numpy as np
import matplotlib.pyplot as plt
# Параметры системы
K = 2.0
# Частотный диапазон (логарифмическая шкала)
omega = np.logspace(-1, 2, 500) # от 0.1 до 100 рад/с
# Действительная и мнимая части АФХ
U = np.zeros_like(omega) # Всегда 0
V = -K / omega # Мнимая часть
# Построение годографа
plt.figure(figsize=(8, 8))
plt.plot(U, V, 'b-', linewidth=2, label='АФХ (годограф)')
plt.plot(U[0], V[0], 'go', markersize=8, label='Начало (ω=0.1)')
plt.plot(U[-1], V[-1], 'ro', markersize=8, label='Конец (ω=100)')
# Стрелки направления увеличения частоты
for i in [50, 150, 300]: # индексы для стрелок
plt.arrow(U[i], V[i], U[i+10]-U[i], V[i+10]-V[i],
head_width=0.1, head_length=0.1, fc='k', ec='k')
plt.xlabel('Действительная часть Re(W)')
plt.ylabel('Мнимая часть Im(W)')
plt.title(f'АФХ для интегрирующего звена $W(p) = K/p$\nK={K}')
plt.grid(True, alpha=0.3)
plt.axis('equal')
plt.legend()
plt.show()
# Дополнительно: построение отдельно действительной и мнимой частей
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.semilogx(omega, U, 'r-', linewidth=2)
plt.xlabel('ω (рад/с)')
plt.ylabel('Re(W)')
plt.title('Действительная часть')
plt.grid(True, alpha=0.3)
plt.subplot(1, 2, 2)
plt.semilogx(omega, V, 'g-', linewidth=2)
plt.xlabel('ω (рад/с)')
plt.ylabel('Im(W)')
plt.title('Мнимая часть')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# Вывод таблицы значений
print("Таблица значений АФХ:")
print("ω\t\tRe(W)\t\tIm(W)")
print("-" * 40)
for i in range(0, len(omega), 50):
print(f"{omega[i]:.2f}\t\t{U[i]:.2f}\t\t{V[i]:.2f}")