34 lines
1.0 KiB
Mathematica
34 lines
1.0 KiB
Mathematica
|
|
function varargout = eig_yalmip_internal(varargin)
|
||
|
|
|
||
|
|
switch class(varargin{1})
|
||
|
|
|
||
|
|
case 'double'
|
||
|
|
X = varargin{1}(:);
|
||
|
|
n = sqrt(length(X));
|
||
|
|
X = reshape(X,n,n);
|
||
|
|
varargout{1} = eig((X+X')/2);
|
||
|
|
|
||
|
|
case 'sdpvar' % Overloaded operator for SDPVAR objects. Pass on args and save them.
|
||
|
|
|
||
|
|
x = varargin{1};
|
||
|
|
y = yalmip('definemulti',mfilename,x,[size(x,1) 1]);
|
||
|
|
varargout{1} = y;
|
||
|
|
|
||
|
|
case 'char' % YALMIP send 'graph' when it wants the epigraph or hypograph
|
||
|
|
% disp('The EIG operator is not supported in optimization problems.')
|
||
|
|
% error
|
||
|
|
|
||
|
|
t = varargin{2};
|
||
|
|
X = varargin{3};
|
||
|
|
varargout{1} = [];
|
||
|
|
varargout{2} = struct('convexity','none','monotonicity','none','definiteness','none','model','callback');
|
||
|
|
varargout{3} = X;
|
||
|
|
|
||
|
|
% Inofficial way to model several nonlinear variables in
|
||
|
|
% one call
|
||
|
|
% varargout{2}.models = getvariables(t):getvariables(t)+length(X)-1;
|
||
|
|
|
||
|
|
otherwise
|
||
|
|
error('Strange type on first argument in SDPVAR/EIG');
|
||
|
|
end
|