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

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

Added original make3d

File size: 1.9 KB
Line 
1function [C,A,b,blk] = sdpt3struct2sdpt3block(F_struc,c,K)
2%SDPT3STRUCT2SDPT3BLOCK Internal function to convert data to SDPT3 format
3
4% Author Johan Löfberg
5% $Id: sdpt3struct2sdpt3block.m,v 1.2 2004/07/02 08:17:31 johanl Exp $
6
7
8nvars = size(F_struc,2)-1;
9block  = 1;
10top = 1;
11block = 1;
12blksz = 100;
13
14if K.l>0
15        blk{block,1} = 'l';
16        blk{block,2} = K.l;
17        C{block,1} = sparse(F_struc(top:top+K.l-1,1));
18        for var_index = 1:nvars
19                A{block,var_index} =  -sparse(F_struc(top:top+K.l-1,var_index+1));
20        end
21        block = block+1;
22        top = top+sum(K.l);
23end
24
25if K.q>0
26        blk{block,1} = 'q';
27        blk{block,2} = K.q;
28        C{block,1} = sparse(F_struc(top:top+sum(K.q)-1,1));
29        for var_index = 1:nvars
30                A{block,var_index} =  -sparse(F_struc(top:top+sum(K.q)-1,var_index+1));
31        end   
32        block = block+1;
33        top = top+sum(K.q);
34end
35
36if K.s>0
37        constraints = 1;
38        while constraints<=length(K.s)
39                n = K.s(constraints);
40                Cvec = F_struc(top:top+n^2-1,1);
41                C{block,1} = reshape(Cvec,n,n);
42                for var_index = 1:nvars
43                        Avec = -F_struc(top:top+n^2-1,var_index+1);
44                        A{block,var_index} = reshape(Avec,n,n);
45                end
46                blk{block,1} = 's';
47                blk{block,2} = n;
48                top = top+n^2;
49                constraints = constraints+1;
50                sum_n = n;
51                while (sum_n<blksz) & (constraints<=length(K.s))
52                        n = K.s(constraints);
53                        Cvec = F_struc(top:top+n^2-1,1);
54                        C{block,1} = blkdiag(C{block,1},reshape(Cvec,n,n));
55            [n1,m1] = size(A{block,var_index});
56            [n2,m2] = size(reshape(-F_struc(top:top+n^2-1,1+1),n,n));
57            Z = spalloc(n1,m2,0);
58                        for var_index = 1:nvars
59                                Avec = -F_struc(top:top+n^2-1,var_index+1);
60                                A{block,var_index} = [A{block,var_index} Z;Z' reshape(Avec,n,n)];
61                        end
62                        blk{block,2} = [blk{block,2} n];
63                        top = top+n^2;
64                        sum_n = sum_n+n;
65                        constraints = constraints+1;
66                end
67                block = block+1;
68        end
69end
70
71% And we solve dual...
72b = -c(:);
73
74% blkdiag with 2 sparse blocks
75function y = blkdiag(x1,x2)
76[n1,m1] = size(x1);
77[n2,m2] = size(x2);
78Z = spalloc(n1,m2,0);
79y = [x1 Z;Z' x2];
Note: See TracBrowser for help on using the repository browser.