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.