source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/opt/yalmip/solvers/calllmirank.m @ 37

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

Added original make3d

File size: 2.4 KB
Line 
1function output = calllmirank(interfacedata)
2
3% Author Johan Löfberg
4% $Id: calllmirank.m,v 1.10 2005/06/06 16:42:13 joloef Exp $
5
6% Retrieve needed data
7options = interfacedata.options;
8F_struc = interfacedata.F_struc;
9c       = interfacedata.c;
10K       = interfacedata.K;
11x0      = interfacedata.x0;
12ub      = interfacedata.ub;
13lb      = interfacedata.lb;
14
15% Bounded variables converted to constraints
16if ~isempty(ub)
17    [F_struc,K] = addbounds(F_struc,K,ub,lb);
18end
19
20pars = options.lmirank;
21pars.fid = double(options.verbose);
22
23if ~options.usex0
24    interfacedata.options.verbose =  max(0,interfacedata.options.verbose - 1);
25    initialsolver = eval(['@' interfacedata.solver.initialsolver.call]);
26    start = K.l;
27    b = zeros(size(F_struc,2)-1,1);
28    for j=1:length(K.s)
29        if K.s(j)~=K.rank(j)
30            ind = find(speye(K.s(j)));           
31            for i=1:size(F_struc,2)-1
32                b(i,1) = b(i,1) + sum(F_struc(start+ind,1+i));
33            end
34        end
35        start=start+K.s(j)^2;
36    end
37    interfacedata.c = b;
38    interfacedata.solver = interfacedata.solver.initialsolver;
39    output = feval(initialsolver,interfacedata);
40    if output.problem ~= 1
41        options.usex0 = 1;       
42        x0 = output.Primal;
43    else
44        return;
45    end
46end
47
48if options.savedebug
49    At = -F_struc(:,2:end);
50    C  = F_struc(:,1);
51    save lmirankdebug C At K pars x0
52end
53
54if options.showprogress;showprogress(['Calling ' interfacedata.solver.tag],options.showprogress);end
55solvertime = clock;
56if options.usex0
57    [y,info] = lmirank(-F_struc(:,2:end),F_struc(:,1),K,pars,x0);
58else
59    [y,info] = lmirank(-F_struc(:,2:end),F_struc(:,1),K,pars);
60end
61x = y;
62solvertime = etime(clock,solvertime);
63
64
65switch info.solved
66    case 1
67        problem = 0;
68    otherwise
69        problem = 11;
70end
71
72% Duals not computed
73D_struc = [];
74
75% Save ALL data sent to solver
76if options.savesolverinput
77    solverinput.At = -F_struc(:,2:end);
78    solverinput.c = F_struc(:,1);
79    solverinput.K = K; 
80    solverinput.pars = pars;
81    solverinput.x0 = x0;
82else
83    solverinput = [];
84end
85
86% Save ALL data from the solution?
87if options.savesolveroutput
88    solveroutput.y = y;
89    solveroutput.info = info;   
90else
91    solveroutput = [];
92end
93
94% Standard interface
95output.Primal      = x;
96output.Dual        = [];
97output.Slack       = [];
98output.problem     = problem;
99output.solverinput = solverinput;
100output.solveroutput= solveroutput;
101output.solvertime  = solvertime;
Note: See TracBrowser for help on using the repository browser.