42 lines
1.5 KiB
Matlab
Executable File
42 lines
1.5 KiB
Matlab
Executable File
function [f,err] = fmincon_funn(cbData,nRow,x,njdiff,dXjbase,reserved,inParam)
|
|
|
|
persistent params hash xevaled oldh F
|
|
if nargin == 7
|
|
params = inParam;
|
|
hash = randn(1,length(params.linearindicies));
|
|
oldh = randn(1);
|
|
xevaled = zeros(1,length(params.interfacedata.c));
|
|
F = [];
|
|
return
|
|
end
|
|
|
|
x = x(1:length(params.linearindicies));
|
|
|
|
if x(:)'*hash(:) ~= oldh
|
|
oldh = x(:)'*hash(:);
|
|
xevaled = zeros(1,length(params.interfacedata.c));
|
|
xevaled(params.linearindicies) = x;
|
|
|
|
% Experimental support for arbitrary functions
|
|
if ~isempty(params.interfacedata.evalMap)
|
|
|
|
pp = params.monomtable(params.nonlinearindicies,:);
|
|
xevaled(params.nonlinearindicies) = prod(repmat(xevaled,length(params.nonlinearindicies),1).^pp,2);
|
|
|
|
for i = 1:length(params.interfacedata.evalMap)
|
|
arguments = {params.interfacedata.evalMap{i}.fcn,xevaled(params.interfacedata.evalMap{i}.variableIndex)};
|
|
arguments = {arguments{:},params.interfacedata.evalMap{i}.arg{2:end-1}};
|
|
xevaled(params.interfacedata.evalVariables(i)) = feval(arguments{:});
|
|
end
|
|
end
|
|
xevaled(params.nonlinearindicies) = prod(repmat(xevaled,length(params.nonlinearindicies),1).^params.monomtable(params.nonlinearindicies,:),2);
|
|
xevaled = xevaled(:);
|
|
F = -params.F_struc*[1;xevaled];
|
|
end
|
|
|
|
if nRow == -1
|
|
f = params.interfacedata.c'*xevaled+xevaled'*params.interfacedata.Q*xevaled;
|
|
else
|
|
f = F(nRow + 1);%-params.F_struc(nRow + 1,:)*[1;xevaled];
|
|
end
|
|
err = 0; |