📄 ismember_internal.m
字号:
function YESNO = ismember_internal(x,p)
%ISMEMBER_INTERNAL Helper for ISMEMBER
% Author Johan L鰂berg
% $Id: ismember_internal.m,v 1.7 2006/12/07 18:12:17 joloef Exp $
if isa(x,'sdpvar') & isa(p,'polytope')
if length(p) == 1
[H,K] = double(p);
if min(size(x))>1
error('first argument should be a vector');
end
if length(x) == size(H,2)
x = reshape(x,length(x),1);
YESNO = set(H*x <= K);
return
else
error('Dimension mismatch.');
end
else
d = binvar(length(p),1);
YESNO = set(sum(d)==1);
for i = 1:length(p)
[H,K] = double(p(i));
if min(size(x))>1
error('first argument should be a vector');
end
if length(x) == size(H,2)
x = reshape(x,length(x),1);
lhs = H*x-K;
[M,m] = derivebounds(lhs);
YESNO = YESNO + set(H*x-K <= M.*(1-extsubsref(d,i)));
else
error('Dimension mismatch.');
end
end
end
return
end
if isa(x,'sdpvar') & isa(p,'double')
x = reshape(x,prod(x.dim),1);
p = p(:);
% [M,m]=derivebounds(x);
%
% maxp = max(p);
% minp = min(p);
% for i = 1:length(M)
% M(i) = min(M(i),maxp);
% m(i) = max(m(i),minp);
% end
Delta = binvar(length(x),length(p),'full');
F = set(sum(Delta,2) == 1);
%
% % Quick version
% xrep = repmat(x,length(p),1);
% prep = kron(p,ones(length(x),1));
% mrep = repmat(m,length(p),1);
% Mrep = repmat(M,length(p),1);
% drep = reshape(Delta,prod(size(Delta)),1);
% F = F + set(x == Delta*prep);
F = F + set(x == Delta*p);
% F = F + set((mrep-prep).*(1-drep) <= xrep-prep <= (Mrep - prep).*(1-drep));
% Slow version
% for j = 1:length(x)
% xi = extsubsref(x,j,1);
% % delta = binvar(length(p),1);
% % F = F + set(sum(delta) == 1);
% for i = 1:length(p)
% di = extsubsref(Delta,j,i);
% mi = m - p(i);
% Mi = M - p(i);
% F = F + set(mi*(1-di) <= xi - p(i) <= Mi*(1-di));
% end
% end
YESNO = F;
return
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -