⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 model.m

📁 国外专家做的求解LMI鲁棒控制的工具箱,可以相对高效的解决LMI问题
💻 M
字号:
function [F,convex,defining_sets,arguments]=model(X,aimforconvexity)
%MODEL  Models complex SDPVAR objects
%
% [F,CONVEXCONCAVE] = epigraph(x)
%
% MODEL defines the constraints needed to 
% model a variable related to an extended operator
% such as min, max, abs, norm, detinv, ...
%
% CONVEXCONCAVE = 1 means that the underlying 
% operator is convex (max,abs,norm)
%
% CONVEXCONCAVE = 0 means that the underlying 
% operator is concave (min, detinv)
%
% CONVEXCONCAVE = -1 means that the underlying 
% operator is neither convex or concave, and has to
% be modelled using an equality (fractional functions)
%
% Examples :
%
% sdpvar x y;
% t = min(x,y);
% [F,convexconcave] = epigraph(t)
% Gives (F = set(t<x) + set(t<y), convexconcave = -1)
%
% sdpvar x y
% t = max(norm([x;y],1+y))
% [F,convexconcave] = epigraph(t)
% Gives (F = set(u<t) + set(1+y<t), convexconcave = 1)
% where u is the variable modelling norm([x;y])

% Author Johan L鰂berg
% $Id: model.m,v 1.17 2005/05/23 12:02:09 joloef Exp $

% Not official, but it is possible
% to send several variables, so we need 
% to loop.
extvar = getvariables(X);
F = set([]);
defining_sets = cell(1,length(extvar));
arguments     = cell(1,length(extvar));
%convex = zeros(1,length(extvar));
old_size = 0;

if nargin == 1
    aimforconvexity = ones(1,length(extvar)); % Not really used yet...
end

for i = 1:length(extvar)
    extstruct = yalmip('extstruct',extvar(i));
    switch extstruct.fcn
        
        case 'mpower'
            F = F + set(extstruct.arg{1} == extstruct.var);
            convex{i} = 0;
            arguments{i} = extstruct.arg;
            
        case 'max'  
            for j = 1:length(extstruct.arg)
                F = F + set(extstruct.var - extstruct.arg{j});
            end
            convex{i} = [1 1 0];
            arguments{i} = extstruct.arg;
            
        case 'min'            
            for j = 1:length(extstruct.arg)
                F = F + set(extstruct.arg{j} - extstruct.var);
            end
            convex{i} = [-1 1 0];
            arguments{i} = extstruct.arg;
            
        case {'rank','dualrank'}
            convex{i} = 0;
            arguments{i} = extstruct.arg;

        otherwise
            try
                if aimforconvexity(i)
                    [Ftemp,convex{i}] = feval(extstruct.fcn,'graph',extstruct.var,extstruct.arg{:});               
                else
                    [Ftemp,convex{i}] = feval(extstruct.fcn,'pwagraph',extstruct.var,extstruct.arg{:});               
                end
%                [Ftemp,convex{i},arguments{i}] = feval(extstruct.fcn,'graph',extstruct.var,extstruct.arg{:});               
                F = F + Ftemp;
            catch                
                error(['Failed when trying to create a model for the "' extstruct.fcn '" operator']);
            end
    end
    convex{i} = [convex{i}(:)' zeros(1,3-length(convex{i}))];
    defining_sets{i} = 1+old_size:length(F);    
    old_size = length(F);
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -