[37] | 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 |
---|