📄 fmincon_fun.m
字号:
function [f,df] = fmincon_fun(x,params)
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.interfacedata.c'*xevaled+xevaled'*params.interfacedata.Q*xevaled;
if params.SimpleLinearObjective
df = params.interfacedata.c(params.linearindicies);
elseif params.SimpleQuadraticObjective
df = params.interfacedata.c(params.linearindicies) + 2*params.interfacedata.Q(params.linearindicies,params.linearindicies)*x;
elseif params.SimpleNonlinearObjective
df = [];
for i = 1:length(params.linearindicies)
xevaled = zeros(1,length(params.interfacedata.c));
xevaled(params.linearindicies) = x;
mt = params.monomtable;
oldpower = mt(:,params.linearindicies(i));
mt(:,params.linearindicies(i)) = mt(:,params.linearindicies(i))-1;
xevaled = prod(repmat(xevaled,size(mt,1),1).^mt,2);
xevaled = xevaled(:)'.*oldpower';xevaled(isnan(xevaled))=0;
df = [df;params.interfacedata.c'*xevaled'];
end
df = df + 2*params.interfacedata.Q(params.linearindicies,params.linearindicies)*x;
else
df = [];
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -