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

📄 or.m

📁 国外专家做的求解LMI鲁棒控制的工具箱,可以相对高效的解决LMI问题
💻 M
字号:
function varargout = or(varargin)
%OR (overloaded)

% Author Johan L鰂berg 
% $Id: or.m,v 1.3 2005/04/29 16:28:03 joloef Exp $   

% Models OR using a nonlinear operator definition
switch class(varargin{1})
    case 'char'
        z = varargin{2};
        X = varargin{3};
        Y = varargin{4};        
      
        F = set([]);                
        switch class(X)
            case 'sdpvar'
                x = X;
                xvars = getvariables(x);               
                allextvars = yalmip('extvariables');
                if (length(xvars)==1) & ismembc(xvars,allextvars)
                    [x,F] = expandor(x,allextvars,F);
                end

            case 'constraint'
                x = binvar(1,1);
                F = F + set(iff(X,x));
            otherwise
        end
        switch class(Y)
            case 'sdpvar'
                y = Y;
                yvars = getvariables(y);
                allextvars = yalmip('extvariables');
                if (length(yvars)==1) & ismembc(yvars,allextvars)
                    [y,F] = expandor(y,allextvars,F);
                end
            case 'constraint'
                y = binvar(1,1);
                F = F + set(iff(Y,y));
            otherwise
        end

        xy = [x y];
        
        varargout{1} = F + set(sum(xy) > z) + set(z > xy) +set(binary(z));
        varargout{2} = 0;
        varargout{3} = [];

    case {'sdpvar','constraint'}
        x = varargin{1};
        y = varargin{2};
        varargout{1} = yalmip('addextendedvariable','or',varargin{:});

    otherwise
end


function [x,F] = expandor(x,allextvars,F)

xmodel = yalmip('extstruct',getvariables(x));

if isequal(xmodel.fcn,'or')
    X1 = xmodel.arg{1};
    X2 = xmodel.arg{2};


    switch class(X1)
        case 'sdpvar'
            x1 = X1;
            xvars = getvariables(x1);
            if ismembc(xvars,allextvars)
                [x1,F] = expandor(x1,allextvars,F);
            end

        case 'constraint'
            x1 = binvar(1,1);
            F = F + set(iff(X1,x1));
        otherwise
    end
    switch class(X2)
        case 'sdpvar'
            x2 = X2;
            yvars = getvariables(x2);
            if ismembc(yvars,allextvars)
                [x2,F] = expandor(x2,allextvars,F);
            end
        case 'constraint'
            x2 = binvar(1,1);
            F = F + set(iff(X2,x2));
        otherwise
    end

    x = [x1 x2];
end

⌨️ 快捷键说明

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