Minimize Von Neumann Entropy in CVX Matlab

331 Views Asked by At

My optimization problem looks like:

cvx_begin

variable x(2, 2) semidefinite;
minimize(VNE(x))
subject to
trace(x) == 1    

cvx_end

Where, VNE or Von Neumann Entropy is defined as follows: $$vne(\phi) = \sum_{i}\lambda_i log(\lambda_i)$$ Where $\lambda_i$ are the eigenvalues of $\phi \in C_n$. $C_n$ is the space of all Positive semi-definite unit trace complex matrices.

When I run this optimization problem, matlab gives the following error:

Error using eig
Invalid data type. Input matrix must be double or single.

I understand that I'm sending a variable instead of a matrix with definite values. How do I fix this problem?

Thanks.

1

There are 1 best solutions below

0
On BEST ANSWER

Install CVXQUAD http://ask.cvxr.com/t/cvxquad-how-to-use-cvxquads-pade-approximant-instead-of-cvxs-unreliable-successive-approximation-for-gp-mode-log-exp-entr-rel-entr-kl-div-log-det-det-rootn-exponential-cone-cvxquads-quantum-matrix-entropy-matrix-log-related-functions/5598 .

Per https://en.wikipedia.org/wiki/Von_Neumann_entropy#Definition , Von Neumann Entropy of the matrix x equals -trace(x*logm(x)) . Note the ln in the Wikipedia article means what is called logm in MATLAB. As shown at https://github.com/hfawzi/cvxquad , quantum_entr(x) = -trace(x*logm(x)), and is concave in x. Therefore I will presume you wish to maximize Von Neumann Entropy (or equivalently, minimize its negative).

So the CVX program is

cvx_begin
variable x(2, 2) semidefinite;
minimize(-quantum_entr(x))
subject to
trace(x) == 1    
cvx_end

If you really do wish to minimize Von Neumann Entropy, that would be a non-convex optimization problem, and can not be handled by CVX.

If you have follow up questions on CVX usage, presuming they are for convex optimization problems, they would be better addressed at the CVX Forum http://ask.cvxr.com/