Dynamic-Calibration/utils/YALMIP-master/extras/@ndsdpvar/subsref.m

39 lines
1.4 KiB
Matlab
Executable File

function X = subsref(Y,refs)
% SUBSREF (overloaded)
if isequal(refs.type,'()')
if length(refs.subs)==3
if length(Y.dim)==3 && isequal(Y.conicinfo,[-1 0])
if length(refs.subs{1})==1 && length(refs.subs{2})==1 && ~isa(refs.subs{1},'char') && ~isa(refs.subs{2},'char')
if strcmp(refs.subs{3},':')
if refs.subs{1} >= 1 && refs.subs{1} <= Y.dim(1)
if refs.subs{2} >= 1 && refs.subs{2} <= Y.dim(2)
X = Y;
X.basis = [spalloc(X.dim(3),1,0) speye(X.dim(3))];
loc = 0:X.dim(1)*X.dim(2):X.dim(1)*X.dim(2)*(X.dim(3)-1);
i = refs.subs{1};
j = refs.subs{2};
X.lmi_variables = X.lmi_variables(loc + i + (j-1)*X.dim(1));
X.conicinfo = [0 0];
X.dim = [1 1 X.dim(3)];
return
end
end
end
end
end
elseif length(refs.subs)==1 && strcmp(refs.subs{1},':')
X = Y;
X.conicinfo = [0 0];
X.dim = [prod(X.dim) 1];
X = sdpvar([],[],[],[],[],[],[],struct(X));
return
end
end
X = Y;
base = reshape(1:size(Y.basis,1),X.dim);
base = subsref(base,refs);
X.basis = X.basis(base(:),:);
X.conicinfo = [0 0];
X.dim = size(base);
X = clean(X);