logic2cont.m

来自「求解线性矩阵不等式简单方便--与LMI工具箱相比」· M 代码 · 共 44 行

M
44
字号
function Fcont = logic2cont(Flogic)

% Author Johan L鰂berg
% $Id: logic2cont.m,v 1.1 2004/08/06 14:23:37 johanl Exp $

Fcont = set([]);
M = 1e3;
% How many elements in this clause
n = size( Flogic.clauses{1},2);
% Are all simple letters?
all_letters = 1;
j = 1;
while all_letters & j<=n    
    if isa(Flogic.clauses{1}{j}.data,'sdpvar')
        all_letters = all_letters &  is(Flogic.clauses{1}{j}.data,'logic');
    else
        all_letters = 0;
    end
    j = j + 1;
end

if all_letters
    sum_or = 0;
    % Ah, simple constraints, just add them
    for j = 1:n
        sum_or = sum_or + Flogic.clauses{i}{j};
    end
else
    sum_or = 0;
    delta = binvar(size( Flogic.clauses{i},2),1);
    for j = 1:size( Flogic.clauses{i},2)
        clause_i_j = Flogic.clauses{i}{j};
        if isa(clause_i_j,'constraint')
            delta = binvar(1,1);
            F = F + set(sdpvar(clause_i_j)+M*(1-delta)>0);
            sum_or = sum_or + delta;
        elseif isa(clause_i_j,'sdpvar')
            F = F + set(clause_i_j);
            sum_or = sum_or + clause_i_j;
        end
    end

end
Fcont = set(sum_or>1);

⌨️ 快捷键说明

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