39 lines
1.4 KiB
Matlab
Executable File
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); |