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}")