 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.