recdef.m

来自「国外专家做的求解LMI鲁棒控制的工具箱,可以相对高效的解决LMI问题」· M 代码 · 共 40 行

M
40
字号
function [w,F,DefinedMonoms] = recdef(pow,F,DefinedMonoms,setinitials);

% Author Johan L鰂berg
% $Id: recdef.m,v 1.3 2005/04/29 08:05:01 joloef Exp $

% Recursively define monomial x(pow(1))*x(pow(2))*x(pow(3))..
% using a set of linear variables and bilinear constraints
switch length(pow)
    case 1
        % Just a linear variable, no constraints needed
        w = recover(pow);
    case 2
        % Quadratic
        w = sdpvar(1,1);
        if setinitials
            assign(w,double(prod(recover(pow))));
        end
        F = F + set(prod(recover(pow)) == w);        
    otherwise
        i = 1;
        found = 0;
        while ~found & i <= length(DefinedMonoms)
            if isequal(pow,DefinedMonoms(i).power)           
                w = recover(DefinedMonoms(i).variable);
                return
            end
            i = i + 1;
        end
        pow1 = pow(1:floor(length(pow)/2));
        pow2 = pow(1+floor(length(pow)/2):end);
        [w1,F,DefinedMonoms] = recdef(pow1,F,DefinedMonoms,setinitials);
        [w2,F,DefinedMonoms] = recdef(pow2,F,DefinedMonoms,setinitials);
        w = sdpvar(1,1);
        F = F + set(w1*w2 == w);
        if setinitials
            assign(w,double(w1*w2));
        end
        DefinedMonoms(end+1).power = pow;
        DefinedMonoms(end).variable = getvariables(w);
end

⌨️ 快捷键说明

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