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
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.
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 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.
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_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