sdpvar

Updated:


sdpvar is used to define YALMIPs symbolic decision variables.

Syntax

x = sdpvar(n)
x = sdpvar(n,m)
x = sdpvar(n,m,'type')
x = sdpvar(n,m,'type','field')
x = sdpvar(dim1,dim2,dim3,...,dimn,'type','field')
sdpvar x

Examples

A square real-valued symmetric matrix is obtained with

P = sdpvar(n,n) % SYMMETRIC!

The command above can be simplified by only giving one argument when defining a symmetric matrix or a scalar.

P = sdpvar(n) % SYMMETRIC!

We can also define the same matrix using a more verbose notation.

P = sdpvar(n,n,'symmetric')

A fully parameterized (i.e., not necessarily symmetric) square matrix requires a third argument.

P = sdpvar(n,n,'full')

A square complex-valued fully parameterized matrix is obtained with

P = sdpvar(n,n,'full','complex')

YALMIP tries to complete the third and fourth argument, so an equivalent command is

P = sdpvar(n,n,'sy','co')

Variables can alternatively be defined using command line syntax (although this sometimes can be dangerous inside functions due to a bug in some versions of MATLAB.)

sdpvar x y z(1,1) u(2,2) v(2,3,'full','complex')

A lot of users seem to get stuck initially on simple things such as defining a diagonal matrix. The most important thing to remember when working with YALMIP is that almost all MATLAB operators can be applied also on sdpvar objects. Hence, we create diagonal matrices with

X = diag(sdpvar(n,1));

Or Hankel…

X = hankel(sdpvar(n,1));

A typical situation is that several identical variables are needed, and a natural way to implement this is to use a loop.

for i = 1:100; X{i} = sdpvar(5,5);end

A more convenient way to implement this is to use vector valued dimensions (this currently only works if all matrices are symmetric or full)

X = sdpvar(5*ones(1,100),5*ones(1,100));

We define a 3D variable, where each slice in the first two dimensions is symmetric.

X = sdpvar(3,3,3)
X(:,:,1)
Linear matrix variable 3x3 (symmetric, real, 6 variables)

The following command defines a 4D variable, where each slice in the first two dimensions is fully parametrized.

X = sdpvar(3,3,3,3,'full')
X(:,:,1,1)
Linear matrix variable 3x3 (full, real, 9 variables)