diag.m
来自「国外专家做的求解LMI鲁棒控制的工具箱,可以相对高效的解决LMI问题」· M 代码 · 共 46 行
M
46 行
function Y=diag(X,k)
%DIAG (overloaded)
% Author Johan L鰂berg
% $Id: diag.m,v 1.3 2005/01/21 08:30:33 johanl Exp $
Y = X;
n = X.n;
m = X.m;
if nargin == 1
k = 0;
end
% If it is a vector, all variables will be used
% so we have special code for this case
if min([n m])==1
diagX = diag(X.basis(:,1),k);
Y.basis = diagX(:);
for i = 1:length(X.lmi_variables)
diagX = diag(X.basis(:,i+1),k);
Y.basis(:,i+1) = diagX(:);
end
Y.lmi_variables = X.lmi_variables;
Y.n = size(diagX,1);
Y.m = size(diagX,2);
else
lmi_variables = [];
x_lmi_variables = X.lmi_variables;
diagX = diag(reshape(X.basis(:,1),n,m),k);
Y.basis = diagX(:);
j = 1;
for i = 1:length(x_lmi_variables)
diagX = diag(reshape(X.basis(:,i+1),n,m),k);
if (norm(diagX,inf)>0)
Y.basis(:,j+1) = diagX(:);
lmi_variables = [lmi_variables x_lmi_variables(i)];
j = j+1;
end
end
Y.lmi_variables = lmi_variables;
Y.n = size(diagX,1);
Y.m = size(diagX,2);
end
Y = clean(Y);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?