I don't quite understand this.Inv_pos can not be used correctly

for i=1:N %high boundary of 1/t3[n]

for i=1:N %high boundary of 1/t2[n]

87415160130094.6 87415160130081.7 87415160131461.3 87415160130701.5 87415160129994.6 87415160129985.0 87415160130805.5 87415160131386.3 87415160130077.7

We have no idea what t3 or t2 are, nor how t3_lb or t2_lb have been declared, if at all. Nor what error message or unexpected behavior you may have encountered.

If t3 is a MATLAB (not CVX) variable, i.e., has a numerical value, then t3_lb(1,i) will have a numerical value. if t3 is a CVX variable or concave or affine CVX expression, then inv_pos will not produce an error message, but the assignment to t3_lb(1,i) requires t3_lb to have been declared as an expr4ession holder (array) http://cvxr.com/cvx/doc/basics.html#assignment-and-expression-holders. Similarly with t2 and t2_lb.

help inv_pos

inv_pos Reciprocal of a positive quantity.
inv_pos(X) returns 1./X if X is positive, and +Inf otherwise.
X must be real.

 For matrices and N-D arrays, the function is applied to each element.

  Disciplined convex programming information:
      inv_pos is convex and nonincreasing; therefore, when used in CVX
      specifications, its argument must be concave (or affine).

After CVX has solved or inaccurate/solved, the CVX variables have their optimal values. But CVX expressions do not necessarily.correspond to the optimal values of CVX variables. CVX makes sure the expressions are properly evaluated for purposes of conducting the optimization and populating cvx_optval, but the numerical values of CVX expressions after CVX completes do not necessarily correspond to the optimal values of the variables. Therefore, you should recompute CVX expression values using the optimal values of CVX variables if you wish to know the optimal values of CVX expressions.

Does that resolve the “conflict” between t3 and t3_lb ?. Because it is an expression, if you want to know the “optimal” value of t3_lb, you must recompute it after CVX completes, using the “then” numerically populated value of t3 Doing so, there should be no conflict.

I don’t know why you commented out the expression declarations.

Thanks for your answer, Mark. I restate the expression, and in the final result, the value of t3 is a value greater than 1e8. Originally t3_lb is the reciprocal of t3, but it is indeed a value greater than 1e13 in the result. I don’t know why.

Do not use the value of t3_lb after CVX completes. You need to recompute it after CVX completes, using t3. However, the optimization should still have been performed correctly by CVX /solver, but the returned value of expressions may not be the final optimal value used internally in the optimization.

Also, although not the reason for the phenomenon you observed, the numerical scaling of your problem is terrible. Non-zero numbers many orders of magnitude different than one are not a good thing in double precision numerical optimization.

Okay Mark. The bad final result is probably because my own theory is not rigorous enough, I will check again. Thanks again, Mark