# Disciplined convex programming error: Cannot perform the operation: {positive constant} ./ {real affine}

(Abdelalim Kaoutar) #1

Hello everyone,
It is been i while that i can’t solve my problem. The code below is for an optimization including the cost function of a log function.
As you can see in the code, i used the entr function as sugggested for solving this kind of problem.
Please feel free to give me advise/suggestion concerning my following erroned code.

Matlab code:
%%%%%%%%%Test Allocation secondaire%%%%%%%%%%%%%%

``````clear, clc,

M=5; %%
L=4; %%

Q_M=1; %%

Q=4; %%
H=randn(M,L); %%
Ki=randn(M,L); %%

sigma2=1; %%noise power

d_min=2*sqrt(3/(Q*(Q-1)));%

%%Choose a canal
m=randperm(M);
m=m(1);

%%Optimization problem

cvx_begin
variable q(L) nonnegative

fc=0;
for l=1:L

sinr=2*Ki(m,l)^2/(sigma2+abs(H(m,L))^2*q(l)); %sinr

P_es=2*(Q-1)/Q*erfc(sqrt((3/(Q^2-1))*sinr));

X2_ml=sigma2 + P_es*(Ki(m,l)^2)*d_min^2;

%fc=fc+log2(1+(abs(H(m,l))^2*q(l))/X2_ml);

fc=fc + (inv_pos(X2_ml + H(m,l)^2*q(l))*rel_entr(H(m,l)^2*q(l)+ X2_ml, X2_ml))
end

maximize(fc);
%subject to
%norm(q,1) <= Q_M
cvx_end``````
(Mark L. Stone) #2

Use `inv_pos` to avoid that error.

(Abdelalim Kaoutar) #3

Thank you so much for your help,
I modify my code as you suggested. But it seems that the ERFC function is not recognized by the cvx.
The error signals : Undefined function ‘erfc’ for input arguments of type ‘cvx’.
Is there in equivalent function for erfc ? I don’t know if this is the main problem.

Matlab code:
%%%%%%%%%Test Allocation secondaire%%%%%%%%%%%%%%

clear, clc,

M=5; %%Canaux
L=4; %%Sous porteuses

Q_M=1; %%Puissance max

Q=4; %%modulation order
H=randn(M,L); %%coeff. canal pour le symbole secondaire
Ki=randn(M,L); %%coeff. symbole primaire (INCLURE LA SORTIR DU BIT LOADING ICI)

sigma2=1; %%noise power

d_min=2sqrt(3/(Q(Q-1)));%distance entre symboles

%%Choose a canal
m=randperm(M);
m=m(1);

%%Optimization problem

cvx_begin
variable q(L) nonnegative

fc=0;

%q=rand(L,1); %test

for l=1:L

sinr=2Ki(m,l)^2inv_pos((sigma2+abs(H(m,L))^2*q(l)));%sinr

P_es=(sqrt(Q)-1)inv_pos(sqrt(Q))pow_p(erfc((sinr3inv_pos(2*(Q-1)))),1/2);%probabilité d’erreur

X2_ml=sigma2 + P_es*(Ki(m,l)^2)*d_min^2;

%fc=fc+log2(1+(abs(H(m,l))^2q(l))/X2_ml);
fc=fc + (inv_pos(X2_ml + H(m,l)^2
q(l))rel_entr(H(m,l)^2q(l)+ X2_ml, X2_ml));%Cette ligne est équivalente à la ligne précédente et utilise un fonction connu convace du cvx mais
end

maximize(fc);
%subject to
%norm(q,1) <= Q_M
cvx_end

(Mark L. Stone) #4

`erfc` is neither convex nor concave, ans is not supported by CVX. The closest CVX comes to supporting this is an approximation to the log of the Normal cumulative distribution function, `log_normcdf` (note that erfc can be expressed in terms of Normal cumulative distribution function). But I don;t see how this will do what you need. So I suggest you use some other tool which can handle non-convex problems.

(Abdelalim Kaoutar) #5

Hello Mark thanks a lot for you help, i appreciate. I think you’re right. Even replacing erfc function by log_normcdf doesn’t work and here is the obtained error(code in previous reply): Error using cvxprob/newcnstr (line 192)
Disciplined convex programming error:
Invalid constraint: {real affine} >= {concave}
What do you think about this error? knowing that i don’t include any constraint yet.

Otherwise, Do you know any tools that i can use to optimize this kind problems.
Thank again,

(Mark L. Stone) #6

You can try using YALMIP.

(Abdelalim Kaoutar) #7

Thanks a lot.

A. Kaoutar