Error "Undefined function 'vec' for input arguments of type 'double'

Uncategorized
Oct 5, 2016
X

Dear all,

When I was using CVX, the code works on my desktop. But it does not work on another computer.
The problem I was try to solve is shown as below

cvx_begin
variable x©
minimize (-labelTrain’trainDatax + sum(log_sum_exp([zeros(1,r); x’trainData’]))+ lambda sum(abs(x)./(sqrt(abs(beta))+ eps)));

cvx_end

CVX works with other objective functions on this computer.
Is there anything wrong with this computer?
The error information is as following:

Undefined function ‘vec’ for input arguments of type ‘double’.

Error in cvxprob/solve (line 244)
Anew2 = Anew * diag(sparse(vec(amult(orow,:))));

Error in cvx_end (line 88)
solve( prob );

Error in CptLambda (line 33)
cvx_end
Thank you for your time.

M

Please read the first half of the following thread and see if it helps you.

Here is the answer which hopefully will help you.

mcg Michael C. Grant A more permanent solution is to add the directory cvx/functions/vec_ to your MATLAB path (making sure of course to add the full path)!

Here’s what is going on. vec is a function that converts matrices into vectors. I have it privately defined for @cvx
objects, so that definition doesn’t conflict with anything else. But
it’s also useful for double-precision matrices as well. The problem is
that a lot of other packages define it as well. In order to avoid name
conflicts, I try to add my own version of vec.m only if it isn’t present already in your MATLAB path.

But for some reason, in a few cases out there, my cvx_setup script thinks it sees vec
in your MATLAB path when it’s not there. I really don’t know why that
is. I have simply been unable to reproduce this problem myself. If
someone could figure that out for me, I would be grateful.