Pow_p(quadratic constraints)

Dear all,

I just want to know the difference between p(loop)+sqrt(p(loop))-1 and p(loop)-sqrt(p(loop))-1. Both of them have the quadratic form. Why p(loop)-sqrt(p(loop))-1 return an error?

Thanks!

The code is listed as follows.

clear;
close all;
clc;
P_max = 1;

cvx_begin
    cvx_quiet(true);
    variable p(3,1)
    variable fes_p
    minimize fes_p
    subject to
        for loop = 1:1:3
            p(loop) >= 0
            p(loop) <= 1
            pow_p(p(loop)+sqrt(p(loop))-1,-1) + p(loop)  <= 4
            % pow_p(p(loop)-sqrt(p(loop))-1,-1) + p(loop)  <= 4 % Why return an error?
        end
        sum(p) <= fes_p*P_max
        fes_p >= 0
        fes_p <= 1
cvx_end

help pow_p

pow_p Positive branch of the power function.
pow_p(X,P) computes a convex or concave branch of the power function:
P < 0: pow_p(X,P) = X.^P if X > 0, +Inf otherwise
0 <= P < 1: pow_p(X,P) = X.^P if X >= 0, -Inf otherwise
1 <= P : pow_p(X,P) = X.^P if X >= 0, +Inf otherwise
Both P and X must be real.

Disciplined convex programming information:
    The geometry of pow_p(X,P) depends on the precise value of P,
    which must be a real constant:
             P < 0: convex  and nonincreasing; X must be concave.
        0 <= P < 1: concave and nondecreasing; X must be concave.
        1 <= P    : convex  and nonmonotonic;  X must be affine.
    In all cases, X must be real.

Your p = -1, therefore the argument of pow_p must be concave, which p(loop)+sqrt(p(loop))-1 is. However, p(loop)-sqrt(p(loop))-1 is not concave (it is convex), and therefore is not allowed.

Thanks for your answer!