[37] | 1 | function exponent_m = monomialgeneration(exponent_p,csclasses) |
---|
| 2 | %MONOMIALGENERATION Internal function to create candidate monomials in SOS programs |
---|
| 3 | |
---|
| 4 | % Author Johan Löfberg |
---|
| 5 | % $Id: monomialgeneration.m,v 1.1 2006/03/30 13:56:54 joloef Exp $ |
---|
| 6 | |
---|
| 7 | exponent_m = []; |
---|
| 8 | for i = 1:length(csclasses) |
---|
| 9 | if isempty(exponent_p) |
---|
| 10 | exponent_m{i,1} = zeros(1,0); |
---|
| 11 | else |
---|
| 12 | % Create initial set of monomials |
---|
| 13 | mindegrees = min(exponent_p(:,csclasses{i})); |
---|
| 14 | maxdegrees = max(exponent_p(:,csclasses{i})); |
---|
| 15 | if any(2*floor((maxdegrees/2))>maxdegrees) |
---|
| 16 | error('Highest degree in a variable is odd => not PSD') |
---|
| 17 | end |
---|
| 18 | |
---|
| 19 | % Make initial generation smarter... |
---|
| 20 | exponent_m_temp1 = monolistcoeff(size(csclasses{i},2),ceil(maxdegrees/2),max(ceil(sum(exponent_p,2)/2))); |
---|
| 21 | |
---|
| 22 | [ii,jj] = sort(sum(exponent_m_temp1,2)); |
---|
| 23 | exponent_m_temp1 = exponent_m_temp1(jj,:); |
---|
| 24 | |
---|
| 25 | exponent_m_temp2 = zeros(size(exponent_m_temp1,1),size(exponent_p,2)); |
---|
| 26 | exponent_m_temp2(:,csclasses{i}) = exponent_m_temp1; |
---|
| 27 | exponent_m{i,1} = exponent_m_temp2; |
---|
| 28 | end |
---|
| 29 | end |
---|