Rev | Line | |
---|
[37] | 1 | function setsdpvar(X,value,ls) |
---|
| 2 | %SETSDPVAR Obsolete, use ASSIGN instead |
---|
| 3 | |
---|
| 4 | % Author Johan Löfberg |
---|
| 5 | % $Id: setsdpvar.m,v 1.6 2005/04/29 08:05:01 joloef Exp $ |
---|
| 6 | |
---|
| 7 | if nargin<3 |
---|
| 8 | ls = 0; |
---|
| 9 | end |
---|
| 10 | |
---|
| 11 | if ~isa(X,'sdpvar') |
---|
| 12 | error('First argument should be an SDPVAR object.'); |
---|
| 13 | end |
---|
| 14 | |
---|
| 15 | if ~isa(value,'double') |
---|
| 16 | error('Second argument should be a DOUBLE.'); |
---|
| 17 | end |
---|
| 18 | |
---|
| 19 | if ~isequal(size(X),size(value)) |
---|
| 20 | error('Both arguments must have same size') |
---|
| 21 | end |
---|
| 22 | if ~isa(X,'sdpvar') |
---|
| 23 | error('First arguments must be an sdpvar object') |
---|
| 24 | end |
---|
| 25 | |
---|
| 26 | x_lmi_variables = X.lmi_variables; |
---|
| 27 | b = value(:)-X.basis(:,1); |
---|
| 28 | A = X.basis(:,2:end); |
---|
| 29 | feas_var = A\b; |
---|
| 30 | |
---|
| 31 | if ~ls |
---|
| 32 | if norm(A*feas_var-b)>sqrt(eps) |
---|
| 33 | error('Inconsistent assignment') |
---|
| 34 | end |
---|
| 35 | end |
---|
| 36 | |
---|
| 37 | sol = yalmip('getsolution'); |
---|
| 38 | keep_these = find(~ismember(sol.variables,x_lmi_variables)); |
---|
| 39 | sol.optvar = [sol.optvar(keep_these);feas_var(:)]; |
---|
| 40 | sol.variables = [sol.variables(keep_these);x_lmi_variables(:)]; |
---|
| 41 | yalmip('setallsolution',sol); |
---|
| 42 | |
---|
| 43 | |
---|
| 44 | |
---|
Note: See
TracBrowser
for help on using the repository browser.