📄 transf.m
字号:
% function [a,b1,b2,c1,c2,d11,d12,d21,d22,r12inv,r21inv,q12,q21,fail] = ...% transf(sys,nmeas,nctrl)%% This program is designed to scale the d12 and d21 matrices to satisfy the % standard formulas and check the rank conditions.% function [a,b1,b2,c1,c2,d11,d12,d21,d22,r12inv,r21inv,q12,q21,fail] = ... transf(sys,nmeas,nctrl) [systype,no,ni,nx] = minfo(sys); nd1 = ni-nctrl; nd2 = nctrl; ne1 = no-nmeas; ne2 = nmeas; [a,b,c,d] = unpck(sys); b1 = b(:,1:nd1); b2 = b(:,nd1+1:ni); c1 = c(1:ne1,:); c2 = c(ne1+1:no,:); d11 = d(1:ne1,1:nd1); d12 = d(1:ne1,nd1+1:ni); d21 = d(ne1+1:no,1:nd1); d22 = d(ne1+1:no,nd1+1:ni); fail = 0;%% Determine if |A-jwI B2 | has full column rank at w = 0.% | C1 D12|% ctmp = [a b2;c1 d12]; [nr,nc] = size(ctmp); crk = rank(ctmp,eps); if (crk ~= nc) disp(' [A B2;C1 D12] DOES NOT HAVE FULL COLUMN RANK AT W = 0 ') fail = 1; return; end%% Determine if |A-jwI B1 | has full row rank at w = 0.% | C2 D21|% rtmp = [a b1;c2 d21]; [nr,nc] = size(rtmp); rrk = rank(rtmp,eps); if (rrk ~= nr) disp(' [A B1;C2 D21] DOES NOT HAVE FULL ROW RANK AT W = 0 ') fail = 1; return; end%% Determine if D12 has full row rank and scale D12 to Q12*D12*R12INV = |0|.% |I|% [q12,r12] = qr(d12); rrk = rank(r12,eps); if (rrk ~= nd2) disp(' D12 DOES NOT HAVE FULL COLUMN RANK') fail = 1; return; end q12 = [q12(:,(nd2+1):ne1),q12(:,1:nd2)]'; r12inv = inv(r12(1:nd2,:));%% Determine if D21 has full column rank and scale D21 to R21INV'*D21*Q21 = [0 I].% [q21,r21] = qr(d21'); crk = rank(r21,eps); if (crk ~= ne2) disp(' D21 DOES NOT HAVE FULL ROW RANK') fail = 1; return; end q21 = [q21(:,(ne2+1):nd1),q21(:,1:ne2)]; r21inv = inv(r21(1:ne2,:)); c1 = q12*c1; c2 = r21inv'*c2;% cc = [c1;c2]; b1 = b1*q21; b2 = b2*r12inv;% bb = [b1,b2]; d11 = q12*d11*q21; d12 = [zeros(ne1-nctrl,nctrl);eye(nctrl)]; d21 = [zeros(nmeas,nd1-nmeas) eye(nmeas)]; d22 = d22;% dd = [d11 d12;d21 d22];% sys = pck(aa,bb,cc,dd);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -