📄 coprimeunc.m
字号:
%function [Ac,Bc,Cc,Dc,gammin] = coprimeunc(a,b,c,d,gamrel)
%
% Finds the controller which optimally robustifies a given
% shaped plant in terms of tolerating maximum coprime uncertainty.
% Used in the McFarlane-Glover H-infinity loopshaping procedure.
% --- Uses the robust control toolbox ---
%
% a,b,c,d: State-space description of (shaped) plant
% gamrel: Final gamma used is gamrel*gammin [default: gamrel=1.1]
% Ac,Bc,Cc,Dc: State-space description of "robustifying" controller
% assuming positive feedback
%
% Copyright 1996-2003 Sigurd Skogestad & Ian Postlethwaite
% $Id: coprimeunc.m,v 1.2 2004/04/15 08:10:13 vidaral Exp $
function [Ac,Bc,Cc,Dc,gammin] = coprimeunc(a,b,c,d,gamrel)
if nargin <4,
disp('usage: [Ac,Bc,Cc,Dc] = coprimeunc(a,b,c,d,gamrel)'); return; end
if nargin <5, gamrel=1.1; end
% Find Normalized Coprime factors of the shaped plant
S=eye(size(d'*d))+d'*d;
R=eye(size(d*d'))+d*d';
Rinv=inv(R);Sinv=inv(S);
A1 = (a-b*Sinv*d'*c); R1 =S; B1=b; Q1 = c'*Rinv*c;
[X,XAMP,G,REP]=care(A1,B1,Q1,R1);
if REP == -1
disp('The Hamiltonian matrix has jw-axis eigenvalues')
elseif REP == -2
disp('There is no finite stabilizing solution X')
else
sprintf('X: Frobenius norm of relative residual= %0.5g',REP)
end
A2 = A1'; Q2 = b*Sinv*b'; B2=c'; R2 = R;
[Z,ZAMP,G,REP]=care(A2,B2,Q2,R2);
if REP == -1
disp('The Hamiltonian matrix has jw-axis eigenvalues')
elseif REP == -2
disp('There is no finite stabilizing solution X')
else
sprintf('Z: Frobenius norm of relative residual= %0.5g',REP);
end
% display optimal gamma
XZ = X*Z; gammin=sqrt(1+max(eig(XZ)))
% Use higher gamma
gam=gamrel*gammin; gam2 = gam*gam; gamconst = (1-gam2)*eye(size(XZ));
Lc = gamconst + XZ; Li = inv(Lc'); Fc = -Sinv*(d'*c+b'*X);
Ac = a + b*Fc + gam2*Li*Z*c'*(c+d*Fc);
Bc = gam2*Li*Z*c';
Cc = b'*X;
Dc = -d';
%---------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -