📄 updatelmi.m
字号:
function sys = updatelmi(F,thelmi)
%updatelmi (OBSOLETE) Updates the numerical content of a symbolic LMI
%
% F = UPDATELMI(F,n) Updates the n'th symbolic LMIs
% F = UPDATELMI(F,'tag') Updates the symbolic LMIs having specified tag
%
% See also LMI, DELLMI
% Author Johan L鰂berg
% $Id: updatelmi.m,v 1.2 2004/07/19 13:54:37 johanl Exp $
error('updatelmi is obsolete');
if nargin ~=2
error('UPPDATELMI needs two argument')
end
if ~(isa(F,'lmi') & (isa(thelmi,'double') | isa(thelmi,'char')))
error('First argument should be an lmi object and second argument integer or string')
end
% If indexed using handle, convert to index
if isa(thelmi,'char')
thelmitemp = [];
for i = 1:size(F.AllConstraints,2)
if strcmp(F.AllConstraints{i}.handle,thelmi)
thelmitemp=[thelmitemp i];
end
end
% for i = 1:size(F.Equalities,2)
% if strcmp(F.Equalities{i}.handle,thelmi)
% thelmitemp=[thelmitemp i+size(F.AllConstraints,2)];
% end
% end
if isempty(thelmitemp)
em = ['LMI ''' thelmi ''' not available.'];
error(em)
else
thelmi = thelmitemp;
end
end
% Checks so that it exist
if any((thelmi<1)) | any((thelmi>size(F.AllConstraints,2)))
em = ['LMI #' num2str(thelmi) ' not available.'];
error(em)
end
for j = 1:length(thelmi)
nlmi = thelmi(j);
% Get the old symbolic expression
if (nlmi>size(F.AllConstraints,2))
% An equality constraint
nlmi = nlmi-size(F.AllConstraints,2);
X = F.Equalities{nlmi}.symbolic;
eq = 1;
else
% LMI
X = F.AllConstraints{nlmi}.symbolic;
eq = 0;
end
% Check for symbolic value
if strcmpi('Numeric value',X)
error('Numeric LMIs cannot be updated');
end
% Parse the LMI
sdpvarExpr = parseLMI(X);
X = strrep(X,'.>','>');
X = strrep(X,'.<','<');
X = strrep(X,'=','==');X = strrep(X,'====','==');
try
Fi=evalin('caller',sdpvarExpr);
catch
error(lasterr)
end
TypeofConstraint = gethackflag(Fi);
% User just sent a sdpvar object, interpret as X>0
if (TypeofConstraint==0)
TypeofConstraint = 1;
end
% check so that LMIs are symmetric
if (TypeofConstraint == 1)
[n,m]=size(Fi);
if (n~=m) | (~issymmetric(Fi)) |(n*m==1)
TypeofConstraint = 2; %Change to elementwise
end
end
% Check the normbound
if (TypeofConstraint == 4)
[n,m]=size(Fi);
if m~=1
error('Norm ||..|| must look like || vector ||< scalar, or scalar>|| vector ||')
end
end
sys=F;
switch TypeofConstraint
case {1,2,3,4}
sys.AllConstraints{nlmi}.data=Fi;
sys.AllConstraints{nlmi}.type = TypeofConstraint;
sys.AllConstraints{nlmi}.symbolic=X;
otherwise
error('Error in argument.');
end
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -