В различных научных и инженерных областях часто возникает необходимость анализа поведения динамических систем. Один из ключевых аспектов этого анализа включает вычисление собственных значений, постоянных времени, собственных частот и коэффициентов затухания. В этой статье блога мы рассмотрим несколько методов выполнения этих вычислений, а также примеры кода на Python.
Методы расчета собственных значений:
-
Численные методы:
- Метод мощной итерации
- Метод обратной степенной итерации
- QR-алгоритм
- Метод Якоби
-
Аналитические методы:
- Метод характеристического уравнения
- Метод диагонализации
- Иорданский метод канонической формы
Пример кода (метод мощной итерации):
import numpy as np
def power_iteration(A, num_iterations):
n = A.shape[0]
x = np.ones(n)
for _ in range(num_iterations):
x = np.dot(A, x)
x = x / np.linalg.norm(x) # Normalize the vector
eigenvalue = np.dot(np.dot(A, x), x) / np.dot(x, x)
return eigenvalue, x
# Example usage
A = np.array([[3, 1], [1, 2]])
eigenvalue, eigenvector = power_iteration(A, 100)
print("Eigenvalue:", eigenvalue)
print("Eigenvector:", eigenvector)
Методы расчета постоянных времени и собственных частот:
-
Анализ частотной области:
- Преобразование Фурье
- Преобразование Лапласа
- Анализ передаточной функции
-
Анализ во временной области:
- Метод импульсного отклика
- Метод пошагового ответа
- Анализ пространства состояний
Пример кода (метод импульсного отклика):
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
def calculate_time_constants(system):
t, y = signal.impulse(system)
peaks, _ = signal.find_peaks(y, height=0)
time_constants = t[peaks]
return time_constants
# Example usage
system = signal.TransferFunction([1], [1, 2, 1])
time_constants = calculate_time_constants(system)
print("Time Constants:", time_constants)
Методы расчета коэффициентов демпфирования:
-
Анализ частотной области:
- Анализ графика Боде
- Анализ графика Найквиста
-
Анализ во временной области:
- Метод пошагового отклика
- Анализ пространства состояний
Пример кода (анализ графика Боде):
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
def calculate_damping_ratio(system):
_, mag, phase = signal.bode(system)
max_peak_idx = np.argmax(mag)
damping_ratio = np.sin(phase[max_peak_idx])
return damping_ratio
# Example usage
system = signal.TransferFunction([1], [1, 0.1, 1])
damping_ratio = calculate_damping_ratio(system)
print("Damping Ratio:", damping_ratio)