This is my code:

load(‘C’)

r=C(:,4);

t=C(:,5);

n = size(C,1);

N = 100;

for i=1:n

eta(i,1) = randn()/2;

end

cvx_begin

variable x

maximize r’*x - t’*x

subject to

```
ones(n,1)'*x == N
x >= zeros(n,1)
exp(-x/N) >= eta
```

cvx_end

The objective function should clearly be scalar. But it gives the error, “Your objective function is not a scalar”. What am I doing wrong?

Furthermore, if I write the last constraint as follows:

```
for i=1:n
exp(-x(i,1)/N) >= eta(i,1)
end
```

then I get the following error: “Index exceeds matrix dimensions.”

You have declared the variable x to be a scalar, because you didn’t explicitly specify dimensions in the variable statement. Therefore your objective function winds up being a 1 by n vector, and the index for x is exceeded in the for loop version of your constraints.

I believe you want

`variable x(n,1)`

Oh, silly me!

Ok, now after doing the correction you suggested, it gives the following error in the objective function line: “Inner matrix dimensions must agree.” Why is that occurring now?

It looks like both terms of the objective function should be (1 by n) times (n by 1), which is a scalar. So show your whole program and do a `whos`

just before the objective function. That should show the dimensions on everything including the CVX variable(s). Make sure you didn’t mix up n and N.

This is what I get when I do a `whos`

:

```
Name Size Bytes Class Attributes
N 1x1 8 double
C 34x5 1360 double
cvx_problem 1x1 544 cvxprob
eta 34x1 272 double
i 1x1 8 double
n 1x1 8 double
r 34x1 272 double
t 34x1 272 double
x 34x1 2089 cvx
```

So, it seems the dimensions should be alright. Can’t figure out why this particular error is showing up.

Put parentheses around your objective function, which seems to somertimes be needed.

`maximize(r'*x-t'*x)`

I always use parentheses, as shown in the CVX Users’ Guide. But I believe you can get away with not using them in certain circumstances. I will have to defer to @mcg to make a more definitive statement.

Gee, thanks Mark! That worked! Good to learn about this best practice.