# How to maximize the L-1/2 norm of a vector?

I am trying to maximize the L-1/2 norm of a vector in MATLAB using CVX, but the function ‘norm’ naturally does not accept p = 1/2 since it is not really a norm. So, I tried to construct the expression myself and encountered the error

Disciplined convex programming error:
Illegal operation: {concave} .^ {2}
(Consider POW_P, POW_POS, or POW_ABS instead.)

And using the function ‘pow_p’ yields the error

Disciplined convex programming error:
Illegal operation: pow_p( {concave}, {2} )

I know that the expression ’ maximize ||x||_(1/2) ’ is convex, but I cannot use CVX for it. How can I overcome this? Thank you in advance.

This can be done by expanding the 1/2 “norm”, and using `geo_mean`.

``````cvx_begin
variable x(n)
Objective = sum(x);
for i=1:n
for j=1+1:n
Objective = Objective + 2*geo_mean(x([i;j]));
end
end
maximize(Objective)
The CVX aspect can be vectorized by using a matrix argument `A` of `geo_mean`, for which the columns would be the [i;j] combinations, which would speed up the CVX model formulation, and then using `sum(geo_mean(x(A)))`