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

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

Added original make3d

File size: 1.6 KB
Line 
1function sys = unblkdiag(F)
2% UNBLOCKDIAG Extracts diagonal blocks
3%
4% G = unblkdiag(F) Detects and converts block diagonal SDP.
5%
6% See also DISSECT
7
8% Author Johan Löfberg
9% $Id: unblkdiag.m,v 1.4 2006/01/17 15:49:08 joloef Exp $
10
11switch class(F)
12    case 'lmi'
13        sys = set([]);
14        for i = 1:length(F)
15            if is(F(i),'sdp') % SDP
16                Z = sdpvar(F(i));
17                X = spy(Z);
18                [v,dummy,r,dummy2]=dmperm(X);
19                if v==dummy & length(r)>2
20                    linearblocks = []; % Simple diagonal terms;
21                    for blocks = 1:length(r)-1
22                        r1 = r(blocks);
23                        r2 = r(blocks+1)-1;
24                        if r2>r1
25                            sys = sys + set(Z(v(r1:r2),v(r1:r2)));
26                        else
27                            linearblocks = [linearblocks v(r1)];
28                        end
29                    end
30                    if ~isempty(linearblocks)
31                        D=diag(Z);
32                        sys = sys+set(D(linearblocks));
33                    end
34                else
35                    sys = sys + F(i);
36                end
37            else
38                sys = sys + F(i);
39            end
40        end
41    case 'sdpvar'
42        sys = {};
43        Z = F;
44        X = spy(Z);
45        [v,dummy,r,dummy2]=dmperm(X);
46        if v==dummy & length(r)>2
47            for blocks = 1:length(r)-1
48                r1 = r(blocks);
49                r2 = r(blocks+1)-1;
50                sys{end+1} = Z(v(r1:r2),v(r1:r2));
51            end
52        else
53            sys{1} = Z;
54        end
55    otherwise
56        error('Heh')
57end
Note: See TracBrowser for help on using the repository browser.