[37] | 1 | function setduals(F,D_struc,K) |
---|
| 2 | |
---|
| 3 | D_struc = full(D_struc); |
---|
| 4 | if ~isempty(D_struc) |
---|
| 5 | |
---|
| 6 | % Equality constraints might have been converted |
---|
| 7 | % to inequalities |
---|
| 8 | if isfield(K,'fold') |
---|
| 9 | D_struc = [-D_struc(1:K.fold)+D_struc(1+K.fold:2*K.fold);D_struc(2*K.fold+1:end)]; |
---|
| 10 | K.f = K.fold; |
---|
| 11 | K.l = K.l-2*K.fold; |
---|
| 12 | end |
---|
| 13 | |
---|
| 14 | Z = dual2cell(D_struc,K); |
---|
| 15 | |
---|
| 16 | Finfo = lmiinfo(F); |
---|
| 17 | lmi_index = []; |
---|
| 18 | j=1; |
---|
| 19 | |
---|
| 20 | if ~isempty(Finfo.sdp) |
---|
| 21 | for i = 1:size(Finfo.sdp,1) |
---|
| 22 | lmi_index = [lmi_index;Finfo.sdp(i,3)]; |
---|
| 23 | duals{j}=(Z.s{i}+Z.s{i}')/2;j = j+1; |
---|
| 24 | end |
---|
| 25 | end |
---|
| 26 | |
---|
| 27 | if ~isempty(Finfo.soc) |
---|
| 28 | for i = 1:size(Finfo.soc,1) |
---|
| 29 | lmi_index = [lmi_index;Finfo.soc(i,3)]; |
---|
| 30 | duals{j}=Z.q{i};j = j+1; |
---|
| 31 | end |
---|
| 32 | end |
---|
| 33 | |
---|
| 34 | if ~isempty(Finfo.rlc) |
---|
| 35 | for i = 1:size(Finfo.rlc,1) |
---|
| 36 | lmi_index = [lmi_index;Finfo.rlc(i,3)]; |
---|
| 37 | duals{j}=Z.r{i};j = j+1; |
---|
| 38 | end |
---|
| 39 | end |
---|
| 40 | |
---|
| 41 | if ~isempty(Finfo.lin) |
---|
| 42 | top=1; |
---|
| 43 | for i = 1:size(Finfo.lin,1) |
---|
| 44 | lmi_index = [lmi_index;Finfo.lin(i,3)]; |
---|
| 45 | duals{j}=reshape(Z.l(top:top+Finfo.lin(i,1)*Finfo.lin(i,2)-1),Finfo.lin(i,1),Finfo.lin(i,2));j = j+1; |
---|
| 46 | top = top+Finfo.lin(i,1)*Finfo.lin(i,2); |
---|
| 47 | end |
---|
| 48 | end |
---|
| 49 | if ~isempty(Finfo.equ) |
---|
| 50 | top=1; |
---|
| 51 | for i = 1:size(Finfo.equ,1) |
---|
| 52 | lmi_index = [lmi_index;Finfo.equ(i,3)]; |
---|
| 53 | duals{j}=reshape(Z.f(top:top+Finfo.equ(i,1)*Finfo.equ(i,2)-1),Finfo.equ(i,1),Finfo.equ(i,2));j = j+1; |
---|
| 54 | top = top+Finfo.equ(i,1)*Finfo.equ(i,2); |
---|
| 55 | end |
---|
| 56 | end |
---|
| 57 | |
---|
| 58 | if ~isempty(lmi_index) |
---|
| 59 | yalmip('setdual',lmi_index,duals); |
---|
| 60 | end |
---|
| 61 | |
---|
| 62 | end |
---|