Hi, everyone!

I tried to use CVX to solve a problem with the following constrain in the red rectangle

The matrix **W** is the variable and t is a given constant.

Since the W is the expression of the variable **W** and is related to multiplication,

I have tried to use the function **prod_inv()** to formulate the W (i.e, W_hat in the code) in the constrain like this

for n1=1:N

for n2=1:N

w_hat=[abs(W(n1,:)),abs(W(n2,:))];

W_hat(n1,n2)=inv(prod_inv(w_hat));

end

end

The error occurs

I have defined the w_hat and W_hat as the expression, and W as complex variable.

What should I do? I would appreciate it if someone could give some advice.

I don’t understand the notation, so can’t tell you what to do.

Here is the help for `geo_mean`

.Your argument of ``geo_mean ` clearly violates the rules. have you proven the problem is convex?

help geo_mean

geo_mean Geometric mean.

Y=geo_mean(X), where X is a vector, computes the geometrix mean of X. If any

of the elements of X are negative, then Y=-Inf. Otherwise, it is equivalent

to Y=PROD(X).^(1/LENGTH(X)). All elements must be real.`For matrices, geo_mean(X) is a row vector containing the geometric means of the columns. For N-D arrays, geo_mean(X) is an array of the geometric means taken along the first non-singleton dimension of X. geo_mean(X,DIM) takes the geometric mean along the dimension DIM of X. geo_mean(X,DIM,W), where W is a vector of nonnegative integers, computes a weighted geometric mean Y = PROD(X.^W)^(1/SUM(W)). This is more efficient than replicating the values of X W times. Note that W must be a vector, even if X is a matrix, and its length must be the same as SIZE(X,DIM). Disciplined convex programming information: geo_mean is concave and nondecreasing; therefore, when used in CVX specifications, its argument must be concave.`

Hi, Mark! Thanks for your time! Sorry for my bad notation

I am not clear about the codes in the cvx funtion *prod_inv.m*, in which the line 38 is about *geo_mean()*.

In fact, I just want to use the function prod_inv() to formulate the multiplication of two expressions about the varible **W**. I put the two expressions into a vector **w_hat** and make sure the elements in the vector w_hat positive by abs(), like this,

w_hat=[max(abs(W(n1,:)));max(abs(W(n2,:)))];

The error occurs in the follow code:

prod_inv(w_hat);

I wonder whether prod_inv() could be used like this, or any other methods would be suggested.

At last, I think my problem might be convex. I have solved it by CVX before I tried to add the additional constraint mentioned above.

Looking forward to your reply!

Hi, Mark! Thanks for your time! Sorry for the bad notation

I am not clear about the codes in the cvx funtion prod_inv.m, in which the line 38 is about geo_mean().

In fact, I just want to use the function prod_inv() to formulate the multiplication of two expressions about the varible W. I put the two expressions into a vector w_hat and make sure the elements in the vector w_hat positive by abs(), like this,

w_hat=[max(abs(W(n1,:)));max(abs(W(n2,:)))];

The error occurs in the follow code:

prod_inv(w_hat);

I wonder whether prod_inv() could be used like this, or any other methods would be suggested.

At last, I think my problem might be convex. I have solved it by CVX before I tried to add the additional constraint mentioned above.

Looking forward to your reply!

You have violated the rules for `prod_inv`

because `abs`

is convex.

Are you sure the problem is convex with this constraint? If it somehow is, it requires reformulation. I will mark it as nonconvex unless proven otherwise.

help prod_inv

prod_inv inverse of the product of a positive vector.

For a real vector, matrix, or X, prod_inv(X) returns 1.0 ./ PROD(X) if

the elements of X are all positive, and +Inf otherwise.`For matrices, prod_inv(X) is a row vector containing the inverse product of each column of X. For N-D arrays, prod_inv(X) is an array of inverse products taken along the first non-singleton dimension of X. prod_inv(X,DIM) takes inverse products along the dimension DIM of X. prod_inv(X,DIM,P), where P is a positive real constant, computes prod_inv(X).^P. This is slightly more efficient than the equivalent POW_POS(prod_inv(X),P). Disciplined convex programming information: prod_inv(X) is convex and nonincreasing in X; therefore, when used in CVX specifications, its argument must be concave or affine.`

'You wrote “At last, I think my problem might be convex. I have solved it by CVX before I tried to add the additional constraint mentioned above.”

You need to re-read the link I provided.