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