I am wondering if this is a proper use of the `quad_over_lin`.

``````quad_over_lin(x, -matrix_frac(y,Y) )
``````

It does not cause any error in my code, but I wonder if `quad_over_lin` is meant for dividing by linear functions only. The documentation in MATLAB simply says that the second argument must at least be concave (-matrix_frac() is concave).

Could someone help me understand if I am using this properly?

You need `Y` to be PSD, which implies `matrix_frac(y,Y)>=0`, but using `quad_over_lin` imposes nonnegativity on the second argument (because it will go to the root of a rotated second-order cone), which means `-matrix_frac(y,Y)>=0`. So I think you have actually written a disguised and probably ill-posed model of

``````Y>>0
matrix_frac(y,Y)==0
x==0
``````

Ahh, now that you pointed this out, I realize that I didn’t express my problem thoroughly. This is the situation

``````quad_over_lin(x, r-matrix_frac(y,Y) )
``````

where

``````Y>=0,
r-matrix_frac(y,Y) >0
``````

My question is, is this a proper use of `quad_over_lin()`? According to the documentation, the second argument needs to be concave (this one is with `r` being affine and `-matrix_frac(y,Y)` being concave). But the name of the function is quad over lin so does the second argument also need to be linear wrt `y`?

As long as you follow the rules (last paragraph below of help), it should be accepted by CVX, and should do what the help says. Neither argument needs to be affine (linear).

quad_over_lin Sum of squares over linear.
Z=quad_over_lin(X,Y), where X is a vector and Y is a scalar, is equal to
SUM(ABS(X).^2)./Y if Y is positive, and +Inf otherwise. Y must be real.

``````If X is a matrix, quad_over_lin(X,Y) is a row vector containing the values
of quad_over_lin applied to each column. If X is an N-D array, the operation
is applied to the first non-singleton dimension of X.

quad_over_lin(X,Y,DIM) takes the sum along the dimension DIM of X.
A special value of DIM == 0 is accepted here, which is automatically
replaced with DIM == NDIMS(X) + 1. This has the effect of eliminating
the sum; thus quad_over_lin( X, Y, NDIMS(X) + 1 ) = ABS( X ).^2 ./ Y.

In all cases, Y must be compatible in the same sense as ./ with the squared
sum; that is, Y must be a scalar or the same size as SUM(ABS(X).^2,DIM).

Disciplined convex programming information:
quad_over_lin is convex, nonmontonic in X, and nonincreasing in Y.
Thus when used with CVX expressions, X must be convex (or affine)
and Y must be concave (or affine).
``````
1 Like