# The second argument must be concave

First of all, I read the other convex ./ convex errors and “why isnt CVX accepting my model” topic but couldnt figured out how to pass this error.

The original error was :

Error using .*
Disciplined convex programming error:
Cannot perform the operation: {convex} ./ {convex}
Error in ./ (line 19)
z = times( x, y, ‘./’ );
Error in * (line 36)
z = feval( oper, x, y );
Error in / (line 15)
z = mtimes( x, y, ‘rdivide’ );
Error in optimclosedform (line 69)
maximize( abs(rx_intended) / abs(rx_interference + rx_noise) );

and I used quad_over_lin as suggested but it now requires second argument to be concave.

Optimization problem is a basic SINR calculation and I dont think it should be that hard so I hink I miss some basic thing in my code.

I’m just trying to find transmit power(scalar) value that maximizes SINR

Here is the code :

``````cvx_begin
variable p([64 10]);

W_ZF = H' * inv(H * H');
W_ZF = (W_ZF / norm(W_ZF,'fro'));
rx_noise = (1/sqrt(2)) * randn(1,1) *db2pow(noisevariancedb) +  (1/sqrt(2)) * 1j * randn(1,1)*db2pow(noisevariancedb) *10e7;

tx_symbols = W_ZF;
tx_symbols = (tx_symbols.' ./ (N*K*mean(abs(W_ZF.')))).' ;
tx_symbols = tx_symbols .* p ;

k = 1;
H_k = H(k,:);
rx_gains = H_k * tx_symbols ;
rx_intended =  rx_gains(:,k);
rx_interference = sum(rx_gains(:,[1:k-1 k+1:end]));

maximize( quad_over_lin(rx_intended , abs(rx_interference + sqrt(rx_noise) )  ) );
subject to
sum(sum(p)) < 100

cvx_end
``````

and the error :

Even if the 2nd argument of `quad_over_lin` were concave, you would be maximizing a convex expression, which is not consistent with being a convex optimization problem.