createobjective.m
来自「国外专家做的求解LMI鲁棒控制的工具箱,可以相对高效的解决LMI问题」· M 代码 · 共 57 行
M
57 行
function [c,Q,f,onlyfeasible] = createobjective(h,G,options,quad_info)
%CREATEOBJECTIVE Internal function to extract data related to objective function
% Author Johan L鰂berg
% $Id: createobjective.m,v 1.5 2005/03/22 12:32:34 joloef Exp $
onlyfeasible = 0;
nvars = yalmip('nvars');
if isempty(h)
c=zeros(nvars,1);
Q = spalloc(nvars,nvars,0);
f = 0;
if isempty(G)
onlyfeasible = 1;
end
else
[n,m]=size(h);
if n*m>1
error('Scalar expression to minimize please.');
else
% Should check quadratic!!
if ~options.relax & ~isempty(quad_info)
Qh = quad_info.Q;
ch = quad_info.c;
f = quad_info.f;
xvar = quad_info.x;
lmi_variables = getvariables(xvar);
c = zeros(nvars,1);
Q = spalloc(nvars,nvars,0);
for i=1:length(lmi_variables)
c(lmi_variables(i))=ch(i);
end
if nnz(Qh)>0
% This has to be sped up...
for i = 1:length(lmi_variables)
for j = 1:length(lmi_variables)
Q(lmi_variables(i),lmi_variables(j))=Qh(i,j);
end
end
end
else
% A relaxed problem should not calculate quadratic
% decomposistion, fix!
c=zeros(nvars,1);
lmi_variables = getvariables(h);
base = getbase(h);base= base(2:end);
c(lmi_variables) = base;
% for i=1:length(lmi_variables)
% c(lmi_variables(i))=getbasematrix(h,lmi_variables(i));
% end
Q = spalloc(nvars,nvars,0);
f = full(getbasematrix(h,0));
end
end
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?