1 | function [exponent_p_monoms_changed,varchange] = variablechange(exponent_p_monoms) |
---|
2 | %function [exponent_p_changed,varchange] = variablechange(exponent_p,monom_indicies) |
---|
3 | %VARIABLECHANGE Internal function to reduce monomials in SOS programs |
---|
4 | |
---|
5 | % Author Johan Löfberg |
---|
6 | % $Id: variablechange.m,v 1.3 2004/09/17 23:21:50 johanl Exp $ |
---|
7 | |
---|
8 | n = size(exponent_p_monoms,2); |
---|
9 | exponent_p_monoms_changed = exponent_p_monoms; |
---|
10 | varchange = ones(1,n); |
---|
11 | |
---|
12 | % UGLY!!!!!!!!!!!!!!!!!! Loop and clean up... |
---|
13 | |
---|
14 | % Even multiple of 4? |
---|
15 | for i = 1:size(exponent_p_monoms,2) |
---|
16 | rems = rem(exponent_p_monoms(:,i),4); |
---|
17 | if all(rems==0) & all(even(exponent_p_monoms(:,i)/4)) |
---|
18 | exponent_p_monoms_changed(:,i)=exponent_p_monoms_changed(:,i)/4; |
---|
19 | varchange(i)=4*varchange(i); |
---|
20 | end |
---|
21 | end |
---|
22 | |
---|
23 | % Multiple of 3? |
---|
24 | for i = 1:size(exponent_p_monoms,2) |
---|
25 | rems = rem(exponent_p_monoms(:,i),3); |
---|
26 | if all(rems==0) |
---|
27 | exponent_p_monoms_changed(:,i)=exponent_p_monoms_changed(:,i)/3; |
---|
28 | varchange(i)=3; |
---|
29 | end |
---|
30 | end |
---|
31 | |
---|
32 | exponent_p_monoms = exponent_p_monoms_changed; |
---|
33 | |
---|
34 | % Even multiple of 2? |
---|
35 | for i = 1:size(exponent_p_monoms,2) |
---|
36 | rems = rem(exponent_p_monoms(:,i),2); |
---|
37 | if all(rems==0) & all(even(exponent_p_monoms(:,i)/2)) |
---|
38 | exponent_p_monoms_changed(:,i)=exponent_p_monoms_changed(:,i)/2; |
---|
39 | varchange(i)=2*varchange(i); |
---|
40 | end |
---|
41 | end |
---|
42 | |
---|
43 | return |
---|
44 | |
---|
45 | n = size(exponent_p,2); |
---|
46 | exponent_p_changed = exponent_p; |
---|
47 | varchange = ones(1,n); |
---|
48 | |
---|
49 | % UGLY!!!!!!!!!!!!!!!!!! Loop and clean up... |
---|
50 | |
---|
51 | % Even multiple of 4? |
---|
52 | for i = 1:length(monom_indicies) |
---|
53 | rems = rem(exponent_p(:,monom_indicies(i)),4); |
---|
54 | if all(rems==0) & all(even(exponent_p(:,monom_indicies(i))/4)) |
---|
55 | exponent_p_changed(:,monom_indicies(i))=exponent_p_changed(:,monom_indicies(i))/4; |
---|
56 | varchange(monom_indicies(i))=4*varchange(monom_indicies(i)); |
---|
57 | end |
---|
58 | end |
---|
59 | |
---|
60 | % Multiple of 3? |
---|
61 | for i = 1:length(monom_indicies) |
---|
62 | rems = rem(exponent_p(:,monom_indicies(i)),3); |
---|
63 | if all(rems==0) |
---|
64 | exponent_p_changed(:,monom_indicies(i))=exponent_p_changed(:,monom_indicies(i))/3; |
---|
65 | varchange(monom_indicies(i))=3; |
---|
66 | end |
---|
67 | end |
---|
68 | |
---|
69 | exponent_p = exponent_p_changed; |
---|
70 | |
---|
71 | % Even multiple of 2? |
---|
72 | for i = 1:length(monom_indicies) |
---|
73 | rems = rem(exponent_p(:,monom_indicies(i)),2); |
---|
74 | if all(rems==0) & all(even(exponent_p(:,monom_indicies(i))/2)) |
---|
75 | exponent_p_changed(:,monom_indicies(i))=exponent_p_changed(:,monom_indicies(i))/2; |
---|
76 | varchange(monom_indicies(i))=2*varchange(monom_indicies(i)); |
---|
77 | end |
---|
78 | end |
---|