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

📄 sedumi2dsdp.m

📁 国外专家做的求解LMI鲁棒控制的工具箱,可以相对高效的解决LMI问题
💻 M
字号:
function [C,A,b,blk] = sedumi2dsdp(F_struc,c,K)
%SEDUMI2DSDP Internal function to convert SeDuMi structure to format needed in DSDP

% Author Johan L鰂berg
% $Id: sedumi2dsdp.m,v 1.2 2004/07/02 08:17:32 johanl Exp $

nvars = size(F_struc,2)-1;
A = [];
block  = 1; 
top = 1;

if K.l>0
    blk{block,1} = 'diag';
    blk{block,2} = K.l;
    C{block,1} = sparse(F_struc(1:K.l,1));
    for var_index = 1:nvars
        A{block,var_index} = -sparse(F_struc(1:K.l,var_index+1));
    end 
    block = block+1;
    top = top+K.l;
end

% if K.q>0
%     constraints = 1;
%     while (constraints<=length(K.q))
%         n = K.q(constraints);
%         Cvec = F_struc(top:top+n-1,1);
%         C{block,1} = [Cvec(1) Cvec(2:end)';Cvec(2:end) Cvec(1)*speye(n-1,n-1)];
%         Avec = -F_struc(top:top+n-1,2:end);
%         for var_index = 1:nvars
%             lh = Avec(2:end,var_index);
%             rh = Avec(1,var_index);
%             A{block,var_index} = [rh lh';lh rh*speye(n-1)];
%         end
%         blk{block,1} = 'nondiag';
%         blk{block,2} = n;
%         constraints = constraints+1;
%         block = block+1;
%         top = top+n;
%     end
% end

if K.s>0
    constraints = 1;
    while (constraints<=length(K.s))
        n = K.s(constraints);
        Cvec = F_struc(top:top+n^2-1,1);
        C{block,1} = reshape(Cvec,n,n);
        Avec = -F_struc(top:top+n^2-1,(1:nvars)+1);
        Avec = reshape(Avec,n,n*nvars);
        left = 1;
        for var_index = 1:nvars
            A{block,var_index} = Avec(:,left:left+n-1);left = left+n;
        end
        blk{block,1} = 'nondiag';
        blk{block,2} = n;
        constraints = constraints+1;
        block = block+1;
        top = top+n*n;
    end
end
% And we solve dual...
b = -c(:);

⌨️ 快捷键说明

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