Во многих случаях полюса оси jλ модели важны для сохранения после уменьшения модели, например, динамики жесткого тела установки гибкой конструкции или интеграторов контроллера. Уникальная процедура, modreal, служит цели хорошо.
modreal переводит систему в модальную форму с собственными значениями, появляющимися на диагонали её A-матрицы. Вещественные собственные значения отображаются в блоках 1 на 1, а сложные собственные значения - в вещественных блоках 2 на 2. Все блоки упорядочены в порядке возрастания, на основе их собственных значений, по умолчанию, или порядке убывания, на основе их вещественных частей. Таким образом, определение числа полюсов по оси jλ разбивает модель на две системы, одна из которых содержит только динамику по оси, а другая - оставшуюся динамику.
rng(5678,'twister'); G = rss(30,1,1); % random 30-state model [Gjw,G2] = modreal(G,1); % only one rigid body dynamics G2.D = Gjw.D; % put DC gain of G into G2 Gjw.D = 0; subplot(2,1,1) sigma(Gjw) ylabel('Rigid Body') subplot(2,1,2) sigma(G2) ylabel('Nonrigid Body')

Дальнейшее сокращение модели может быть сделано на G2 без каких-либо численных трудностей. После G2 далее сводится к Gred, окончательное приближение модели просто Gjw+Gred.
Этот процесс разделения полюсов по оси jλ был встроен и автоматизирован во всех процедурах сокращения модели balancmr, schurmr, hankelmr, bstmr, и hankelsv, так что пользователям не нужно беспокоиться о разделении модели.
Изучите график сингулярных значений Ханкеля.
hankelsv(G)

Вычислите сокращенную модель восьмого порядка.
[gr,info] = reduce(G,8); figure bode(G,'b-',gr,'r--') legend('Original','Reduced')

Алгоритм по умолчанию balancmr из reduce проделала большую работу по аппроксимации модели из 30 государств всего с восемью штатами. Опять же, динамика жесткого тела сохраняется для дальнейшей конструкции контроллера.
balancmr | bstmr | hankelmr | hankelsv | modreal | schurmr