source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/opt/yalmip/extras/fmincon_fun.m @ 37

Last change on this file since 37 was 37, checked in by (none), 14 years ago

Added original make3d

File size: 1.8 KB
Line 
1function [f,df] = fmincon_fun(x,params)
2
3xevaled = zeros(1,length(params.interfacedata.c));
4xevaled(params.linearindicies) = x;
5
6% Experimental support for arbitrary functions
7if ~isempty(params.interfacedata.evalMap)
8    pp = params.monomtable(params.nonlinearindicies,:);
9    xevaled(params.nonlinearindicies) = prod(repmat(xevaled,length(params.nonlinearindicies),1).^pp,2);
10    for i = 1:length(params.interfacedata.evalMap)
11        arguments = {params.interfacedata.evalMap{i}.fcn,xevaled(params.interfacedata.evalMap{i}.variableIndex)};
12        arguments = {arguments{:},params.interfacedata.evalMap{i}.arg{2:end-1}};
13        xevaled(params.interfacedata.evalVariables(i)) = feval(arguments{:});
14    end
15end
16
17xevaled(params.nonlinearindicies) = prod(repmat(xevaled,length(params.nonlinearindicies),1).^params.monomtable(params.nonlinearindicies,:),2);
18
19xevaled = xevaled(:);
20f = params.interfacedata.c'*xevaled+xevaled'*params.interfacedata.Q*xevaled;
21
22if params.SimpleLinearObjective
23    df = params.interfacedata.c(params.linearindicies);
24elseif params.SimpleQuadraticObjective
25    df = params.interfacedata.c(params.linearindicies) + 2*params.interfacedata.Q(params.linearindicies,params.linearindicies)*x;
26elseif params.SimpleNonlinearObjective
27    df = [];
28    for i = 1:length(params.linearindicies)
29        xevaled = zeros(1,length(params.interfacedata.c));
30        xevaled(params.linearindicies) = x;
31        mt = params.monomtable;
32        oldpower = mt(:,params.linearindicies(i));
33        mt(:,params.linearindicies(i)) = mt(:,params.linearindicies(i))-1;
34        xevaled = prod(repmat(xevaled,size(mt,1),1).^mt,2);
35        xevaled = xevaled(:)'.*oldpower';xevaled(isnan(xevaled))=0;
36        df = [df;params.interfacedata.c'*xevaled'];
37    end
38    df = df + 2*params.interfacedata.Q(params.linearindicies,params.linearindicies)*x;
39else
40    df = [];
41end
Note: See TracBrowser for help on using the repository browser.