Hi Mark, as you see, the difference between f1 and f0 is negtive, that is too amazing, can you give me some advice?

Why is that amazing? The difference is less than 1 e-6. it appears you are employing an iterative top level algorithm, and you are expecting it to always acend, or at least never descend. What proof do you have that your algorithm can not descend? You don’t even have a line search or trust region implemented. In any even, descent of < 1e-6 is quite small - perhaps the algorithm has essentially converged, and any future iterations will just bounce around? Or maybe the algorithm doesn’t even converge, or if it does, does not necessarily converge to a local maximum of your original problem, let alone global maximum.

Also, in the future, please copy and paste your code as text into your post, and use the Preformatted icon - this makes it easier for readers to copy and paste your code into their own MATLAB session. If for some reason you need to show an image, for instance, for hand markings, that should be in addition to, not instead of, copy and pasted text.

this algrithm main step.

step1 : find a feasible X0 under the constraints

step2: X0 used as a initial solution to find an X0’ that satisfies trace(X0’)-max(d(:)) approximately to zreo.

step3: X0’ used as a initial solution to find optimal X.

I will have to defer to you as to the validity of your proof of non-descent. But perhaps the ascent was only noise (solver tolerance) level, depending on the problem sensitivity? What happens if you let it keep running?

I understand. It could be caused by the D.C programming, I used D.C programming method to approximate the original problem, so the optimal solution produced by the cvx may not the optimal of the original problem.