Dynamic-Calibration/utils/YALMIP-master/extras/InstantiateElementWise.m

29 lines
748 B
Mathematica
Raw Normal View History

2019-12-18 11:25:45 +00:00
function y = InstantiateElementWise(funName,varargin);
if length(varargin{1}) == 1
y = yalmip('define',funName,varargin{:});
else
y = [];
args = varargin{1};
dims = size(args);
args = args(:);
Base = getbase(args);
iD = ~any(Base(:,2:end),2);
iS = any(Base(:,2:end),2);
if nnz(iD)>0
iD = find(iD);
varargin{1} = args(iD);
yDoubles = feval(funName,varargin{:});
else
yDoubles = [];
iD = [];
end
iS = find(iS);
args = args(iS);
for i = 1:length(args)
varargin{1} = args(i);
y = [y;yalmip('define',funName,varargin{:})];
end
y = sparse([iD;iS],ones(length(iD)+length(iS),1),[yDoubles;y],prod(dims),1);
y = reshape(y,dims);
end