You got the message because you still have `variable X(3,3);`

. Remove that line from your program. And then you need to have `X = X0 + F_param + [0 v(2) 0;0 0 v(3)l;v(1) 0 0];`

before you use X in the objective.

Also note that although the following code is correct

```
v(1) >= lower_bounds(1);
v(2) >= lower_bounds(2);
v(3) >= lower_bounds(3);
v(1) <= upper_bounds(1);
v(2) <= upper_bounds(2);
v(3) <= upper_bounds(3);
```

you could instead use

`lower_bounds <= v <= upper_bounds`

So your complete program could be

```
cvx_begin
variable v(3);
X = X0 + F_param + [0 v(2) 0;0 0 v(3);v(1) 0 0];
minimize norm_nuc(X);
subject to
lower_bounds <= v <= upper_bounds
cvx_end
```

Alternatively, you could keep the declaration of X as a variable, and change what is now an expression assignment on X into a constraint.

```
cvx_begin
variable v(3);
variable X(3,3);
minimize norm_nuc(X);
subject to
lower_bounds <= v <= upper_bounds
X == X0 + F_param + [0 v(2) 0;0 0 v(3);v(1) 0 0];
cvx_end
```

I’'m not sure, but I think CVX may present the exact same model (equally efficient) to the solver in either case.

Or you can just use the expression for X directly in the objective.

```
cvx_begin
variable v(3);
minimize(norm_nuc(X0 + F_param + [0 v(2) 0;0 0 v(3);v(1) 0 0]))
subject to
lower_bounds <= v <= upper_bounds
cvx_end
```