/
Chronos
/
TU_laba
Обзор
Документация
Войти
/
Chronos
/
TU_laba
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
dump/main.py
55 строк
2 KB
Chronos
Живо то, что ещё не умерло
28 мар 2025, 09:12
28 мар 2025, 09:12
f49a0f7
Код
Авторство
О чём код?
import unittest import numpy as np from task_7_test import design_controller, design_observer, build_combined_system class TestControlSystem(unittest.TestCase): @classmethod def setUpClass(cls): cls.A = np.asarray([ [0, 0, 1, 0], [0, 0, 0, 1], [74.574, -38.295, -56.072, 86.342], [-114.886, 101.449, 86.383, -228.731] ]) # Заполнить матрицы A, B, C cls.B = np.asarray([ [0], [0], [0.950], [-1.464] ]) cls.C = np.asarray([[1.0,1.0,0.0,0.0]]) cls.reg_spec = np.array([-1, -1, -21.421, -265.086]) cls.obs_spec = np.array([-5, -5, -21.421, -265.086]) # Проектирование регулятора и наблюдателя cls.Q, cls.Ac = design_controller(cls.A, cls.B, cls.reg_spec) cls.L, cls.Ao = design_observer(cls.A, cls.C, cls.obs_spec) def test_controller_stability(self): eigvals = np.linalg.eigvals(self.A + self.B @ self.Q) self.assertTrue(all(np.real(eigvals) < 0), "Регулятор неустойчив") def test_observer_stability(self): eigvals = np.linalg.eigvals(self.A - self.L @ self.C) self.assertTrue(all(np.real(eigvals) < 0), "Наблюдатель неустойчив") def test_combined_system_structure(self): M = build_combined_system(self.A, self.B, self.Q, self.L, self.C) self.assertEqual(M.shape, (8, 8), "Неверная структура комбинированной системы") def test_controller_poles_placement(self): expected = np.sort(self.reg_spec) actual = np.sort(np.linalg.eigvals(self.Ac)) np.testing.assert_allclose(actual, expected, atol=1e-3, err_msg="Полюса регулятора не соответствуют заданным") def test_observer_poles_placement(self): expected = np.sort(self.obs_spec) actual = np.sort(np.linalg.eigvals(self.Ao)) np.testing.assert_allclose(actual, expected, atol=1e-3, err_msg="Полюса наблюдателя не соответствуют заданным") # def test_observability(self): # Ob = control.ctrb(self.A.T, self.C.T) # self.assertEqual(np.linalg.matrix_rank(Ob), self.A.shape[0], "Система ненаблюдаема") if __name__ == '__main__': unittest.main()