форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
58 строки
1.9 KiB
Python
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}") |