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

📄 fmincon_con.m

📁 国外专家做的求解LMI鲁棒控制的工具箱,可以相对高效的解决LMI问题
💻 M
字号:
function [g,geq] = fmincon_con(x,dummy1,dummy2,dummy4)

persistent interfacedata
persistent monomtable
persistent nonlinearindicies
persistent linearindicies
persistent xx
if nargin == 4
    interfacedata = dummy4;
    monomtable = interfacedata.monomtable;
    nonlinearindicies = interfacedata.nonlinearindicies;
    linearindicies = interfacedata.linearindicies;
    xx=ones(1,size(interfacedata.monomtable,2));     
    return
end

xx(linearindicies) = x(:)';

for i = 1:length(nonlinearindicies)
    xx(nonlinearindicies(i)) = prod(xx.^monomtable(nonlinearindicies(i),:));
end

if ~isempty(interfacedata.Anonlinineq)
    A = interfacedata.Anonlinineq;
    b = interfacedata.bnonlinineq;
    g = A*xx(:)-b;
else
    g = [];
end

if ~isempty(interfacedata.Anonlineq)
    Aeq = interfacedata.Anonlineq;
    beq = interfacedata.bnonlineq;
    geq = Aeq*xx(:)-beq;
else
    geq = [];
end

K = interfacedata.K;
top = 1;
if K.q(1) > 0
    for i = 1:length(K.q)
        Axcd = interfacedata.F_struc(top:top+K.q(i)-1,:)*[1;xx(:)];
        g = [g;-(Axcd(1)^2-norm(Axcd(2:end),2)^2)];
        top = top + K.q(i);
    end
end
if K.s(1) > 0
    for i = 1:length(K.s)
        CminusA = interfacedata.F_struc(top:top+K.s(i)^2-1,:)*[1;xx(:)];
        CminusA = reshape(CminusA,K.s(i),K.s(i));
        [R,p] = chol(CminusA);
        if p
            % Extend beyond singularity with linear function. Hack...
            %gi = -det(CminusA);                        
            %gi = (log(1e-2)+(gi-1e-2)/1e-2);
            %g = [g;(gi)];
            g = [g;-min(eig(CminusA))];
        else
            g = [g;-log(det(CminusA))];
            %g = [g;- 2*sum(log(diag(CminusA)))]; % -logdet(cminusA)
        end
        top = top + K.s(i)^2;
    end
end

⌨️ 快捷键说明

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