Orthogonal matrix variable


(ciel bleu) #1

how can i define an orthogonal matrix variable in cvx?
any help is greatly appreciated


(Mark L. Stone) #2

How do you intend to use it?

variable X(n,n)
X'*X == eye(n) 

is non-convex and not allowed by CVX. Actually, X'*X is not even allowed by CVX.

Did you carefully read and study the CVX FAQ link https://www.google.com/search?client=firefox-b-1-d&q=cvx+faq I posted in my reply on your previous thread Quadratic nonconvex inequality constraint ? The first thing you need to do before using CVX for a problem is to determine that it is (other than possible binary or integer constraints) a convex optimization problem.

if you have a problem with orthogonality constraints, then either

  1. You need a clever reformulation
  2. Use a non-convex nonlinear optimizer
  3. Perform Riemannian Optimization using, for example, the Stiieffel, Grassmann, or related manifold. You could consider using MANOPT https://www.manopt.org/tutorial.html . If your math background is strong enough, you can read “Optimization Algorithms on Matrix Manifolds” by P.-A. Absil, R. Mahony & R. Sepulchre https://press.princeton.edu/absil ans subsequent papers by them and their students and others.