1 | function exponent_m = separable(exponent_m,exponent_p,options); |
---|
2 | %SEPARABLE Internal function, not used |
---|
3 | |
---|
4 | % Author Johan Löfberg |
---|
5 | % $Id: separable.m,v 1.2 2004/07/02 08:17:32 johanl Exp $ |
---|
6 | |
---|
7 | % %exponent_m(sum((exponent_m>0),2)>2,:)=[]; |
---|
8 | % |
---|
9 | % card = max(sum((exponent_p>0),2)); |
---|
10 | % |
---|
11 | % n_less = exponent_m(sum((exponent_m>0),2)<card,:); |
---|
12 | % n_equ = exponent_m(sum((exponent_m>0),2)==card,:); |
---|
13 | % n_larg = exponent_m(sum((exponent_m>0),2)>card,:); |
---|
14 | % |
---|
15 | % A = minksum(n_less,n_less); |
---|
16 | % B = minksum(n_less,n_equ); |
---|
17 | % C = minksum(n_less,n_larg); |
---|
18 | % D = minksum(n_equ,n_equ); |
---|
19 | % E = minksum(n_equ,n_larg); |
---|
20 | % F = minksum(n_larg,n_larg); |
---|
21 | |
---|
22 | disconnected = []; |
---|
23 | for i = 1:size(exponent_p,2) |
---|
24 | for j = i+1:size(exponent_p,2) |
---|
25 | if ~any(exponent_p(:,i) & exponent_p(:,j)) |
---|
26 | disconnected = [disconnected;i j]; |
---|
27 | end |
---|
28 | end |
---|
29 | end |
---|
30 | |
---|
31 | for i = 1:size(disconnected,1) |
---|
32 | j = disconnected(i,1); |
---|
33 | k = disconnected(i,2); |
---|
34 | n0 = find(~exponent_m(:,j) & ~exponent_m(:,k)); |
---|
35 | nx = find(exponent_m(:,j) & ~exponent_m(:,k)); |
---|
36 | nz = find(~exponent_m(:,j) & exponent_m(:,k)); |
---|
37 | nxz = find(exponent_m(:,j) & exponent_m(:,k)); |
---|
38 | |
---|
39 | % m0 = exponent_m(n0,:); |
---|
40 | % mx = exponent_m(nx,:); |
---|
41 | % mz = exponent_m(nz,:); |
---|
42 | % mxz = exponent_m(nxz,:); |
---|
43 | % |
---|
44 | % from_E = minksum(mx,mz); |
---|
45 | % from_B = minksum([m0;mx;mz],mxz); |
---|
46 | % from_C = minksum(mxz,mxz); |
---|
47 | % m_e = exponent_m(union(nx,nz),:) |
---|
48 | % m_cb = exponent_m(union(nx,nz),:) |
---|
49 | exponent_m = exponent_m([n0;nx;nz],:); |
---|
50 | end |
---|
51 | |
---|
52 | |
---|
53 | function msum = minksum(a,b); |
---|
54 | msum = []; |
---|
55 | for i = 1:size(a,1) |
---|
56 | for j = i:size(b,1) |
---|
57 | msum = [msum;a(i,:)+b(j,:)]; |
---|
58 | end |
---|
59 | end |
---|