Please show exact and complete code of what you tried and the output which was produced, or at least a minimal reproducible example which is complete and illustrates your problem.
As mcg wrote, don’t use tolen(n) = minimize(...);
Get rid of tolen(n) =
Are you trying to save the optimal objective value each time minimize is called? if so, insert the line tolen(n) = cvx_optval;
after the minimize statement.
If you want to call minimize each time through the nested loops, you need to put cvx_begin, CVX variable declarations, and all expressions (and constraints if you had any) between the cvx_begin and cvx_end, which should all be inside the innermost loop.
Thank you very much.
Now it works and the results seem satisfying.
One more question here:
The cvx output(like the below) is very long and much.(Since there’re more than 1000 iterations…)
I want to save(hide) the outputs in a file in order not to show on the command window.
Calling SDPT3 4.0: 12 variables, 2 equality constraints
------------------------------------------------------------
num. of constraints = 2
dim. of socp var = 12, num. of socp blk = 4
*******************************************************************
SDPT3: Infeasible path-following algorithms
*******************************************************************
version predcorr gam expon scale_data
NT 1 0.000 1 0
it pstep dstep pinfeas dinfeas gap prim-obj dual-obj cputime
-------------------------------------------------------------------
0|0.000|0.000|3.8e-01|6.0e+00|2.1e+01| 0.000000e+00 0.000000e+00| 0:0:00| chol 1 1
1|1.000|0.997|4.6e-09|1.2e-01|3.9e-01| 0.000000e+00 5.244599e-03| 0:0:00| chol 1 1
2|1.000|1.000|6.8e-08|1.0e-02|2.8e-02| 0.000000e+00 7.256085e-04| 0:0:00| chol 1 1
3|1.000|1.000|3.2e-08|1.0e-03|2.2e-03| 0.000000e+00 1.046287e-04| 0:0:00| chol 1 1
4|1.000|1.000|1.1e-08|1.0e-04|1.8e-04| 0.000000e+00 1.404183e-05| 0:0:00| chol 1 1
5|1.000|1.000|1.6e-10|1.0e-05|1.4e-05| 0.000000e+00 1.779475e-06| 0:0:00| chol 1 1
6|1.000|0.989|1.1e-11|1.1e-07|1.5e-07| 0.000000e+00 1.939589e-08| 0:0:00| chol 1 1
7|1.000|0.988|6.3e-14|1.3e-09|1.9e-09| 0.000000e+00 1.779273e-10| 0:0:00|
stop: max(relative gap, infeasibilities) < 1.49e-08
-------------------------------------------------------------------
number of iterations = 7
primal objective value = 0.00000000e+00
dual objective value = 1.77927349e-10
gap := trace(XZ) = 1.91e-09
relative gap = 1.91e-09
actual relative gap = -1.78e-10
rel. primal infeas (scaled problem) = 6.33e-14
rel. dual " " " = 1.32e-09
rel. primal infeas (unscaled problem) = 0.00e+00
rel. dual " " " = 0.00e+00
norm(X), norm(y), norm(Z) = 1.6e+00, 2.9e-10, 1.4e-09
norm(A), norm(b), norm(C) = 3.8e+00, 1.6e+00, 1.0e+00
Total CPU time (secs) = 0.06
CPU time per iteration = 0.01
termination code = 0
DIMACS: 6.3e-14 0.0e+00 1.3e-09 0.0e+00 -1.8e-10 1.9e-09
-------------------------------------------------------------------
------------------------------------------------------------
Status: Solved
Optimal value (cvx_optval): +0
You can use cvx_begin quiet
in order to suppress all the CVX output. You can rely on MATLAB inspection in your code and/or saving the values of the CVX variable output values, cvx_optval, and cvx_status to assess the results of each CVX invocation. You can use the MATLAB diary command if you want to save a copy of all the CVX output (without using quiet option).
If you have 1296 optimization problems to solve, then you need to have 1296 occurrences of cvx_begin … cvx_end.
Are you getting the correct answer as far as you know? if so, it is a question of run time. You can try moving everything possible out of the for loops, but perhaps yuu have already done that. If so, if you want to speed things up, you may have to use a different tool which doesn’t incur CVX’s overhead