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

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

Added original make3d

File size: 4.1 KB
Line 
1function [g,geq,dg,dgeq] = fmincon_con(x,params)
2
3% Early bail for linear problems
4if params.linearconstraints%isempty(params.interfacedata.evalMap) & isempty(params.interfacedata.Anonlinineq) & isempty(params.interfacedata.Anonlineq) & isequal( params.interfacedata.K.q,0) & isequal( params.interfacedata.K.s,0)
5    g = [];
6    geq = [];
7    return
8end
9
10xevaled = zeros(1,length(params.interfacedata.c));
11xevaled(params.linearindicies) = x;
12
13% Experimental support for arbitrary functions
14% nonlinear expressions inside sin() exp() etc
15if ~isempty(params.interfacedata.evalMap)
16    pp = params.monomtable(params.nonlinearindicies,:);
17    xevaled(params.nonlinearindicies) = prod(repmat(xevaled,length(params.nonlinearindicies),1).^pp,2);
18
19    for i = 1:length(params.interfacedata.evalMap)
20        arguments = {params.interfacedata.evalMap{i}.fcn,xevaled(params.interfacedata.evalMap{i}.variableIndex)};
21        arguments = {arguments{:},params.interfacedata.evalMap{i}.arg{2:end-1}};
22        xevaled(params.interfacedata.evalVariables(i)) = feval(arguments{:});       
23    end
24end
25pp = params.monomtable(params.nonlinearindicies,:);
26xevaled(params.nonlinearindicies) = prod(repmat(xevaled,length(params.nonlinearindicies),1).^pp,2);
27
28if params.nonlinearinequalities
29    g = params.interfacedata.Anonlinineq*xevaled(:)-params.interfacedata.bnonlinineq;
30else
31    g = [];
32end
33
34if params.nonlinearequalities
35    geq = params.interfacedata.Anonlineq*xevaled(:)-params.interfacedata.bnonlineq;
36else
37    geq = [];
38end
39
40K = params.interfacedata.K;
41top = 1;
42if K.q(1) > 0
43    for i = 1:length(K.q)
44        Axcd = params.interfacedata.F_struc(top:top+K.q(i)-1,:)*[1;xevaled(:)];
45        g = [g;-(Axcd(1)^2-norm(Axcd(2:end),2)^2)];
46        top = top + K.q(i);
47    end
48end
49if K.s(1) > 0
50    for i = 1:length(K.s)
51        CminusA = params.interfacedata.F_struc(top:top+K.s(i)^2-1,:)*[1;xevaled(:)];
52        CminusA = reshape(CminusA,K.s(i),K.s(i));
53        [R,p] = chol(CminusA);
54        if p
55            g = [g;-min(eig(CminusA))];
56        else
57            g = [g;-log(det(CminusA))];
58        end
59        top = top + K.s(i)^2;
60    end
61end
62
63%
64% dg = [];
65% dgeq = [];
66% if params.SimpleNonlinearConstraints   
67%     dg = [];   
68%     allA = [params.interfacedata.Anonlineq;params.interfacedata.Anonlinineq];
69%     for i = 1:length(params.linearindicies)
70%         xevaled = zeros(1,length(params.interfacedata.c));
71%         xevaled(params.linearindicies) = x;
72%         mt = params.monomtable;
73%         oldpower = mt(:,params.linearindicies(i));
74%         mt(:,params.linearindicies(i)) = mt(:,params.linearindicies(i))-1;
75%         xevaled = prod(repmat(xevaled,size(mt,1),1).^mt,2);       
76%         xevaled = xevaled(:)'.*oldpower';xevaled(isnan(xevaled))=0;
77%         dg = [dg allA*xevaled'];
78%     end     
79%     dgeq = dg(1:size(params.interfacedata.Anonlineq,1),:)';
80%     dg = dg(size(params.interfacedata.Anonlineq,1)+1:end,:)';
81%     %full(dgeq')
82% end
83
84%
85% dg = [];
86% dgeq = [];
87% if params.SimpleNonlinearConstraints   
88%     dg = [];   
89%     allA = [params.interfacedata.Anonlineq;params.interfacedata.Anonlinineq];
90%      mt = params.monomtable;
91%     xe = zeros(1,length(params.interfacedata.c));
92%     xe(params.linearindicies) = x;   
93%     xx = xe;
94%     xe = repmat(xe,size(mt,1),1).^mt;       
95%   
96%     for i = 1:length(params.linearindicies)
97%        % xevaled = zeros(1,length(params.interfacedata.c));
98%        % xevaled(params.linearindicies) = x;
99%
100%         oldpower = mt(:,params.linearindicies(i));
101%         newpower = oldpower-1;
102% %        mt(:,params.linearindicies(i)) = mt(:,params.linearindicies(i))-1;
103%         xevaled = xe;xevaled(params.linearindicies(i),:) = xx(params.linearindicies(i),:)
104%         xevaledparams.linearindicies(i)) = xevaled(params.linearindicies(i),:).^newpower';
105%         xevaled = prod(xevaled,2);       
106%         xevaled = xevaled(:)'.*oldpower';xevaled(isnan(xevaled))=0;
107%         dg = [dg allA*xevaled'];
108%     end     
109%     dgeq = dg(1:size(params.interfacedata.Anonlineq,1),:)';
110%     dg = dg(size(params.interfacedata.Anonlineq,1)+1:end,:)';
111%     full(dgeq)
112% end
113%
114
115
116
Note: See TracBrowser for help on using the repository browser.