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

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

Added original make3d

File size: 2.6 KB
Line 
1function output = callpensdpm(interfacedata);
2
3% Retrieve needed data
4options = interfacedata.options;
5F_struc = interfacedata.F_struc;
6c       = interfacedata.c;
7K       = interfacedata.K;
8x0      = interfacedata.x0;
9ub      = interfacedata.ub;
10lb      = interfacedata.lb;
11
12% Bounded variables converted to constraints
13if ~isempty(ub)
14    [F_struc,K] = addbounds(F_struc,K,ub,lb);
15end
16
17% *******************************
18% CONVERT FROM INTERNAL FORMAT
19% *******************************
20penstruct = sedumi2pen(F_struc,K,c,x0);
21
22% **************************
23% COPY OPTIONS
24% **************************
25ops = struct2cell(options.pensdp);ops = [ops{1:end}];
26penstruct.ioptions = ops(1:8);
27penstruct.foptions = ops(9:end);
28penstruct.ioptions(4) = max(0,min(3,options.verbose+1));
29if penstruct.ioptions(4)==1
30    penstruct.ioptions(4)=0;
31end
32
33% FIX
34if penstruct.mconstr == 0
35    penstruct.msizes = [];
36end
37
38if options.savedebug
39    save pensdpdebug penstruct
40end
41
42%**************************
43% CALL PENSDP
44%**************************
45showprogress('Calling PENSDP',options.showprogress);
46solvertime = clock;
47[x, fx, u, iresults, fresults, iflag] = pen(penstruct);
48solvertime = etime(clock,solvertime);
49
50% Get dual variable (this must be possible to do easier...)
51u = u(:);
52D_struc = u(1:1:K.l);
53if length(K.s)>0
54    if K.s(1)>0
55        pos = K.l+1;
56        for i = 1:length(K.s)
57            temp = zeros(K.s(i),K.s(i));
58            vecZ = u(pos:pos+0.5*K.s(i)*(K.s(i)+1)-1);
59            top = 1;
60            for j = 1:K.s(i)
61                len = K.s(i)-j+1;
62                temp(j:end,j)=vecZ(top:top+len-1);top=top+len;
63            end
64            temp = (temp+temp');j = find(speye(K.s(i)));temp(j)=temp(j)/2;
65            D_struc = [D_struc;temp(:)];
66            pos = pos + (K.s(i)+1)*K.s(i)/2;
67        end
68    end
69end
70
71switch iflag
72case 0
73    problem = 0;
74case 1
75    problem = 4;
76case 2
77    problem = 1;
78case 3
79    problem = 4;
80case 4
81    problem = 3;
82case 5
83    problem = 7;
84case 6
85    problem = 11;
86case 7
87    problem = 9;
88otherwise
89    problem = -1;
90end   
91infostr = yalmiperror(problem,'PENSDP/TOMLAB');
92
93if options.savesolveroutput
94    solveroutput.f = f;
95    solveroutput.x = x;
96    solveroutput.u = u;
97    solveroutput.iflag = iflag;
98    solveroutput.niter = niter;
99    solveroutput.feas = feas;
100else
101    solveroutput = [];
102end
103if options.savesolverinput
104    solverinput.penstruct = penstruct;
105else
106    solverinput = [];
107end
108
109% Standard interface
110output.Primal      = x(:);
111output.Dual        = D_struc;
112output.Slack       = [];
113output.problem     = problem;
114output.infostr     = infostr;
115output.solverinput = solverinput;
116output.solveroutput= solveroutput;
117output.solvertime  = solvertime;
118
119
120
121
Note: See TracBrowser for help on using the repository browser.