Учитывая систему G
в форме LTI, следующие команды уменьшают систему до любого желаемого порядка, который вы задаете. Личный выбор основан на своих сингулярных значениях Ганкеля.
rng(1234,'twister'); G = rss(30,4,3); % random 30-state model % balanced truncation to models with sizes 12:16 [G1,info1] = balancmr(G,12:16); % Schur balanced truncation by specifying `MaxError' [G2,info2] = schurmr(G,'MaxError',[1,0.8,0.5,0.2]); sigma(G,'b-',G1,'r--',G2,'g-.') legend('G','G1','G2')
График сравнивает исходную модель G
с упрощенными моделями G1
и G2
.
Чтобы определить, удовлетворена ли теоретическая связанная ошибка, вычислите пиковое различие через частоты между усилением исходной системы и уменьшаемой системой. Сравните это с ошибкой, связанной сохраненный в структуре info
.
norm(G-G1(:,:,1),'inf')
ans = 2.2867
info1.ErrorBound(1)
ans = 9.7120
Или, постройте образцовую ошибку по сравнению с ошибкой, связанной через следующие команды:
[sv,w] = sigma(G-G1(:,:,1)); loglog(w,sv,w,info1.ErrorBound(1)*ones(size(w))) xlabel('rad/sec');ylabel('SV'); title('Error Bound and Model Error')